System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 569576f0dbc4c204ab6c0a0c6599add3d9e2475e:


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 37 2e 30 22 3b 0d 0a 23   "1.0.107.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 69 76 61 74 65  gs;..    private
0a20: 20 62 6f 6f 6c 20 5f 73 65 74 4c 6f 67 43 61 6c   bool _setLogCal
0a30: 6c 62 61 63 6b 3b 0d 0a 20 20 20 20 70 72 6f 74  lback;..    prot
0a40: 65 63 74 65 64 20 62 6f 6f 6c 20 5f 75 73 65 50  ected bool _useP
0a50: 6f 6f 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63  ool;..    protec
0a60: 74 65 64 20 69 6e 74 20 5f 70 6f 6f 6c 56 65 72  ted int _poolVer
0a70: 73 69 6f 6e 3b 0d 0a 20 20 20 20 70 72 69 76 61  sion;..    priva
0a80: 74 65 20 69 6e 74 20 5f 63 61 6e 63 65 6c 43 6f  te int _cancelCo
0a90: 75 6e 74 3b 0d 0a 0d 0a 23 69 66 20 28 4e 45 54  unt;....#if (NET
0aa0: 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c  _35 || NET_40 ||
0ab0: 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34   NET_45 || NET_4
0ac0: 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c  51 || NET_452 ||
0ad0: 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34   NET_46 || NET_4
0ae0: 36 31 20 7c 7c 20 4e 45 54 5f 34 36 32 20 7c 7c  61 || NET_462 ||
0af0: 20 4e 45 54 5f 34 37 20 7c 7c 20 4e 45 54 5f 34   NET_47 || NET_4
0b00: 37 31 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d  71) && !PLATFORM
0b10: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
0b20: 4b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  K..    private b
0b30: 6f 6f 6c 20 5f 62 75 69 6c 64 69 6e 67 53 63 68  ool _buildingSch
0b40: 65 6d 61 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  ema;..#endif....
0b50: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0b60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 75  >..    /// The u
0b70: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
0b80: 74 69 6f 6e 73 20 72 65 67 69 73 74 65 72 65 64  tions registered
0b90: 20 6f 6e 20 74 68 69 73 20 63 6f 6e 6e 65 63 74   on this connect
0ba0: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ion..    /// </s
0bb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0bc0: 74 65 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72  tected Dictionar
0bd0: 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  y<SQLiteFunction
0be0: 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74  Attribute, SQLit
0bf0: 65 46 75 6e 63 74 69 6f 6e 3e 20 5f 66 75 6e 63  eFunction> _func
0c00: 74 69 6f 6e 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e  tions;....#if IN
0c10: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
0c20: 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
0c30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0c40: 54 68 69 73 20 69 73 20 74 68 65 20 6e 61 6d 65  This is the name
0c50: 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 6c   of the native l
0c60: 69 62 72 61 72 79 20 66 69 6c 65 20 74 68 61 74  ibrary file that
0c70: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20   contains the.. 
0c80: 20 20 20 2f 2f 2f 20 22 76 74 73 68 69 6d 22 20     /// "vtshim" 
0c90: 65 78 74 65 6e 73 69 6f 6e 20 5b 77 72 61 70 70  extension [wrapp
0ca0: 65 72 5d 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  er]...    /// </
0cb0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0cc0: 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67 20 5f  otected string _
0cd0: 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c  shimExtensionFil
0ce0: 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  eName = null;...
0cf0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0d00: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
0d10: 20 69 73 20 74 68 65 20 66 6c 61 67 20 69 6e 64   is the flag ind
0d20: 69 63 61 74 65 20 77 68 65 74 68 65 72 20 74 68  icate whether th
0d30: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
0d40: 20 66 69 6c 65 20 74 68 61 74 0d 0a 20 20 20 20   file that..    
0d50: 2f 2f 2f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  /// contains the
0d60: 20 22 76 74 73 68 69 6d 22 20 65 78 74 65 6e 73   "vtshim" extens
0d70: 69 6f 6e 20 6d 75 73 74 20 62 65 20 64 79 6e 61  ion must be dyna
0d80: 6d 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20 62  mically loaded b
0d90: 79 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69 73 20  y..    /// this 
0da0: 63 6c 61 73 73 20 70 72 69 6f 72 20 74 6f 20 75  class prior to u
0db0: 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  se...    /// </s
0dc0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0dd0: 74 65 63 74 65 64 20 62 6f 6f 6c 3f 20 5f 73 68  tected bool? _sh
0de0: 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d  imIsLoadNeeded =
0df0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f   null;....    //
0e00: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0e10: 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65   /// This is the
0e20: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 61 74   name of the nat
0e30: 69 76 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20  ive entry point 
0e40: 66 6f 72 20 74 68 65 20 22 76 74 73 68 69 6d 22  for the "vtshim"
0e50: 0d 0a 20 20 20 20 2f 2f 2f 20 65 78 74 65 6e 73  ..    /// extens
0e60: 69 6f 6e 20 5b 77 72 61 70 70 65 72 5d 2e 0d 0a  ion [wrapper]...
0e70: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0e80: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0e90: 64 20 73 74 72 69 6e 67 20 5f 73 68 69 6d 45 78  d string _shimEx
0ea0: 74 65 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 20  tensionProcName 
0eb0: 3d 20 22 73 71 6c 69 74 65 33 5f 76 74 73 68 69  = "sqlite3_vtshi
0ec0: 6d 5f 69 6e 69 74 22 3b 0d 0a 0d 0a 20 20 20 20  m_init";....    
0ed0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0ee0: 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c     /// The modul
0ef0: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
0f00: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
0f10: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
0f20: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0f30: 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c  cted Dictionary<
0f40: 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f  string, SQLiteMo
0f50: 64 75 6c 65 3e 20 5f 6d 6f 64 75 6c 65 73 3b 0d  dule> _modules;.
0f60: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0fe0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
0ff0: 73 74 72 75 63 74 73 20 74 68 65 20 6f 62 6a 65  structs the obje
1000: 63 74 20 75 73 65 64 20 74 6f 20 69 6e 74 65 72  ct used to inter
1010: 61 63 74 20 77 69 74 68 20 74 68 65 20 53 51 4c  act with the SQL
1020: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
1030: 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20  ..    /// using 
1040: 74 68 65 20 55 54 46 2d 38 20 74 65 78 74 20 65  the UTF-8 text e
1050: 6e 63 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f  ncoding...    //
1060: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1070: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1080: 65 3d 22 66 6d 74 22 3e 0d 0a 20 20 20 20 2f 2f  e="fmt">..    //
1090: 2f 20 54 68 65 20 44 61 74 65 54 69 6d 65 20 66  / The DateTime f
10a0: 6f 72 6d 61 74 20 74 6f 20 62 65 20 75 73 65 64  ormat to be used
10b0: 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67   when converting
10c0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 73 20 74   string values t
10d0: 6f 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 44 61 74  o a..    /// Dat
10e0: 65 54 69 6d 65 20 61 6e 64 20 62 69 6e 64 69 6e  eTime and bindin
10f0: 67 20 44 61 74 65 54 69 6d 65 20 70 61 72 61 6d  g DateTime param
1100: 65 74 65 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eters...    /// 
1110: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1120: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b  / <param name="k
1130: 69 6e 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ind">..    /// T
1140: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 61  he <see cref="Da
1150: 74 65 54 69 6d 65 4b 69 6e 64 22 20 2f 3e 20 74  teTimeKind" /> t
1160: 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  o be used when c
1170: 72 65 61 74 69 6e 67 20 44 61 74 65 54 69 6d 65  reating DateTime
1180: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
1190: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
11a0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
11b0: 72 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 53 74 72  ram name="fmtStr
11c0: 69 6e 67 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ing">..    /// T
11d0: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
11e0: 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
11f0: 20 70 61 72 73 69 6e 67 20 61 6e 64 20 66 6f 72   parsing and for
1200: 6d 61 74 74 69 6e 67 20 44 61 74 65 54 69 6d 65  matting DateTime
1210: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
1220: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
1230: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
1240: 72 61 6d 20 6e 61 6d 65 3d 22 64 62 22 3e 0d 0a  ram name="db">..
1250: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
1260: 76 65 20 68 61 6e 64 6c 65 20 74 6f 20 62 65 20  ve handle to be 
1270: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1280: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
1290: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
12a0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
12b0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
12c0: 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
12d0: 20 2f 2f 2f 20 54 68 65 20 66 75 6c 6c 79 20 71   /// The fully q
12e0: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61  ualified file na
12f0: 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  me associated wi
1300: 74 68 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  th <paramref nam
1310: 65 3d 22 64 62 20 22 2f 3e 2e 0d 0a 20 20 20 20  e="db "/>...    
1320: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1330: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1340: 65 3d 22 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d 0a  e="ownHandle">..
1350: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
1360: 20 69 66 20 74 68 65 20 6e 65 77 6c 79 20 63 72   if the newly cr
1370: 65 61 74 65 64 20 6f 62 6a 65 63 74 20 69 6e 73  eated object ins
1380: 74 61 6e 63 65 20 77 69 6c 6c 20 6e 65 65 64 20  tance will need 
1390: 74 6f 20 64 69 73 70 6f 73 65 0d 0a 20 20 20 20  to dispose..    
13a0: 2f 2f 2f 20 6f 66 20 3c 70 61 72 61 6d 72 65 66  /// of <paramref
13b0: 20 6e 61 6d 65 3d 22 64 62 22 20 2f 3e 20 77 68   name="db" /> wh
13c0: 65 6e 20 69 74 20 69 73 20 6e 6f 20 6c 6f 6e 67  en it is no long
13d0: 65 72 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  er needed...    
13e0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
13f0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
1400: 65 33 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  e3(..        SQL
1410: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66  iteDateFormats f
1420: 6d 74 2c 0d 0a 20 20 20 20 20 20 20 20 44 61 74  mt,..        Dat
1430: 65 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d  eTimeKind kind,.
1440: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
1450: 66 6d 74 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  fmtString,..    
1460: 20 20 20 20 49 6e 74 50 74 72 20 64 62 2c 0d 0a      IntPtr db,..
1470: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
1480: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1490: 20 20 62 6f 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65    bool ownHandle
14a0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
14b0: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
14c0: 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 29 0d  ind, fmtString).
14d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
14e0: 69 66 20 28 64 62 20 21 3d 20 49 6e 74 50 74 72  if (db != IntPtr
14f0: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1500: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
1510: 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sql = new SQLite
1520: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
1530: 28 64 62 2c 20 6f 77 6e 48 61 6e 64 6c 65 29 3b  (db, ownHandle);
1540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66  ..            _f
1550: 69 6c 65 4e 61 6d 65 20 3d 20 66 69 6c 65 4e 61  ileName = fileNa
1560: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
1570: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
1580: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
1590: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
15a0: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
15c0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
15d0: 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
15e0: 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
15f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1600: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75    null, null, nu
1610: 6c 6c 2c 20 5f 73 71 6c 2c 20 66 69 6c 65 4e 61  ll, _sql, fileNa
1620: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
1630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1640: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
1650: 65 33 29 2c 20 66 6d 74 2c 20 6b 69 6e 64 2c 20  e3), fmt, kind, 
1660: 66 6d 74 53 74 72 69 6e 67 2c 20 64 62 2c 20 66  fmtString, db, f
1670: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1680: 20 20 20 20 20 20 20 20 20 20 6f 77 6e 48 61 6e            ownHan
1690: 64 6c 65 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20  dle }));..      
16a0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
16b0: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
1720: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
1730: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
1740: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1750: 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20   disposed;..    
1760: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
1770: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
1780: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d  throw */..    {.
1790: 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
17a0: 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
17b0: 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20  if (disposed).. 
17c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
17d0: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
17e0: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70  sedException(typ
17f0: 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d  eof(SQLite3).Nam
1800: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
1810: 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
1850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1880: 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
1890: 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ide void Dispose
18a0: 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
18b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
18c0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
18d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
18e0: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
18f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
1910: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1930: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1940: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1980: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1990: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
19a0: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
19b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
19c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
19f0: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a30: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
1a40: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
1a50: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
1a60: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa0: 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45  ////....#if INTE
1ab0: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
1ac0: 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E..             
1ad0: 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65     DisposeModule
1ae0: 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  s();..#endif....
1af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b00: 43 6c 6f 73 65 28 74 72 75 65 29 3b 20 2f 2a 20  Close(true); /* 
1b10: 44 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f  Disposing, canno
1b20: 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 20 20 20  t throw. */..   
1b30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1b40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
1b50: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
1b60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
1b70: 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70  ase.Dispose(disp
1b80: 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20  osing);....     
1b90: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1ba0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1bb0: 45 76 65 72 79 74 68 69 6e 67 20 73 68 6f 75 6c  Everything shoul
1bc0: 64 20 62 65 20 66 75 6c 6c 79 20 64 69 73 70 6f  d be fully dispo
1bd0: 73 65 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e  sed at this poin
1be0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
1bf0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1c00: 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
1c10: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1c20: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
1c30: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
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 2f 2f 2f 2f  ////////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
1ca0: 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c   INTEROP_VIRTUAL
1cb0: 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20  _TABLE..    /// 
1cc0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1cd0: 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61  // This method a
1ce0: 74 74 65 6d 70 74 73 20 74 6f 20 64 69 73 70 6f  ttempts to dispo
1cf0: 73 65 20 6f 66 20 61 6c 6c 20 74 68 65 20 3c 73  se of all the <s
1d00: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d  ee cref="SQLiteM
1d10: 6f 64 75 6c 65 22 20 2f 3e 20 64 65 72 69 76 65  odule" /> derive
1d20: 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63  d..    /// objec
1d30: 74 20 69 6e 73 74 61 6e 63 65 73 20 63 75 72 72  t instances curr
1d40: 65 6e 74 6c 79 20 61 73 73 6f 63 69 61 74 65 64  ently associated
1d50: 20 77 69 74 68 20 74 68 65 20 6e 61 74 69 76 65   with the native
1d60: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
1d70: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
1d80: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
1d90: 72 69 76 61 74 65 20 76 6f 69 64 20 44 69 73 70  rivate void Disp
1da0: 6f 73 65 4d 6f 64 75 6c 65 73 28 29 0d 0a 20 20  oseModules()..  
1db0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d    {..        //.
1dc0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
1dd0: 3a 20 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65 73  : If any modules
1de0: 20 77 65 72 65 20 63 72 65 61 74 65 64 2c 20 61   were created, a
1df0: 74 74 65 6d 70 74 20 74 6f 20 64 69 73 70 6f 73  ttempt to dispos
1e00: 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e of..        //
1e10: 20 20 20 20 20 20 20 74 68 65 6d 20 6e 6f 77 2e         them now.
1e20: 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 64    This code is d
1e30: 65 73 69 67 6e 65 64 20 74 6f 20 61 76 6f 69 64  esigned to avoid
1e40: 20 74 68 72 6f 77 69 6e 67 0d 0a 20 20 20 20 20   throwing..     
1e50: 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65     //       exce
1e60: 70 74 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74 68  ptions unless th
1e70: 65 20 44 69 73 70 6f 73 65 20 6d 65 74 68 6f 64  e Dispose method
1e80: 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a   of the module..
1e90: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1ea0: 20 69 74 73 65 6c 66 20 74 68 72 6f 77 73 20 61   itself throws a
1eb0: 6e 20 65 78 63 65 70 74 69 6f 6e 2e 0d 0a 20 20  n exception...  
1ec0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1ed0: 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 21    if (_modules !
1ee0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1ef0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f00: 66 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75  foreach (KeyValu
1f10: 65 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 53 51  ePair<string, SQ
1f20: 4c 69 74 65 4d 6f 64 75 6c 65 3e 20 70 61 69 72  LiteModule> pair
1f30: 20 69 6e 20 5f 6d 6f 64 75 6c 65 73 29 0d 0a 20   in _modules).. 
1f40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1f60: 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
1f70: 65 20 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b 0d  e = pair.Value;.
1f80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f90: 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
1fa0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1fc0: 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
1fd0: 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
1fe0: 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
1ff0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2000: 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65           _module
2010: 73 2e 43 6c 65 61 72 28 29 3b 0d 0a 20 20 20 20  s.Clear();..    
2020: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
2030: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  ndif....    ////
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 2f 2f  ////////////////
2070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20a0: 20 20 20 2f 2f 20 49 74 20 69 73 6e 27 74 20 6e     // It isn't n
20b0: 65 63 65 73 73 61 72 79 20 74 6f 20 63 6c 65 61  ecessary to clea
20c0: 6e 75 70 20 61 6e 79 20 66 75 6e 63 74 69 6f 6e  nup any function
20d0: 73 20 77 65 27 76 65 20 72 65 67 69 73 74 65 72  s we've register
20e0: 65 64 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 6e  ed.  If the conn
20f0: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 20 67  ection..    // g
2100: 6f 65 73 20 74 6f 20 74 68 65 20 70 6f 6f 6c 20  oes to the pool 
2110: 61 6e 64 20 69 73 20 72 65 73 75 72 72 65 63 74  and is resurrect
2120: 65 64 20 6c 61 74 65 72 2c 20 72 65 2d 72 65 67  ed later, re-reg
2130: 69 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e  istered function
2140: 73 20 77 69 6c 6c 20 6f 76 65 72 77 72 69 74 65  s will overwrite
2150: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 20 70 72 65   the..    // pre
2160: 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 2e  vious functions.
2170: 20 20 54 68 65 20 53 51 4c 69 74 65 46 75 6e 63    The SQLiteFunc
2180: 74 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65  tionCookieHandle
2190: 20 77 69 6c 6c 20 74 61 6b 65 20 63 61 72 65 20   will take care 
21a0: 6f 66 20 66 72 65 65 69 6e 67 20 75 6e 6d 61 6e  of freeing unman
21b0: 61 67 65 64 0d 0a 20 20 20 20 2f 2f 20 72 65 73  aged..    // res
21c0: 6f 75 72 63 65 73 20 62 65 6c 6f 6e 67 69 6e 67  ources belonging
21d0: 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
21e0: 6c 79 2d 72 65 67 69 73 74 65 72 65 64 20 66 75  ly-registered fu
21f0: 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 69 6e  nctions...    in
2200: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
2210: 76 6f 69 64 20 43 6c 6f 73 65 28 62 6f 6f 6c 20  void Close(bool 
2220: 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
2230: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71  {..      if (_sq
2240: 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l != null)..    
2250: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
2260: 66 20 28 21 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64  f (!_sql.OwnHand
2270: 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  le)..          {
2280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2290: 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  _sql = null;..  
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22b0: 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  rn;..          }
22c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 62 6f  ....          bo
22d0: 6f 6c 20 75 6e 62 69 6e 64 46 75 6e 63 74 69 6f  ol unbindFunctio
22e0: 6e 73 20 3d 20 28 28 5f 66 6c 61 67 73 20 26 20  ns = ((_flags & 
22f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2300: 46 6c 61 67 73 2e 55 6e 62 69 6e 64 46 75 6e 63  Flags.UnbindFunc
2310: 74 69 6f 6e 73 4f 6e 43 6c 6f 73 65 29 0d 0a 20  tionsOnClose).. 
2320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d                 =
2330: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
2340: 6f 6e 46 6c 61 67 73 2e 55 6e 62 69 6e 64 46 75  onFlags.UnbindFu
2350: 6e 63 74 69 6f 6e 73 4f 6e 43 6c 6f 73 65 29 3b  nctionsOnClose);
2360: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 72 79 3a  ....      retry:
2370: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
2380: 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20   (_usePool)..   
2390: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23a0: 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69          if (SQLi
23b0: 74 65 42 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e  teBase.ResetConn
23c0: 65 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 5f 73 71  ection(_sql, _sq
23d0: 6c 2c 20 21 64 69 73 70 6f 73 69 6e 67 29 20 26  l, !disposing) &
23e0: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
23f0: 20 20 20 20 20 55 6e 68 6f 6f 6b 4e 61 74 69 76       UnhookNativ
2400: 65 43 61 6c 6c 62 61 63 6b 73 28 74 72 75 65 2c  eCallbacks(true,
2410: 20 21 64 69 73 70 6f 73 69 6e 67 29 29 0d 0a 20   !disposing)).. 
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2440: 20 20 69 66 20 28 75 6e 62 69 6e 64 46 75 6e 63    if (unbindFunc
2450: 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20  tions)..        
2460: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2480: 20 20 20 69 66 20 28 53 51 4c 69 74 65 46 75 6e     if (SQLiteFun
2490: 63 74 69 6f 6e 2e 55 6e 62 69 6e 64 41 6c 6c 46  ction.UnbindAllF
24a0: 75 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 5f  unctions(this, _
24b0: 66 6c 61 67 73 2c 20 66 61 6c 73 65 29 29 0d 0a  flags, false))..
24c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45        {..#if !NE
24e0: 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
24f0: 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
2500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2510: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2520: 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70  e.WriteLine(Help
2530: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
2540: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
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 43 75 6c 74 75 72 65 49 6e         CultureIn
2570: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
2580: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a0: 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f    "UnbindFunctio
25b0: 6e 73 20 28 50 6f 6f 6c 29 20 53 75 63 63 65 73  ns (Pool) Succes
25c0: 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  s: {0}",..      
25d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e0: 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f          HandleTo
25f0: 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e  String()));..#en
2600: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
2610: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2630: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
2640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2650: 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  {..#if !NET_COMP
2660: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
2670: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
2680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2690: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
26a0: 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68  eLine(HelperMeth
26b0: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
26c0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
26f0: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2710: 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 62              "Unb
2720: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 28 50 6f  indFunctions (Po
2730: 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b 30 7d  ol) Failure: {0}
2740: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2760: 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
2770: 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2790: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
27a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23            }....#
27b0: 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  if INTEROP_VIRTU
27c0: 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20 20  AL_TABLE..      
27d0: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
27e0: 6f 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23  oseModules();..#
27f0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
2800: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
2810: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
2820: 41 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f  Add(_fileName, _
2830: 73 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f  sql, _poolVersio
2840: 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
2850: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
2860: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e  onnection.OnChan
2870: 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f  ged(null, new Co
2880: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
2890: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
28a0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
28b0: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
28c0: 79 70 65 2e 43 6c 6f 73 65 64 54 6f 50 6f 6f 6c  ype.ClosedToPool
28d0: 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20  , null, null,.. 
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f0: 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c       null, null,
2900: 20 5f 73 71 6c 2c 20 5f 66 69 6c 65 4e 61 6d 65   _sql, _fileName
2910: 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
2920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2930: 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53          typeof(S
2940: 51 4c 69 74 65 33 29 2c 20 21 64 69 73 70 6f 73  QLite3), !dispos
2950: 69 6e 67 2c 20 5f 66 69 6c 65 4e 61 6d 65 2c 20  ing, _fileName, 
2960: 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29 29  _poolVersion }))
2970: 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  ;....#if !NET_CO
2980: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2990: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
29a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b0: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
29c0: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
29d0: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f0: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
2a00: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a20: 20 20 20 20 20 20 22 43 6c 6f 73 65 20 28 50 6f        "Close (Po
2a30: 6f 6c 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d  ol) Success: {0}
2a40: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2a50: 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
2a60: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
2a70: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
2a80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2a90: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
2aa0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
2ab0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
2ac0: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
2ad0: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
2ae0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2af0: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
2b00: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
2b10: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2b20: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
2b30: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
2b40: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
2b60: 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c  lose (Pool) Fail
2b70: 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ure: {0}",..    
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b90: 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
2ba0: 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ()));..#endif...
2bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bc0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2bd0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2be0: 3a 20 54 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  : This connectio
2bf0: 6e 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 64 65  n cannot be adde
2c00: 64 20 74 6f 20 74 68 65 20 70 6f 6f 6c 3b 0d 0a  d to the pool;..
2c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c20: 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 72 65    //       there
2c30: 66 6f 72 65 2c 20 6a 75 73 74 20 75 73 65 20 74  fore, just use t
2c40: 68 65 20 6e 6f 72 6d 61 6c 20 64 69 73 70 6f 73  he normal dispos
2c50: 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  al..            
2c60: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70        //       p
2c70: 72 6f 63 65 64 75 72 65 20 6f 6e 20 69 74 2e 0d  rocedure on it..
2c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c90: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2ca0: 20 20 20 20 20 20 20 20 20 5f 75 73 65 50 6f 6f           _usePoo
2cb0: 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  l = false;..    
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 6f                go
2cd0: 74 6f 20 72 65 74 72 79 3b 0d 0a 20 20 20 20 20  to retry;..     
2ce0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2cf0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2d00: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
2d10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d20: 20 20 20 20 2f 2a 20 49 47 4e 4f 52 45 44 20 2a      /* IGNORED *
2d30: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2d40: 20 55 6e 68 6f 6f 6b 4e 61 74 69 76 65 43 61 6c   UnhookNativeCal
2d50: 6c 62 61 63 6b 73 28 64 69 73 70 6f 73 69 6e 67  lbacks(disposing
2d60: 2c 20 21 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a  , !disposing);..
2d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d80: 69 66 20 28 75 6e 62 69 6e 64 46 75 6e 63 74 69  if (unbindFuncti
2d90: 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ons)..          
2da0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2db0: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c           if (SQL
2dc0: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69  iteFunction.Unbi
2dd0: 6e 64 41 6c 6c 46 75 6e 63 74 69 6f 6e 73 28 74  ndAllFunctions(t
2de0: 68 69 73 2c 20 5f 66 6c 61 67 73 2c 20 66 61 6c  his, _flags, fal
2df0: 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2e00: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
2e10: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2e20: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2e30: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
2e40: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
2e50: 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72  WriteLine(Helper
2e60: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
2e70: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e90: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
2ea0: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
2eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec0: 20 20 20 20 20 20 20 20 22 55 6e 62 69 6e 64 46          "UnbindF
2ed0: 75 6e 63 74 69 6f 6e 73 20 53 75 63 63 65 73 73  unctions Success
2ee0: 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
2ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f00: 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e     HandleToStrin
2f10: 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  g()));..#endif..
2f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2f40: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2f60: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
2f70: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
2f80: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
2f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
2fb0: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
2fc0: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
2ff0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
3000: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
3010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
3020: 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20  UnbindFunctions 
3030: 46 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a  Failure: {0}",..
3040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3050: 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
3060: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
3070: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
3080: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3090: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
30b0: 6c 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  l.Dispose();..  
30c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
30d0: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c       _sql = null
30e0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
30f0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
3100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3150: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20  ////////....#if 
3160: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
3170: 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
3180: 49 4f 4e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  ION..    protect
3190: 65 64 20 73 74 72 69 6e 67 20 48 61 6e 64 6c 65  ed string Handle
31a0: 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20  ToString()..    
31b0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  {..        if (_
31c0: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
31d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31e0: 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20   "<null>";....  
31f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71        return _sq
3200: 6c 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  l.ToString();.. 
3210: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
3220: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3280: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
3290: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
32a0: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75  / Returns the nu
32b0: 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74 68  mber of times th
32c0: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 61 6e  e <see cref="Can
32d0: 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 20 68  cel" /> method h
32e0: 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f  as been..    ///
32f0: 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 2f 2f   called...    //
3300: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3310: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 47 65    private int Ge
3320: 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d 0a  tCancelCount()..
3330: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
3340: 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65  eturn Interlocke
3350: 64 2e 43 6f 6d 70 61 72 65 45 78 63 68 61 6e 67  d.CompareExchang
3360: 65 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75  e(ref _cancelCou
3370: 6e 74 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20  nt, 0, 0);..    
3380: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
3390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
33f0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
3400: 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
3410: 6f 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  od determines wh
3420: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 3c  ether or not a <
3430: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
3440: 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 0d 0a 20  Exception" />.. 
3450: 20 20 20 2f 2f 2f 20 77 69 74 68 20 61 20 72 65     /// with a re
3460: 74 75 72 6e 20 63 6f 64 65 20 6f 66 20 3c 73 65  turn code of <se
3470: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45 72  e cref="SQLiteEr
3480: 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70  rorCode.Interrup
3490: 74 22 20 2f 3e 20 73 68 6f 75 6c 64 0d 0a 20 20  t" /> should..  
34a0: 20 20 2f 2f 2f 20 62 65 20 74 68 72 6f 77 6e 20    /// be thrown 
34b0: 61 66 74 65 72 20 6d 61 6b 69 6e 67 20 61 20 63  after making a c
34c0: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53 51 4c  all into the SQL
34d0: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
34e0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
34f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
3500: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
3510: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20  / Non-zero if a 
3520: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3530: 65 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20 74  eException" /> t
3540: 6f 20 62 65 20 74 68 72 6f 77 6e 2e 20 20 54 68  o be thrown.  Th
3550: 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 2f  is method..    /
3560: 2f 2f 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 65 74  // will only ret
3570: 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20  urn non-zero if 
3580: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43  the <see cref="C
3590: 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64  ancel" /> method
35a0: 20 77 61 73 20 63 61 6c 6c 65 64 0d 0a 20 20 20   was called..   
35b0: 20 2f 2f 2f 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   /// one or more
35c0: 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 61 20   times during a 
35d0: 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53 51  call into the SQ
35e0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
35f0: 79 20 28 65 2e 67 2e 20 77 68 65 6e 0d 0a 20 20  y (e.g. when..  
3600: 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74 65    /// the sqlite
3610: 33 5f 70 72 65 70 61 72 65 2a 28 29 20 6f 72 20  3_prepare*() or 
3620: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 41  sqlite3_step() A
3630: 50 49 73 20 61 72 65 20 75 73 65 64 29 2e 0d 0a  PIs are used)...
3640: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
3650: 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  s>..    private 
3660: 62 6f 6f 6c 20 53 68 6f 75 6c 64 54 68 72 6f 77  bool ShouldThrow
3670: 46 6f 72 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  ForCancel()..   
3680: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
3690: 72 6e 20 47 65 74 43 61 6e 63 65 6c 43 6f 75 6e  rn GetCancelCoun
36a0: 74 28 29 20 3e 20 30 3b 0d 0a 20 20 20 20 7d 0d  t() > 0;..    }.
36b0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
36c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3710: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
3720: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3730: 20 2f 2f 2f 20 52 65 73 65 74 73 20 74 68 65 20   /// Resets the 
3740: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 3c 73 65  value of the <se
3750: 65 20 63 72 65 66 3d 22 5f 63 61 6e 63 65 6c 43  e cref="_cancelC
3760: 6f 75 6e 74 22 20 2f 3e 20 66 69 65 6c 64 2e 0d  ount" /> field..
3770: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3780: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
3790: 20 69 6e 74 20 52 65 73 65 74 43 61 6e 63 65 6c   int ResetCancel
37a0: 43 6f 75 6e 74 28 29 0d 0a 20 20 20 20 7b 0d 0a  Count()..    {..
37b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
37c0: 6e 74 65 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70 61  nterlocked.Compa
37d0: 72 65 45 78 63 68 61 6e 67 65 28 72 65 66 20 5f  reExchange(ref _
37e0: 63 61 6e 63 65 6c 43 6f 75 6e 74 2c 20 30 2c 20  cancelCount, 0, 
37f0: 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a  _cancelCount);..
3800: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
3810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3870: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3880: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d  >..    /// Attem
3890: 70 74 73 20 74 6f 20 69 6e 74 65 72 72 75 70 74  pts to interrupt
38a0: 20 74 68 65 20 71 75 65 72 79 20 63 75 72 72 65   the query curre
38b0: 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 6f  ntly executing o
38c0: 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  n the associated
38d0: 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65  ..    /// native
38e0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
38f0: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
3900: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
3910: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
3920: 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a   void Cancel()..
3930: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 74 72 79      {..      try
3940: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
3950: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
3960: 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ...      }..    
3970: 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54    finally /* NOT
3980: 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28  E: Thread.Abort(
3990: 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f  ) protection. */
39a0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
39b0: 20 20 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49     Interlocked.I
39c0: 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 5f 63 61  ncrement(ref _ca
39d0: 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a 20 20 20  ncelCount);..   
39e0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
39f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3a00: 5f 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29  _interrupt(_sql)
3a10: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
3a20: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
3a30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3a40: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62 69  This function bi
3a50: 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e  nds a user-defin
3a60: 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74  ed function to t
3a70: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  he connection...
3a80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
3a90: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
3aa0: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f  am name="functio
3ab0: 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20  nAttribute">..  
3ac0: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
3ad0: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
3ae0: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20  ionAttribute"/> 
3af0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
3b00: 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20  containing..    
3b10: 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61  /// the metadata
3b20: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
3b30: 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a  n to be bound...
3b40: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
3b50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3b60: 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22   name="function"
3b70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
3b80: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
3b90: 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65  Function"/> obje
3ba0: 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74  ct instance that
3bb0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0d   implements the.
3bc0: 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f  .    /// functio
3bd0: 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a  n to be bound...
3be0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
3bf0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3c00: 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a   name="flags">..
3c10: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67      /// The flag
3c20: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
3c30: 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e  h the parent con
3c40: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d  nection object..
3c50: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
3c60: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
3c70: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
3c80: 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
3c90: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74       SQLiteFunct
3ca0: 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75 6e  ionAttribute fun
3cb0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d  ctionAttribute,.
3cc0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46  .        SQLiteF
3cd0: 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  unction function
3ce0: 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ,..        SQLit
3cf0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
3d00: 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20   flags..        
3d10: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3d20: 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41 74    if (functionAt
3d30: 74 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29  tribute == null)
3d40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
3d50: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
3d60: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66  NullException("f
3d70: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3d80: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
3d90: 66 20 28 66 75 6e 63 74 69 6f 6e 20 3d 3d 20 6e  f (function == n
3da0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3db0: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
3dc0: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
3dd0: 6e 28 22 66 75 6e 63 74 69 6f 6e 22 29 3b 0d 0a  n("function");..
3de0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
3df0: 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e  Function.BindFun
3e00: 63 74 69 6f 6e 28 74 68 69 73 2c 20 66 75 6e 63  ction(this, func
3e10: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 66  tionAttribute, f
3e20: 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29 3b  unction, flags);
3e30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
3e40: 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75  _functions == nu
3e50: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3e60: 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65   _functions = ne
3e70: 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c  w Dictionary<SQL
3e80: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
3e90: 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63  bute, SQLiteFunc
3ea0: 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  tion>();....    
3eb0: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 66      _functions[f
3ec0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3ed0: 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a 20  ] = function;.. 
3ee0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
3ef0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
3f00: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  // This function
3f10: 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65   binds a user-de
3f20: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74  fined function t
3f30: 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  o the connection
3f40: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
3f50: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
3f60: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
3f70: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d  tionAttribute">.
3f80: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  .    /// The <se
3f90: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
3fa0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
3fb0: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
3fc0: 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ce containing.. 
3fd0: 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64     /// the metad
3fe0: 61 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ata for the func
3ff0: 74 69 6f 6e 20 74 6f 20 62 65 20 75 6e 62 6f 75  tion to be unbou
4000: 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  nd...    /// </p
4010: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
4020: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
4030: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
4040: 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   flags associate
4050: 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65 6e  d with the paren
4060: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  t connection obj
4070: 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
4080: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4090: 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d 7a 65 72  <returns>Non-zer
40a0: 6f 20 69 66 20 74 68 65 20 66 75 6e 63 74 69 6f  o if the functio
40b0: 6e 20 77 61 73 20 75 6e 62 6f 75 6e 64 20 61 6e  n was unbound an
40c0: 64 20 72 65 6d 6f 76 65 64 2e 3c 2f 72 65 74 75  d removed.</retu
40d0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
40e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
40f0: 20 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28   UnbindFunction(
4100: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
4110: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
4120: 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  e functionAttrib
4130: 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  ute,..        SQ
4140: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
4150: 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20  ags flags..     
4160: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
4170: 20 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f       if (functio
4180: 6e 41 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75  nAttribute == nu
4190: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
41a0: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
41b0: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
41c0: 28 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  ("functionAttrib
41d0: 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ute");....      
41e0: 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73    if (_functions
41f0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
4200: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
4210: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
4220: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
4230: 75 6e 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20  unction;....    
4240: 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f      if (_functio
4250: 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 66  ns.TryGetValue(f
4260: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
4270: 2c 20 6f 75 74 20 66 75 6e 63 74 69 6f 6e 29 29  , out function))
4280: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
4290: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c           if (SQL
42a0: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69  iteFunction.Unbi
42b0: 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42d0: 20 74 68 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41   this, functionA
42e0: 74 74 72 69 62 75 74 65 2c 20 66 75 6e 63 74 69  ttribute, functi
42f0: 6f 6e 2c 20 66 6c 61 67 73 29 20 26 26 0d 0a 20  on, flags) &&.. 
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
4310: 66 75 6e 63 74 69 6f 6e 73 2e 52 65 6d 6f 76 65  functions.Remove
4320: 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  (functionAttribu
4330: 74 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  te))..          
4340: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4350: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
4360: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
4370: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
4380: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
4390: 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lse;..    }.... 
43a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
43b0: 72 69 64 65 20 73 74 72 69 6e 67 20 56 65 72 73  ride string Vers
43c0: 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ion..    {..    
43d0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
43e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
43f0: 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  QLiteVersion;.. 
4400: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4410: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
4420: 65 72 72 69 64 65 20 69 6e 74 20 56 65 72 73 69  erride int Versi
4430: 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d  onNumber..    {.
4440: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
4450: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
4460: 75 72 6e 20 53 51 4c 69 74 65 56 65 72 73 69 6f  urn SQLiteVersio
4470: 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20  nNumber;..      
4480: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
4490: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
44a0: 73 74 72 69 6e 67 20 44 65 66 69 6e 65 43 6f 6e  string DefineCon
44b0: 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b 0d 0a 20  stants..    {.. 
44c0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
44d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
44e0: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
44f0: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
4500: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a  ringBuilder();..
4510: 20 20 20 20 20 20 20 20 20 20 20 20 49 4c 69 73              ILis
4520: 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73 74 20 3d  t<string> list =
4530: 20 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e   SQLiteDefineCon
4540: 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e 4c 69 73  stants.OptionLis
4550: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
4560: 20 20 69 66 20 28 6c 69 73 74 20 21 3d 20 6e 75    if (list != nu
4570: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4580: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4590: 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72      foreach (str
45a0: 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c  ing element in l
45b0: 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ist)..          
45c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
45e0: 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c  (element == null
45f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4600: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
4610: 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
4620: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4630: 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20  result.Length > 
4640: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
4650: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
4660: 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d  lt.Append(' ');.
4670: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4680: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
4690: 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a  pend(element);..
46a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
46c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
46d0: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
46e0: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20  String();..     
46f0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4700: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
4710: 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  ic string SQLite
4720: 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a  Version..    {..
4730: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
4740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
4750: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
4760: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4770: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76  ods.sqlite3_libv
4780: 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a  ersion(), -1);..
4790: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
47a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
47b0: 74 61 74 69 63 20 69 6e 74 20 53 51 4c 69 74 65  tatic int SQLite
47c0: 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20  VersionNumber.. 
47d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
47e0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
47f0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
4800: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4810: 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f  ite3_libversion_
4820: 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20 20 20 20  number();..     
4830: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
4840: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
4850: 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65 53 6f   string SQLiteSo
4860: 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20  urceId..    {.. 
4870: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
4880: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
4890: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
48a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
48b0: 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75 72 63  ds.sqlite3_sourc
48c0: 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20  eid(), -1);..   
48d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
48e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
48f0: 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  ic string SQLite
4900: 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a  CompileOptions..
4910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
4920: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
4930: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
4940: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
4950: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
4960: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
4970: 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20      int index = 
4980: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
4990: 49 6e 74 50 74 72 20 7a 56 61 6c 75 65 20 3d 20  IntPtr zValue = 
49a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
49b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70  ods.sqlite3_comp
49c0: 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e  ileoption_get(in
49d0: 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20 20  dex++);....     
49e0: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 7a 56         while (zV
49f0: 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  alue != IntPtr.Z
4a00: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
4a10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4a20: 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e       if (result.
4a30: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a50: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27   result.Append('
4a60: 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   ');....        
4a70: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
4a80: 70 70 65 6e 64 28 55 54 46 38 54 6f 53 74 72 69  ppend(UTF8ToStri
4a90: 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29 3b  ng(zValue, -1));
4aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ab0: 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61 66    zValue = Unsaf
4ac0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4ad0: 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
4ae0: 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b  tion_get(index++
4af0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4b00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4b10: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
4b20: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
4b30: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4b40: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4b50: 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72  tic string Inter
4b60: 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b  opVersion..    {
4b70: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
4b80: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53         {..#if !S
4b90: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4bb0: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
4bc0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4bd0: 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 6c 69 62 76  ods.interop_libv
4be0: 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a  ersion(), -1);..
4bf0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
4c00: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4c10: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
4c20: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
4c30: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
4c40: 20 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 53   string InteropS
4c50: 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a  ourceId..    {..
4c60: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
4c70: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c       {..#if !SQL
4c80: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
4c90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4ca0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
4cb0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4cc0: 73 2e 69 6e 74 65 72 6f 70 5f 73 6f 75 72 63 65  s.interop_source
4cd0: 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 23 65 6c 73  id(), -1);..#els
4ce0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
4cf0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e  eturn null;..#en
4d00: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
4d10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4d20: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72  ernal static str
4d30: 69 6e 67 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69  ing InteropCompi
4d40: 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 7b  leOptions..    {
4d50: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
4d60: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53         {..#if !S
4d70: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
4d80: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
4d90: 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74  ngBuilder result
4da0: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
4db0: 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  lder();..       
4dc0: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d       int index =
4dd0: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
4de0: 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65 20 3d   IntPtr zValue =
4df0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4e00: 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d  hods.interop_com
4e10: 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69  pileoption_get(i
4e20: 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20  ndex++);....    
4e30: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 7a          while (z
4e40: 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e  Value != IntPtr.
4e50: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
4e60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4e70: 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
4e80: 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20  .Length > 0)..  
4e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ea0: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
4eb0: 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ' ');....       
4ec0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
4ed0: 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53 74 72  Append(UTF8ToStr
4ee0: 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29  ing(zValue, -1))
4ef0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4f00: 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61     zValue = Unsa
4f10: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4f20: 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69 6c 65 6f  interop_compileo
4f30: 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b  ption_get(index+
4f40: 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  +);..           
4f50: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4f60: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
4f70: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 23 65 6c  ToString();..#el
4f80: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
4f90: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65  return null;..#e
4fa0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
4fb0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
4fc0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
4fd0: 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d  bool AutoCommit.
4fe0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
4ff0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
5000: 20 20 20 20 72 65 74 75 72 6e 20 49 73 41 75 74      return IsAut
5010: 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f 73  ocommit(_sql, _s
5020: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ql);..      }.. 
5030: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
5040: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
5050: 6f 6c 20 49 73 52 65 61 64 4f 6e 6c 79 28 0d 0a  ol IsReadOnly(..
5060: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
5070: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ame..        )..
5080: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
5090: 6e 74 50 74 72 20 70 44 62 4e 61 6d 65 20 3d 20  ntPtr pDbName = 
50a0: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
50b0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
50c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
50d0: 20 20 20 20 69 66 20 28 6e 61 6d 65 20 21 3d 20      if (name != 
50e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
50f0: 20 20 20 20 20 20 20 70 44 62 4e 61 6d 65 20 3d         pDbName =
5100: 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
5110: 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
5120: 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ng(name);....   
5130: 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73           int res
5140: 75 6c 74 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ult = UnsafeNati
5150: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5160: 33 5f 64 62 5f 72 65 61 64 6f 6e 6c 79 28 0d 0a  3_db_readonly(..
5170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5180: 5f 73 71 6c 2c 20 70 44 62 4e 61 6d 65 29 3b 0d  _sql, pDbName);.
5190: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
51a0: 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 2d 31 29  f (result == -1)
51b0: 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 6f 74   /* database not
51c0: 20 66 6f 75 6e 64 20 2a 2f 0d 0a 20 20 20 20 20   found */..     
51d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
51e0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
51f0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
5200: 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ion(HelperMethod
5210: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
5220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5230: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
5240: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
5250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5260: 20 20 20 20 20 20 22 64 61 74 61 62 61 73 65 20        "database 
5270: 5c 22 7b 30 7d 5c 22 20 6e 6f 74 20 66 6f 75 6e  \"{0}\" not foun
5280: 64 22 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20  d", name));..   
5290: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
52a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
52b0: 20 72 65 73 75 6c 74 20 3d 3d 20 30 20 3f 20 66   result == 0 ? f
52c0: 61 6c 73 65 20 3a 20 74 72 75 65 3b 0d 0a 20 20  alse : true;..  
52d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
52e0: 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
52f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5300: 20 69 66 20 28 70 44 62 4e 61 6d 65 20 21 3d 20   if (pDbName != 
5310: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
5320: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5330: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
5340: 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
5350: 44 62 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  DbName);..      
5360: 20 20 20 20 20 20 20 20 20 20 70 44 62 4e 61 6d            pDbNam
5370: 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  e = IntPtr.Zero;
5380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5390: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
53a0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
53b0: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
53c0: 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 0d  LastInsertRowId.
53d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
53e0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  t..      {..#if 
53f0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
5400: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
5410: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
5420: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5430: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
5440: 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c 29 3b 0d  rt_rowid(_sql);.
5450: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
5460: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
5470: 20 6c 6f 6e 67 20 72 6f 77 49 64 20 3d 20 30 3b   long rowId = 0;
5480: 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
5490: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
54a0: 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
54b0: 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28  t_rowid_interop(
54c0: 5f 73 71 6c 2c 20 72 65 66 20 72 6f 77 49 64 29  _sql, ref rowId)
54d0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
54e0: 6e 20 72 6f 77 49 64 3b 0d 0a 23 65 6c 73 65 0d  n rowId;..#else.
54f0: 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e  .        throw n
5500: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
5510: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
5520: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a  endif..      }..
5530: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
5540: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
5550: 6e 74 20 43 68 61 6e 67 65 73 0d 0a 20 20 20 20  nt Changes..    
5560: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
5570: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
5580: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
5590: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
55a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
55b0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 5f  sqlite3_changes_
55c0: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 29 3b 0d 0a  interop(_sql);..
55d0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 72  #else..        r
55e0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
55f0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5600: 33 5f 63 68 61 6e 67 65 73 28 5f 73 71 6c 29 3b  3_changes(_sql);
5610: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
5620: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
5630: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5640: 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 55 73 65  e long MemoryUse
5650: 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  d..    {..      
5660: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
5670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
5680: 74 75 72 6e 20 53 74 61 74 69 63 4d 65 6d 6f 72  turn StaticMemor
5690: 79 55 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  yUsed;..        
56a0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
56b0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
56c0: 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65 6d 6f 72  long StaticMemor
56d0: 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  yUsed..    {..  
56e0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
56f0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
5700: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
5710: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
5720: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
5730: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5740: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64  ite3_memory_used
5750: 28 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ();..#elif !SQLI
5760: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
5770: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79           long by
5780: 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  tes = 0;..      
5790: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
57a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
57b0: 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 5f 69 6e  3_memory_used_in
57c0: 74 65 72 6f 70 28 72 65 66 20 62 79 74 65 73 29  terop(ref bytes)
57d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
57e0: 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65  eturn bytes;..#e
57f0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
5800: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
5810: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
5820: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
5830: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
5840: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
5850: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65  override long Me
5860: 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20  moryHighwater.. 
5870: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
5880: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
5890: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
58a0: 20 53 74 61 74 69 63 4d 65 6d 6f 72 79 48 69 67   StaticMemoryHig
58b0: 68 77 61 74 65 72 3b 0d 0a 20 20 20 20 20 20 20  hwater;..       
58c0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
58d0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
58e0: 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65 6d 6f   long StaticMemo
58f0: 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20 20 20  ryHighwater..   
5900: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
5910: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
5920: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
5930: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
5940: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
5950: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5960: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
5970: 79 5f 68 69 67 68 77 61 74 65 72 28 30 29 3b 0d  y_highwater(0);.
5980: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
5990: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
59a0: 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65 73 20       long bytes 
59b0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
59c0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
59d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65  thods.sqlite3_me
59e0: 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 5f 69  mory_highwater_i
59f0: 6e 74 65 72 6f 70 28 30 2c 20 72 65 66 20 62 79  nterop(0, ref by
5a00: 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tes);..         
5a10: 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b     return bytes;
5a20: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
5a30: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
5a40: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
5a50: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
5a60: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  f..        }..  
5a70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
5a80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5a90: 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  / Returns non-ze
5aa0: 72 6f 20 69 66 20 74 68 65 20 75 6e 64 65 72 6c  ro if the underl
5ab0: 79 69 6e 67 20 6e 61 74 69 76 65 20 63 6f 6e 6e  ying native conn
5ac0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73  ection handle is
5ad0: 20 6f 77 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f 20   owned..    /// 
5ae0: 62 79 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65  by this instance
5af0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
5b00: 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72  mary>..    inter
5b10: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
5b20: 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20  l OwnHandle..   
5b30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
5b40: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
5b50: 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
5b60: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
5b70: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
5b80: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
5b90: 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63 74  tion("no connect
5ba0: 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76 61 69 6c  ion handle avail
5bb0: 61 62 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  able");....     
5bc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73         return _s
5bd0: 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 3b 0d 0a 20  ql.OwnHandle;.. 
5be0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
5bf0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
5c00: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
5c10: 74 75 72 6e 73 20 74 68 65 20 6c 6f 67 69 63 61  turns the logica
5c20: 6c 20 6c 69 73 74 20 6f 66 20 66 75 6e 63 74 69  l list of functi
5c30: 6f 6e 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ons associated w
5c40: 69 74 68 20 74 68 69 73 20 63 6f 6e 6e 65 63 74  ith this connect
5c50: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
5c60: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
5c70: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5c80: 49 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69  IDictionary<SQLi
5c90: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
5ca0: 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74  ute, SQLiteFunct
5cb0: 69 6f 6e 3e 20 46 75 6e 63 74 69 6f 6e 73 0d 0a  ion> Functions..
5cc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
5cd0: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 66 75 6e  et { return _fun
5ce0: 63 74 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 7d  ctions; }..    }
5cf0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5d00: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
5d10: 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4d 65 6d  ErrorCode SetMem
5d20: 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c 20 76  oryStatus(bool v
5d30: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
5d40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61        return Sta
5d50: 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61 74  ticSetMemoryStat
5d60: 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  us(value);..    
5d70: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
5d80: 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 45  l static SQLiteE
5d90: 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69 63 53  rrorCode StaticS
5da0: 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62  etMemoryStatus(b
5db0: 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ool value)..    
5dc0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
5dd0: 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
5de0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5df0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66  ods.sqlite3_conf
5e00: 69 67 5f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20  ig_int(..       
5e10: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
5e20: 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  gOpsEnum.SQLITE_
5e30: 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53  CONFIG_MEMSTATUS
5e40: 2c 20 76 61 6c 75 65 20 3f 20 31 20 3a 20 30 29  , value ? 1 : 0)
5e50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
5e60: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
5e70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5e80: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74  ry>..    /// Att
5e90: 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 61 73  empts to free as
5ea0: 20 6d 75 63 68 20 68 65 61 70 20 6d 65 6d 6f 72   much heap memor
5eb0: 79 20 61 73 20 70 6f 73 73 69 62 6c 65 20 66 6f  y as possible fo
5ec0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  r the database c
5ed0: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
5ee0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5ef0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
5f00: 3e 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69  >A standard SQLi
5f10: 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 28  te return code (
5f20: 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75  i.e. zero for su
5f30: 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65  ccess and non-ze
5f40: 72 6f 20 66 6f 72 20 66 61 69 6c 75 72 65 29 2e  ro for failure).
5f50: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
5f60: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5f70: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
5f80: 65 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28  e ReleaseMemory(
5f90: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5fa0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
5fb0: 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
5fc0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5fd0: 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65  e3_db_release_me
5fe0: 6d 6f 72 79 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  mory(_sql);..   
5ff0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d       return rc;.
6000: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
6010: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6020: 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f   /// Attempts to
6030: 20 66 72 65 65 20 4e 20 62 79 74 65 73 20 6f 66   free N bytes of
6040: 20 68 65 61 70 20 6d 65 6d 6f 72 79 20 62 79 20   heap memory by 
6050: 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 6e 6f 6e  deallocating non
6060: 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f 72  -essential memor
6070: 79 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63  y..    /// alloc
6080: 61 74 69 6f 6e 73 20 68 65 6c 64 20 62 79 20 74  ations held by t
6090: 68 65 20 64 61 74 61 62 61 73 65 20 6c 69 62 72  he database libr
60a0: 61 72 79 2e 20 4d 65 6d 6f 72 79 20 75 73 65 64  ary. Memory used
60b0: 20 74 6f 20 63 61 63 68 65 20 64 61 74 61 62 61   to cache databa
60c0: 73 65 20 70 61 67 65 73 0d 0a 20 20 20 20 2f 2f  se pages..    //
60d0: 2f 20 74 6f 20 69 6d 70 72 6f 76 65 20 70 65 72  / to improve per
60e0: 66 6f 72 6d 61 6e 63 65 20 69 73 20 61 6e 20 65  formance is an e
60f0: 78 61 6d 70 6c 65 20 6f 66 20 6e 6f 6e 2d 65 73  xample of non-es
6100: 73 65 6e 74 69 61 6c 20 6d 65 6d 6f 72 79 2e 20  sential memory. 
6110: 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70   This is a no-op
6120: 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e  ..    /// return
6130: 69 6e 67 20 7a 65 72 6f 20 69 66 20 74 68 65 20  ing zero if the 
6140: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
6150: 61 72 79 20 77 61 73 20 6e 6f 74 20 63 6f 6d 70  ary was not comp
6160: 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 63 6f  iled with the co
6170: 6d 70 69 6c 65 2d 74 69 6d 65 0d 0a 20 20 20 20  mpile-time..    
6180: 2f 2f 2f 20 6f 70 74 69 6f 6e 20 53 51 4c 49 54  /// option SQLIT
6190: 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  E_ENABLE_MEMORY_
61a0: 4d 41 4e 41 47 45 4d 45 4e 54 2e 20 20 4f 70 74  MANAGEMENT.  Opt
61b0: 69 6f 6e 61 6c 6c 79 2c 20 61 74 74 65 6d 70 74  ionally, attempt
61c0: 73 20 74 6f 20 72 65 73 65 74 20 61 6e 64 2f 6f  s to reset and/o
61d0: 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6d 70 61  r..    /// compa
61e0: 63 74 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74  ct the Win32 nat
61f0: 69 76 65 20 68 65 61 70 2c 20 69 66 20 61 70 70  ive heap, if app
6200: 6c 69 63 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  licable...    //
6210: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6220: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
6230: 65 3d 22 6e 42 79 74 65 73 22 3e 0d 0a 20 20 20  e="nBytes">..   
6240: 20 2f 2f 2f 20 54 68 65 20 72 65 71 75 65 73 74   /// The request
6250: 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  ed number of byt
6260: 65 73 20 74 6f 20 66 72 65 65 2e 0d 0a 20 20 20  es to free...   
6270: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
6280: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6290: 6d 65 3d 22 72 65 73 65 74 22 3e 0d 0a 20 20 20  me="reset">..   
62a0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f   /// Non-zero to
62b0: 20 61 74 74 65 6d 70 74 20 61 20 68 65 61 70 20   attempt a heap 
62c0: 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  reset...    /// 
62d0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
62e0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
62f0: 6f 6d 70 61 63 74 22 3e 0d 0a 20 20 20 20 2f 2f  ompact">..    //
6300: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 61 74  / Non-zero to at
6310: 74 65 6d 70 74 20 68 65 61 70 20 63 6f 6d 70 61  tempt heap compa
6320: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
6330: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
6340: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
6350: 46 72 65 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Free">..    /// 
6360: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  The number of by
6370: 74 65 73 20 61 63 74 75 61 6c 6c 79 20 66 72 65  tes actually fre
6380: 65 64 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  ed.  This value 
6390: 6d 61 79 20 62 65 20 7a 65 72 6f 2e 0d 0a 20 20  may be zero...  
63a0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
63b0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
63c0: 61 6d 65 3d 22 72 65 73 65 74 4f 6b 22 3e 0d 0a  ame="resetOk">..
63d0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c      /// This val
63e0: 75 65 20 77 69 6c 6c 20 62 65 20 6e 6f 6e 2d 7a  ue will be non-z
63f0: 65 72 6f 20 69 66 20 74 68 65 20 68 65 61 70 20  ero if the heap 
6400: 72 65 73 65 74 20 77 61 73 20 73 75 63 63 65 73  reset was succes
6410: 73 66 75 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sful...    /// <
6420: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
6430: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 4c   <param name="nL
6440: 61 72 67 65 73 74 22 3e 0d 0a 20 20 20 20 2f 2f  argest">..    //
6450: 2f 20 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  / The size of th
6460: 65 20 6c 61 72 67 65 73 74 20 63 6f 6d 6d 69 74  e largest commit
6470: 74 65 64 20 66 72 65 65 20 62 6c 6f 63 6b 20 69  ted free block i
6480: 6e 20 74 68 65 20 68 65 61 70 2c 20 69 6e 20 62  n the heap, in b
6490: 79 74 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ytes...    /// T
64a0: 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  his value will b
64b0: 65 20 7a 65 72 6f 20 75 6e 6c 65 73 73 20 68 65  e zero unless he
64c0: 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 20 69 73  ap compaction is
64d0: 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20 20 20 2f   enabled...    /
64e0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
64f0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
6500: 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
6510: 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
6520: 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72 6f   code (i.e. zero
6530: 20 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e 64   for success and
6540: 20 6e 6f 6e 2d 7a 65 72 6f 0d 0a 20 20 20 20 2f   non-zero..    /
6550: 2f 2f 20 66 6f 72 20 66 61 69 6c 75 72 65 29 2e  // for failure).
6560: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
6570: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
6580: 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65  al static SQLite
6590: 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69 63  ErrorCode Static
65a0: 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28 0d 0a  ReleaseMemory(..
65b0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 42 79 74          int nByt
65c0: 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  es,..        boo
65d0: 6c 20 72 65 73 65 74 2c 0d 0a 20 20 20 20 20 20  l reset,..      
65e0: 20 20 62 6f 6f 6c 20 63 6f 6d 70 61 63 74 2c 0d    bool compact,.
65f0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 69 6e 74  .        ref int
6600: 20 6e 46 72 65 65 2c 0d 0a 20 20 20 20 20 20 20   nFree,..       
6610: 20 72 65 66 20 62 6f 6f 6c 20 72 65 73 65 74 4f   ref bool resetO
6620: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  k,..        ref 
6630: 75 69 6e 74 20 6e 4c 61 72 67 65 73 74 0d 0a 20  uint nLargest.. 
6640: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
6650: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
6660: 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 53 51  rrorCode rc = SQ
6670: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
6680: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ;....        int
6690: 20 6e 46 72 65 65 4c 6f 63 61 6c 20 3d 20 55 6e   nFreeLocal = Un
66a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
66b0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  s.sqlite3_releas
66c0: 65 5f 6d 65 6d 6f 72 79 28 6e 42 79 74 65 73 29  e_memory(nBytes)
66d0: 3b 0d 0a 20 20 20 20 20 20 20 20 75 69 6e 74 20  ;..        uint 
66e0: 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 20 3d 20  nLargestLocal = 
66f0: 30 3b 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  0;..        bool
6700: 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 20 3d 20   resetOkLocal = 
6710: 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 44  false;....#if !D
6720: 45 42 55 47 20 26 26 20 57 49 4e 44 4f 57 53 20  EBUG && WINDOWS 
6730: 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 75 6c 64 20  // NOTE: Should 
6740: 62 65 20 22 57 49 4e 33 32 48 45 41 50 20 26 26  be "WIN32HEAP &&
6750: 20 21 4d 45 4d 44 45 42 55 47 20 26 26 20 57 49   !MEMDEBUG && WI
6760: 4e 44 4f 57 53 22 0d 0a 20 20 20 20 20 20 20 20  NDOWS"..        
6770: 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
6780: 73 2e 49 73 57 69 6e 64 6f 77 73 28 29 29 0d 0a  s.IsWindows())..
6790: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
67a0: 20 20 20 20 20 20 20 69 66 20 28 28 72 63 20 3d         if ((rc =
67b0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
67c0: 65 2e 4f 6b 29 20 26 26 20 72 65 73 65 74 29 0d  e.Ok) && reset).
67d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
67e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67f0: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
6800: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6810: 5f 77 69 6e 33 32 5f 72 65 73 65 74 5f 68 65 61  _win32_reset_hea
6820: 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p();....        
6830: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
6840: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6850: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
6860: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 65 74             reset
6870: 4f 6b 4c 6f 63 61 6c 20 3d 20 74 72 75 65 3b 0d  OkLocal = true;.
6880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
68a0: 20 28 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45   ((rc == SQLiteE
68b0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20  rrorCode.Ok) && 
68c0: 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  compact)..      
68d0: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55            rc = U
68e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
68f0: 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  ds.sqlite3_win32
6900: 5f 63 6f 6d 70 61 63 74 5f 68 65 61 70 28 72 65  _compact_heap(re
6910: 66 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 29  f nLargestLocal)
6920: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
6930: 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64        else..#end
6940: 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  if..        if (
6950: 72 65 73 65 74 20 7c 7c 20 63 6f 6d 70 61 63 74  reset || compact
6960: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6970: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
6980: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e  QLiteErrorCode.N
6990: 6f 74 46 6f 75 6e 64 3b 0d 0a 20 20 20 20 20 20  otFound;..      
69a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6e    }....        n
69b0: 46 72 65 65 20 3d 20 6e 46 72 65 65 4c 6f 63 61  Free = nFreeLoca
69c0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 6e 4c 61 72  l;..        nLar
69d0: 67 65 73 74 20 3d 20 6e 4c 61 72 67 65 73 74 4c  gest = nLargestL
69e0: 6f 63 61 6c 3b 0d 0a 20 20 20 20 20 20 20 20 72  ocal;..        r
69f0: 65 73 65 74 4f 6b 20 3d 20 72 65 73 65 74 4f 6b  esetOk = resetOk
6a00: 4c 6f 63 61 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20  Local;....      
6a10: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
6a20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
6a30: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6a40: 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53  / Shutdown the S
6a50: 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20  QLite engine so 
6a60: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
6a70: 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64 69  estarted with di
6a80: 66 66 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f  fferent..    ///
6a90: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
6aa0: 70 74 69 6f 6e 73 2e 20 20 57 65 20 64 65 70 65  ptions.  We depe
6ab0: 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69  nd on auto initi
6ac0: 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63  alization to rec
6ad0: 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  over...    /// <
6ae0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
6af0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
6b00: 72 6e 73 20 61 20 73 74 61 6e 64 61 72 64 20 53  rns a standard S
6b10: 51 4c 69 74 65 20 72 65 73 75 6c 74 20 63 6f 64  QLite result cod
6b20: 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  e.</returns>..  
6b30: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6b40: 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
6b50: 6f 64 65 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a  ode Shutdown()..
6b60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
6b70: 65 74 75 72 6e 20 53 74 61 74 69 63 53 68 75 74  eturn StaticShut
6b80: 64 6f 77 6e 28 66 61 6c 73 65 29 3b 0d 0a 20 20  down(false);..  
6b90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
6ba0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6bb0: 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53  / Shutdown the S
6bc0: 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20  QLite engine so 
6bd0: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
6be0: 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64 69  estarted with di
6bf0: 66 66 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f  fferent..    ///
6c00: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
6c10: 70 74 69 6f 6e 73 2e 20 20 57 65 20 64 65 70 65  ptions.  We depe
6c20: 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69  nd on auto initi
6c30: 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63  alization to rec
6c40: 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  over...    /// <
6c50: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
6c60: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
6c70: 64 69 72 65 63 74 6f 72 69 65 73 22 3e 0d 0a 20  directories">.. 
6c80: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
6c90: 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 61 74  to reset the dat
6ca0: 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72  abase and tempor
6cb0: 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 20  ary directories 
6cc0: 74 6f 20 74 68 65 69 72 0d 0a 20 20 20 20 2f 2f  to their..    //
6cd0: 2f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73  / default values
6ce0: 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62  , which should b
6cf0: 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e  e null for both.
6d00: 20 20 54 68 69 73 20 70 61 72 61 6d 65 74 65 72    This parameter
6d10: 20 68 61 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f   has no..    ///
6d20: 20 65 66 66 65 63 74 20 6f 6e 20 6e 6f 6e 2d 57   effect on non-W
6d30: 69 6e 64 6f 77 73 20 6f 70 65 72 61 74 69 6e 67  indows operating
6d40: 20 73 79 73 74 65 6d 73 2e 0d 0a 20 20 20 20 2f   systems...    /
6d50: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
6d60: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
6d70: 74 75 72 6e 73 20 61 20 73 74 61 6e 64 61 72 64  turns a standard
6d80: 20 53 51 4c 69 74 65 20 72 65 73 75 6c 74 20 63   SQLite result c
6d90: 6f 64 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ode.</returns>..
6da0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
6db0: 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  tic SQLiteErrorC
6dc0: 6f 64 65 20 53 74 61 74 69 63 53 68 75 74 64 6f  ode StaticShutdo
6dd0: 77 6e 28 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  wn(..        boo
6de0: 6c 20 64 69 72 65 63 74 6f 72 69 65 73 0d 0a 20  l directories.. 
6df0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
6e00: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
6e10: 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 53 51  rrorCode rc = SQ
6e20: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
6e30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
6e40: 28 64 69 72 65 63 74 6f 72 69 65 73 29 0d 0a 20  (directories).. 
6e50: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49         {..#if WI
6e60: 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20  NDOWS..         
6e70: 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74     if (HelperMet
6e80: 68 6f 64 73 2e 49 73 57 69 6e 64 6f 77 73 28 29  hods.IsWindows()
6e90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
6ea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6eb0: 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69    if (rc == SQLi
6ec0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
6ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ee0: 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65       rc = Unsafe
6ef0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6f00: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
6f10: 64 69 72 65 63 74 6f 72 79 28 31 2c 20 6e 75 6c  directory(1, nul
6f20: 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
6f30: 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d         if (rc ==
6f40: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6f50: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
6f60: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55            rc = U
6f70: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6f80: 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  ds.sqlite3_win32
6f90: 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 32  _set_directory(2
6fa0: 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
6fb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6fc0: 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69       else..#endi
6fd0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  f..            {
6fe0: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
6ff0: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
7000: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
7010: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
7020: 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20  .WriteLine(..   
7030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7040: 20 22 53 68 75 74 64 6f 77 6e 3a 20 43 61 6e 6e   "Shutdown: Cann
7050: 6f 74 20 72 65 73 65 74 20 64 69 72 65 63 74 6f  ot reset directo
7060: 72 69 65 73 20 6f 6e 20 74 68 69 73 20 70 6c 61  ries on this pla
7070: 74 66 6f 72 6d 2e 22 29 3b 0d 0a 23 65 6e 64 69  tform.");..#endi
7080: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  f..            }
7090: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
70a0: 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d         if (rc ==
70b0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
70c0: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
70d0: 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74    rc = UnsafeNat
70e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
70f0: 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 3b 0d 0a  e3_shutdown();..
7100: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
7110: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
7120: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7130: 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
7140: 69 6e 65 73 20 69 66 20 74 68 65 20 61 73 73 6f  ines if the asso
7150: 63 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f  ciated native co
7160: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
7170: 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f  is open...    //
7180: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
7190: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
71a0: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
71b0: 6f 20 69 66 20 74 68 65 20 61 73 73 6f 63 69 61  o if the associa
71c0: 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65  ted native conne
71d0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20  ction handle is 
71e0: 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  open...    /// <
71f0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
7200: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
7210: 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a   bool IsOpen()..
7220: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
7230: 65 74 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e  eturn (_sql != n
7240: 75 6c 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49 73  ull) && !_sql.Is
7250: 49 6e 76 61 6c 69 64 20 26 26 20 21 5f 73 71 6c  Invalid && !_sql
7260: 2e 49 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20  .IsClosed;..    
7270: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
7280: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
7290: 52 65 74 75 72 6e 73 20 74 68 65 20 66 75 6c 6c  Returns the full
72a0: 79 20 71 75 61 6c 69 66 69 65 64 20 70 61 74 68  y qualified path
72b0: 20 61 6e 64 20 66 69 6c 65 20 6e 61 6d 65 20 66   and file name f
72c0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  or the currently
72d0: 20 6f 70 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64   open..    /// d
72e0: 61 74 61 62 61 73 65 2c 20 69 66 20 61 6e 79 2e  atabase, if any.
72f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
7300: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
7310: 61 72 61 6d 20 6e 61 6d 65 3d 22 64 62 4e 61 6d  aram name="dbNam
7320: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
7330: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 61 74 74   name of the att
7340: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 74  ached database t
7350: 6f 20 71 75 65 72 79 2e 0d 0a 20 20 20 20 2f 2f  o query...    //
7360: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
7370: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
7380: 20 20 20 2f 2f 2f 20 54 68 65 20 66 75 6c 6c 79     /// The fully
7390: 20 71 75 61 6c 69 66 69 65 64 20 70 61 74 68 20   qualified path 
73a0: 61 6e 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f  and file name fo
73b0: 72 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  r the currently 
73c0: 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2c 0d 0a  open database,..
73d0: 20 20 20 20 2f 2f 2f 20 69 66 20 61 6e 79 2e 0d      /// if any..
73e0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
73f0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
7400: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
7410: 67 20 47 65 74 46 69 6c 65 4e 61 6d 65 28 73 74  g GetFileName(st
7420: 72 69 6e 67 20 64 62 4e 61 6d 65 29 0d 0a 20 20  ring dbName)..  
7430: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
7440: 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
7450: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7460: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
7470: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
7480: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
7490: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
74a0: 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61 6d 65 5f  te3_db_filename_
74b0: 62 79 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20  bytes(..        
74c0: 20 20 20 20 5f 73 71 6c 2c 20 54 6f 55 54 46 38      _sql, ToUTF8
74d0: 28 64 62 4e 61 6d 65 29 29 2c 20 2d 31 29 3b 0d  (dbName)), -1);.
74e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
74f0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7500: 76 6f 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67  void Open(string
7510: 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 73 74   strFilename, st
7520: 72 69 6e 67 20 76 66 73 4e 61 6d 65 2c 20 53 51  ring vfsName, SQ
7530: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7540: 61 67 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  ags connectionFl
7550: 61 67 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46  ags, SQLiteOpenF
7560: 6c 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61  lagsEnum openFla
7570: 67 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53  gs, int maxPoolS
7580: 69 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f  ize, bool usePoo
7590: 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  l)..    {..     
75a0: 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f   //..      // NO
75b0: 54 45 3a 20 49 66 20 74 68 65 20 64 61 74 61 62  TE: If the datab
75c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
75d0: 73 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  s currently open
75e0: 2c 20 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20  , attempt to..  
75f0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6c 6f      //       clo
7600: 73 65 20 69 74 20 6e 6f 77 2e 20 20 54 68 69 73  se it now.  This
7610: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 62 65   must be done be
7620: 63 61 75 73 65 20 74 68 65 20 66 69 6c 65 20 6e  cause the file n
7630: 61 6d 65 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f  ame or..      //
7640: 20 20 20 20 20 20 20 6f 74 68 65 72 20 70 61 72         other par
7650: 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79  ameters that may
7660: 20 69 6d 70 61 63 74 20 74 68 65 20 75 6e 64 65   impact the unde
7670: 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 0d  rlying database.
7680: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
7690: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20 68  connection may h
76a0: 61 76 65 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20  ave changed...  
76b0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66      //..      if
76c0: 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20   (_sql != null) 
76d0: 43 6c 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 0d  Close(false);...
76e0: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
76f0: 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
7700: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20   connection was 
7710: 6e 6f 74 20 63 6c 6f 73 65 64 20 73 75 63 63 65  not closed succe
7720: 73 73 66 75 6c 6c 79 2c 20 74 68 72 6f 77 20 61  ssfully, throw a
7730: 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  n..      //     
7740: 20 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 77 2e    exception now.
7750: 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
7760: 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75    if (_sql != nu
7770: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 74  ll)..          t
7780: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7790: 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63  xception("connec
77a0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 73  tion handle is s
77b0: 74 69 6c 6c 20 61 63 74 69 76 65 22 29 3b 0d 0a  till active");..
77c0: 0d 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c  ..      _usePool
77d0: 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20   = usePool;..   
77e0: 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73     _fileName = s
77f0: 74 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a 20 20 20  trFilename;..   
7800: 20 20 20 5f 66 6c 61 67 73 20 3d 20 63 6f 6e 6e     _flags = conn
7810: 65 63 74 69 6f 6e 46 6c 61 67 73 3b 0d 0a 0d 0a  ectionFlags;....
7820: 20 20 20 20 20 20 69 66 20 28 75 73 65 50 6f 6f        if (usePoo
7830: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
7840: 20 20 20 20 20 5f 73 71 6c 20 3d 20 53 51 4c 69       _sql = SQLi
7850: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c  teConnectionPool
7860: 2e 52 65 6d 6f 76 65 28 73 74 72 46 69 6c 65 6e  .Remove(strFilen
7870: 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65  ame, maxPoolSize
7880: 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56 65 72 73 69  , out _poolVersi
7890: 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
78a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
78b0: 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
78c0: 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
78d0: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
78e0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
78f0: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65  nectionEventType
7900: 2e 4f 70 65 6e 65 64 46 72 6f 6d 50 6f 6f 6c 2c  .OpenedFromPool,
7910: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20   null, null,..  
7920: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
7930: 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74 72 46  null, _sql, strF
7940: 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a  ilename, new obj
7950: 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ect[] {..       
7960: 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
7970: 74 65 33 29 2c 20 73 74 72 46 69 6c 65 6e 61 6d  te3), strFilenam
7980: 65 2c 20 76 66 73 4e 61 6d 65 2c 20 63 6f 6e 6e  e, vfsName, conn
7990: 65 63 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a 20 20  ectionFlags,..  
79a0: 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e 46 6c            openFl
79b0: 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65  ags, maxPoolSize
79c0: 2c 20 75 73 65 50 6f 6f 6c 2c 20 5f 70 6f 6f 6c  , usePool, _pool
79d0: 56 65 72 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a  Version }));....
79e0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
79f0: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
7a00: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
7a10: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
7a20: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
7a30: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
7a40: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
7a50: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
7a60: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
7a70: 20 20 20 22 4f 70 65 6e 20 28 50 6f 6f 6c 29 3a     "Open (Pool):
7a80: 20 7b 30 7d 22 2c 20 48 61 6e 64 6c 65 54 6f 53   {0}", HandleToS
7a90: 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64  tring()));..#end
7aa0: 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  if..      }.... 
7ab0: 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d       if (_sql ==
7ac0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d   null)..      {.
7ad0: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
7ae0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7af0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
7b00: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
7b10: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20          finally 
7b20: 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
7b30: 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
7b40: 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  on. */..        
7b50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 49 6e 74  {..          Int
7b60: 50 74 72 20 64 62 20 3d 20 49 6e 74 50 74 72 2e  Ptr db = IntPtr.
7b70: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
7b80: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7b90: 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49   n;....#if !SQLI
7ba0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
7bb0: 20 20 20 20 20 20 20 69 6e 74 20 65 78 74 46 75         int extFu
7bc0: 6e 63 73 20 3d 20 28 28 63 6f 6e 6e 65 63 74 69  ncs = ((connecti
7bd0: 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65  onFlags & SQLite
7be0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7bf0: 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74  NoExtensionFunct
7c00: 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74 65 43  ions) != SQLiteC
7c10: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
7c20: 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69  oExtensionFuncti
7c30: 6f 6e 73 29 20 3f 20 31 20 3a 20 30 3b 0d 0a 0d  ons) ? 1 : 0;...
7c40: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65  .          if (e
7c50: 78 74 46 75 6e 63 73 20 21 3d 20 30 29 0d 0a 20  xtFuncs != 0).. 
7c60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7c70: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
7c80: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7c90: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74  sqlite3_open_int
7ca0: 65 72 6f 70 28 54 6f 55 54 46 38 28 73 74 72 46  erop(ToUTF8(strF
7cb0: 69 6c 65 6e 61 6d 65 29 2c 20 54 6f 55 54 46 38  ilename), ToUTF8
7cc0: 28 76 66 73 4e 61 6d 65 29 2c 20 6f 70 65 6e 46  (vfsName), openF
7cd0: 6c 61 67 73 2c 20 65 78 74 46 75 6e 63 73 2c 20  lags, extFuncs, 
7ce0: 72 65 66 20 64 62 29 3b 0d 0a 20 20 20 20 20 20  ref db);..      
7cf0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
7d00: 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20   else..#endif.. 
7d10: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7d20: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
7d30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7d40: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28  sqlite3_open_v2(
7d50: 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61  ToUTF8(strFilena
7d60: 6d 65 29 2c 20 72 65 66 20 64 62 2c 20 6f 70 65  me), ref db, ope
7d70: 6e 46 6c 61 67 73 2c 20 54 6f 55 54 46 38 28 76  nFlags, ToUTF8(v
7d80: 66 73 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20  fsName));..     
7d90: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 4e       }....#if !N
7da0: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
7db0: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
7dc0: 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72 61  N..          Tra
7dd0: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
7de0: 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
7df0: 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
7e00: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
7e10: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
7e20: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
7e30: 20 20 20 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20     "Open: {0}", 
7e40: 64 62 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  db));..#endif...
7e50: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e  .          if (n
7e60: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
7e70: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
7e80: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
7e90: 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  n(n, null);..   
7ea0: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65         _sql = ne
7eb0: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
7ec0: 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20 74 72 75  onHandle(db, tru
7ed0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
7ee0: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73          lock (_s
7ef0: 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20 46  ql) { /* HACK: F
7f00: 6f 72 63 65 20 74 68 65 20 53 79 6e 63 42 6c 6f  orce the SyncBlo
7f10: 63 6b 20 74 6f 20 62 65 20 22 63 72 65 61 74 65  ck to be "create
7f20: 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 0d 0a  d" now. */ }....
7f30: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
7f40: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
7f50: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
7f60: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
7f70: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
7f80: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45  QLiteConnectionE
7f90: 76 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74  ventType.NewCrit
7fa0: 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c  icalHandle, null
7fb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
7fc0: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ull, null, null,
7fd0: 20 5f 73 71 6c 2c 20 73 74 72 46 69 6c 65 6e 61   _sql, strFilena
7fe0: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
7ff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8000: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c  typeof(SQLite3),
8010: 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 76 66   strFilename, vf
8020: 73 4e 61 6d 65 2c 20 63 6f 6e 6e 65 63 74 69 6f  sName, connectio
8030: 6e 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20  nFlags,..       
8040: 20 20 20 20 20 6f 70 65 6e 46 6c 61 67 73 2c 20       openFlags, 
8050: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 75 73 65  maxPoolSize, use
8060: 50 6f 6f 6c 20 7d 29 29 3b 0d 0a 20 20 20 20 20  Pool }));..     
8070: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 42   }....      // B
8080: 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ind functions to
8090: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
80a0: 2e 20 20 49 66 20 61 6e 79 20 70 72 65 76 69 6f  .  If any previo
80b0: 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20  us functions of 
80c0: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a 20  the same name.. 
80d0: 20 20 20 20 20 2f 2f 20 77 65 72 65 20 61 6c 72       // were alr
80e0: 65 61 64 79 20 62 6f 75 6e 64 2c 20 74 68 65 6e  eady bound, then
80f0: 20 74 68 65 20 6e 65 77 20 62 69 6e 64 69 6e 67   the new binding
8100: 73 20 72 65 70 6c 61 63 65 20 74 68 65 20 6f 6c  s replace the ol
8110: 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 28 63  d...      if ((c
8120: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26  onnectionFlags &
8130: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8140: 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e  nFlags.NoBindFun
8150: 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74  ctions) != SQLit
8160: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8170: 2e 4e 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  .NoBindFunctions
8180: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
8190: 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74        if (_funct
81a0: 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 75               _fu
81c0: 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 44 69  nctions = new Di
81d0: 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46  ctionary<SQLiteF
81e0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
81f0: 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  , SQLiteFunction
8200: 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  >();....        
8210: 20 20 66 6f 72 65 61 63 68 20 28 4b 65 79 56 61    foreach (KeyVa
8220: 6c 75 65 50 61 69 72 3c 53 51 4c 69 74 65 46 75  luePair<SQLiteFu
8230: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
8240: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e   SQLiteFunction>
8250: 20 70 61 69 72 0d 0a 20 20 20 20 20 20 20 20 20   pair..         
8260: 20 20 20 20 20 20 20 20 20 69 6e 20 53 51 4c 69           in SQLi
8270: 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46  teFunction.BindF
8280: 75 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 63  unctions(this, c
8290: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 29 29  onnectionFlags))
82a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 75               _fu
82c0: 6e 63 74 69 6f 6e 73 5b 70 61 69 72 2e 4b 65 79  nctions[pair.Key
82d0: 5d 20 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b 0d  ] = pair.Value;.
82e0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
82f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53      }....      S
8300: 65 74 54 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20  etTimeout(0);.. 
8310: 20 20 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76       GC.KeepAliv
8320: 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
8330: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8340: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c  override void Cl
8350: 65 61 72 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b  earPool()..    {
8360: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f  ..      SQLiteCo
8370: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65  nnectionPool.Cle
8380: 61 72 50 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65  arPool(_fileName
8390: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
83a0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
83b0: 64 65 20 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c  de int CountPool
83c0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
83d0: 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74     Dictionary<st
83e0: 72 69 6e 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74  ring, int> count
83f0: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
8400: 20 20 20 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74     int openCount
8410: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69   = 0;..        i
8420: 6e 74 20 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20  nt closeCount = 
8430: 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  0;..        int 
8440: 74 6f 74 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d  totalCount = 0;.
8450: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
8460: 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e  eConnectionPool.
8470: 47 65 74 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e  GetCounts(_fileN
8480: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
8490: 20 20 72 65 66 20 63 6f 75 6e 74 73 2c 20 72 65    ref counts, re
84a0: 66 20 6f 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66  f openCount, ref
84b0: 20 63 6c 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20   closeCount,..  
84c0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 74 6f            ref to
84d0: 74 61 6c 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  talCount);....  
84e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 6f 74        return tot
84f0: 61 6c 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d  alCount;..    }.
8500: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8510: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
8520: 74 54 69 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69  tTimeout(int nTi
8530: 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d  meoutMS)..    {.
8540: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 62  .      IntPtr db
8550: 20 3d 20 5f 73 71 6c 3b 0d 0a 20 20 20 20 20 20   = _sql;..      
8560: 69 66 20 28 64 62 20 3d 3d 20 49 6e 74 50 74 72  if (db == IntPtr
8570: 2e 5a 65 72 6f 29 20 74 68 72 6f 77 20 6e 65 77  .Zero) throw new
8580: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
8590: 28 22 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ("no connection 
85a0: 68 61 6e 64 6c 65 20 61 76 61 69 6c 61 62 6c 65  handle available
85b0: 22 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  ");..      SQLit
85c0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
85d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
85e0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 75 73 79 5f  ds.sqlite3_busy_
85f0: 74 69 6d 65 6f 75 74 28 64 62 2c 20 6e 54 69 6d  timeout(db, nTim
8600: 65 6f 75 74 4d 53 29 3b 0d 0a 20 20 20 20 20 20  eoutMS);..      
8610: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
8620: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
8630: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
8640: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
8650: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
8660: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8670: 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
8680: 53 74 65 70 28 53 51 4c 69 74 65 53 74 61 74 65  Step(SQLiteState
8690: 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20  ment stmt)..    
86a0: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
86b0: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20  rrorCode n;..   
86c0: 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20     Random rnd = 
86d0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e  null;..      uin
86e0: 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75  t starttick = (u
86f0: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
8700: 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20  TickCount;..    
8710: 20 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d    uint timeout =
8720: 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f   (uint)(stmt._co
8730: 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69  mmand._commandTi
8740: 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a  meout * 1000);..
8750: 0d 0a 20 20 20 20 20 20 52 65 73 65 74 43 61 6e  ..      ResetCan
8760: 63 65 6c 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20  celCount();.... 
8770: 20 20 20 20 20 77 68 69 6c 65 20 28 74 72 75 65       while (true
8780: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
8790: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
87a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
87b0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
87c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
87d0: 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
87e0: 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
87f0: 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
8800: 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  /..        {..  
8810: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
8820: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8830: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73 74 6d  sqlite3_step(stm
8840: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
8850: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8860: 20 20 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c         if (Shoul
8870: 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28  dThrowForCancel(
8880: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
8890: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
88a0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
88b0: 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20  Code.Ok) ||..   
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20               (n 
88d0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
88e0: 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20  de.Row) ||..    
88f0: 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d              (n =
8900: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
8910: 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20  e.Done))..      
8920: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8930: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 53 51 4c           n = SQL
8940: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74  iteErrorCode.Int
8950: 65 72 72 75 70 74 3b 0d 0a 20 20 20 20 20 20 20  errupt;..       
8960: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8970: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
8980: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
8990: 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  n, null);..     
89a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
89b0: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
89c0: 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75  rrorCode.Interru
89d0: 70 74 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65  pt) return false
89e0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
89f0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
8a00: 6f 64 65 2e 52 6f 77 29 20 72 65 74 75 72 6e 20  ode.Row) return 
8a10: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 69  true;..        i
8a20: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
8a30: 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 20 72 65  rorCode.Done) re
8a40: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
8a50: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
8a60: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
8a70: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  Ok)..        {..
8a80: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
8a90: 45 72 72 6f 72 43 6f 64 65 20 72 3b 0d 0a 0d 0a  ErrorCode r;....
8aa0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 41 6e 20            // An 
8ab0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2c 20  error occurred, 
8ac0: 61 74 74 65 6d 70 74 20 74 6f 20 72 65 73 65 74  attempt to reset
8ad0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20   the statement. 
8ae0: 20 49 66 20 74 68 65 20 72 65 73 65 74 20 77 6f   If the reset wo
8af0: 72 6b 65 64 20 62 65 63 61 75 73 65 20 74 68 65  rked because the
8b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73  ..          // s
8b10: 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
8b20: 64 2c 20 72 65 2d 74 72 79 20 74 68 65 20 73 74  d, re-try the st
8b30: 65 70 20 61 67 61 69 6e 2e 20 20 49 66 20 69 74  ep again.  If it
8b40: 20 65 72 72 6f 72 65 64 20 6f 75 72 20 62 65 63   errored our bec
8b50: 61 75 73 65 20 74 68 65 20 64 61 74 61 62 61 73  ause the databas
8b60: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  e..          // 
8b70: 69 73 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20  is locked, then 
8b80: 6b 65 65 70 20 72 65 74 72 79 69 6e 67 20 75 6e  keep retrying un
8b90: 74 69 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  til the command 
8ba0: 74 69 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d  timeout occurs..
8bb0: 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20 52  .          r = R
8bc0: 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20  eset(stmt);.... 
8bd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3d           if (r =
8be0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
8bf0: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
8c00: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
8c10: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
8c20: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
8c30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  ....          el
8c40: 73 65 20 69 66 20 28 28 72 20 3d 3d 20 53 51 4c  se if ((r == SQL
8c50: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63  iteErrorCode.Loc
8c60: 6b 65 64 20 7c 7c 20 72 20 3d 3d 20 53 51 4c 69  ked || r == SQLi
8c70: 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79  teErrorCode.Busy
8c80: 29 20 26 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d 61  ) && stmt._comma
8c90: 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nd != null)..   
8ca0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8cb0: 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74 72        // Keep tr
8cc0: 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ying..          
8cd0: 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c    if (rnd == nul
8ce0: 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d 65  l) // First time
8cf0: 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65 72   we've encounter
8d00: 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20  ed the lock..   
8d10: 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20 3d             rnd =
8d20: 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a   new Random();..
8d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8d40: 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65 64   If we've exceed
8d50: 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73  ed the command's
8d60: 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20 75   timeout, give u
8d70: 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65  p and throw an e
8d80: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
8d90: 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76 69    if ((uint)Envi
8da0: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
8db0: 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e 20  t - starttick > 
8dc0: 74 69 6d 65 6f 75 74 29 0d 0a 20 20 20 20 20 20  timeout)..      
8dd0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8de0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
8df0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
8e00: 28 72 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (r, GetLastError
8e10: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
8e20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8e30: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
8e40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8e50: 20 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65      // Otherwise
8e60: 20 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e   sleep for a ran
8e70: 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69  dom amount of ti
8e80: 6d 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a  me up to 150ms..
8e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
8ea0: 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54  stem.Threading.T
8eb0: 68 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e  hread.Sleep(rnd.
8ec0: 4e 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a  Next(1, 150));..
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8ee0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8ef0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
8f00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
8f10: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8f20: 2f 2f 2f 20 48 61 73 20 74 68 65 20 73 71 6c 69  /// Has the sqli
8f30: 74 65 33 5f 65 72 72 73 74 72 28 29 20 63 6f 72  te3_errstr() cor
8f40: 65 20 6c 69 62 72 61 72 79 20 41 50 49 20 62 65  e library API be
8f50: 65 6e 20 63 68 65 63 6b 65 64 20 66 6f 72 20 79  en checked for y
8f60: 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20  et?..    /// If 
8f70: 73 6f 2c 20 69 73 20 69 74 20 70 72 65 73 65 6e  so, is it presen
8f80: 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t?..    /// </su
8f90: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
8fa0: 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f  ate static bool?
8fb0: 20 68 61 76 65 5f 65 72 72 73 74 72 20 3d 20 6e   have_errstr = n
8fc0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ull;....    /// 
8fd0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
8fe0: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 65  // Returns the e
8ff0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
9000: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 53   the specified S
9010: 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
9020: 65 20 75 73 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f  e using..    ///
9030: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72   the sqlite3_err
9040: 73 74 72 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  str() function, 
9050: 66 61 6c 6c 69 6e 67 20 62 61 63 6b 20 74 6f 20  falling back to 
9060: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 6c 6f 6f  the internal loo
9070: 6b 75 70 0d 0a 20 20 20 20 2f 2f 2f 20 74 61 62  kup..    /// tab
9080: 6c 65 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e  le if necessary.
9090: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
90a0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
90b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 72 63 22 3e 54  aram name="rc">T
90c0: 68 65 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  he SQLite return
90d0: 20 63 6f 64 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a   code.</param>..
90e0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
90f0: 3e 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61  >The error messa
9100: 67 65 20 6f 72 20 6e 75 6c 6c 20 69 66 20 69 74  ge or null if it
9110: 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64   cannot be found
9120: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
9130: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
9140: 20 73 74 72 69 6e 67 20 47 65 74 45 72 72 6f 72   string GetError
9150: 53 74 72 69 6e 67 28 53 51 4c 69 74 65 45 72 72  String(SQLiteErr
9160: 6f 72 43 6f 64 65 20 72 63 29 0d 0a 20 20 20 20  orCode rc)..    
9170: 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  {..        try..
9180: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9190: 20 20 20 20 20 20 20 69 66 20 28 68 61 76 65 5f         if (have_
91a0: 65 72 72 73 74 72 20 3d 3d 20 6e 75 6c 6c 29 0d  errstr == null).
91b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91d0: 69 6e 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65  int versionNumbe
91e0: 72 20 3d 20 53 51 4c 69 74 65 56 65 72 73 69 6f  r = SQLiteVersio
91f0: 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20  nNumber;..      
9200: 20 20 20 20 20 20 20 20 20 20 68 61 76 65 5f 65            have_e
9210: 72 72 73 74 72 20 3d 20 28 76 65 72 73 69 6f 6e  rrstr = (version
9220: 4e 75 6d 62 65 72 20 3e 3d 20 33 30 30 37 30 31  Number >= 300701
9230: 35 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  5);..           
9240: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
9250: 20 20 69 66 20 28 28 62 6f 6f 6c 29 68 61 76 65    if ((bool)have
9260: 5f 65 72 72 73 74 72 29 0d 0a 20 20 20 20 20 20  _errstr)..      
9270: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9280: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
9290: 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ptr = UnsafeNati
92a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
92b0: 33 5f 65 72 72 73 74 72 28 72 63 29 3b 0d 0a 0d  3_errstr(rc);...
92c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
92d0: 20 69 66 20 28 70 74 72 20 21 3d 20 49 6e 74 50   if (ptr != IntP
92e0: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
92f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
9300: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
9310: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
9320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9330: 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e   return Marshal.
9340: 50 74 72 54 6f 53 74 72 69 6e 67 41 6e 73 69 28  PtrToStringAnsi(
9350: 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ptr);..#else..  
9360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9370: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
9380: 74 72 69 6e 67 28 70 74 72 2c 20 2d 31 29 3b 0d  tring(ptr, -1);.
9390: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
93a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
93b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
93c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63 61     }..        ca
93d0: 74 63 68 20 28 45 6e 74 72 79 50 6f 69 6e 74 4e  tch (EntryPointN
93e0: 6f 74 46 6f 75 6e 64 45 78 63 65 70 74 69 6f 6e  otFoundException
93f0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
9400: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
9410: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
9420: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
9430: 65 74 75 72 6e 20 46 61 6c 6c 62 61 63 6b 47 65  eturn FallbackGe
9440: 74 45 72 72 6f 72 53 74 72 69 6e 67 28 72 63 29  tErrorString(rc)
9450: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9460: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9470: 20 20 20 2f 2f 2f 20 48 61 73 20 74 68 65 20 73     /// Has the s
9480: 71 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65 61 64  qlite3_stmt_read
9490: 6f 6e 6c 79 28 29 20 63 6f 72 65 20 6c 69 62 72  only() core libr
94a0: 61 72 79 20 41 50 49 20 62 65 65 6e 20 63 68 65  ary API been che
94b0: 63 6b 65 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20  cked for yet?.. 
94c0: 20 20 20 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73     /// If so, is
94d0: 20 69 74 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20   it present?..  
94e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
94f0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
9500: 61 74 69 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f  atic bool? have_
9510: 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20  stmt_readonly = 
9520: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  null;....    ///
9530: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
9540: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d  /// Returns non-
9550: 7a 65 72 6f 20 69 66 20 74 68 65 20 73 70 65 63  zero if the spec
9560: 69 66 69 65 64 20 73 74 61 74 65 6d 65 6e 74 20  ified statement 
9570: 69 73 20 72 65 61 64 2d 6f 6e 6c 79 20 69 6e 20  is read-only in 
9580: 6e 61 74 75 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f  nature...    ///
9590: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
95a0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
95b0: 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74  ="stmt">The stat
95c0: 65 6d 65 6e 74 20 74 6f 20 63 68 65 63 6b 2e 3c  ement to check.<
95d0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
95e0: 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69   <returns>True i
95f0: 66 20 74 68 65 20 6f 75 74 65 72 20 71 75 65 72  f the outer quer
9600: 79 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c  y is read-only.<
9610: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
9620: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
9630: 20 62 6f 6f 6c 20 49 73 52 65 61 64 4f 6e 6c 79   bool IsReadOnly
9640: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
9650: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 0d  eStatement stmt.
9660: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
9670: 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  {..        try..
9680: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9690: 20 20 20 20 20 20 20 69 66 20 28 68 61 76 65 5f         if (have_
96a0: 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 3d  stmt_readonly ==
96b0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
96c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
96d0: 20 20 20 20 20 20 20 69 6e 74 20 76 65 72 73 69         int versi
96e0: 6f 6e 4e 75 6d 62 65 72 20 3d 20 53 51 4c 69 74  onNumber = SQLit
96f0: 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d  eVersionNumber;.
9700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9710: 20 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f   have_stmt_reado
9720: 6e 6c 79 20 3d 20 28 76 65 72 73 69 6f 6e 4e 75  nly = (versionNu
9730: 6d 62 65 72 20 3e 3d 20 33 30 30 37 30 30 34 29  mber >= 3007004)
9740: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
9750: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9760: 69 66 20 28 28 62 6f 6f 6c 29 68 61 76 65 5f 73  if ((bool)have_s
9770: 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 29 0d 0a 20  tmt_readonly).. 
9780: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
97a0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
97b0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
97c0: 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 0d  _stmt_readonly(.
97d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
97e0: 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74       stmt._sqlit
97f0: 65 5f 73 74 6d 74 29 20 21 3d 20 30 3b 0d 0a 20  e_stmt) != 0;.. 
9800: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9810: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9820: 20 63 61 74 63 68 20 28 45 6e 74 72 79 50 6f 69   catch (EntryPoi
9830: 6e 74 4e 6f 74 46 6f 75 6e 64 45 78 63 65 70 74  ntNotFoundExcept
9840: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ion)..        {.
9850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
9860: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
9870: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9880: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 20    return false; 
9890: 2f 2a 20 4e 4f 54 45 3a 20 55 6e 6b 6e 6f 77 6e  /* NOTE: Unknown
98a0: 2c 20 61 73 73 75 6d 65 20 66 61 6c 73 65 2e 20  , assume false. 
98b0: 2a 2f 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  */..    }....   
98c0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
98d0: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
98e0: 64 65 20 52 65 73 65 74 28 53 51 4c 69 74 65 53  de Reset(SQLiteS
98f0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a  tatement stmt)..
9900: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
9910: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
9920: 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
9930: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e  TANDARD..      n
9940: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9950: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
9960: 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d  eset_interop(stm
9970: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
9980: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e  ..#else..      n
9990: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
99a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
99b0: 65 73 65 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  eset(stmt._sqlit
99c0: 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66  e_stmt);..#endif
99d0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
99e0: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
99f0: 65 64 2c 20 74 72 79 20 61 6e 64 20 72 65 2d 70  ed, try and re-p
9a00: 72 65 70 61 72 65 20 69 74 0d 0a 20 20 20 20 20  repare it..     
9a10: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
9a20: 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61  ErrorCode.Schema
9a30: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
9a40: 20 20 20 20 2f 2f 20 52 65 63 72 65 61 74 65 20      // Recreate 
9a50: 61 20 64 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e  a dummy statemen
9a60: 74 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  t..        strin
9a70: 67 20 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  g str = null;.. 
9a80: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
9a90: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6d  LiteStatement tm
9aa0: 70 20 3d 20 50 72 65 70 61 72 65 28 6e 75 6c 6c  p = Prepare(null
9ab0: 2c 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65  , stmt._sqlState
9ac0: 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e  ment, null, (uin
9ad0: 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64  t)(stmt._command
9ae0: 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74  ._commandTimeout
9af0: 20 2a 20 31 30 30 30 29 2c 20 72 65 66 20 73 74   * 1000), ref st
9b00: 72 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  r))..        {..
9b10: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46 69 6e            // Fin
9b20: 61 6c 69 7a 65 20 74 68 65 20 65 78 69 73 74 69  alize the existi
9b30: 6e 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20  ng statement..  
9b40: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71          stmt._sq
9b50: 6c 69 74 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73  lite_stmt.Dispos
9b60: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
9b70: 2f 2f 20 52 65 61 73 73 69 67 6e 20 61 20 6e 65  // Reassign a ne
9b80: 77 20 73 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e  w statement poin
9b90: 74 65 72 20 74 6f 20 74 68 65 20 6f 6c 64 20 73  ter to the old s
9ba0: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65  tatement and cle
9bb0: 61 72 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  ar the temporary
9bc0: 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20   one..          
9bd0: 69 66 20 28 74 6d 70 20 21 3d 20 6e 75 6c 6c 29  if (tmp != null)
9be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
9bf0: 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e             stmt.
9c00: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 74  _sqlite_stmt = t
9c10: 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mp._sqlite_stmt;
9c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 6d  ..            tm
9c30: 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d  p._sqlite_stmt =
9c40: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
9c50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9c60: 20 2f 2f 20 52 65 61 70 70 6c 79 20 70 61 72 61   // Reapply para
9c70: 6d 65 74 65 72 73 0d 0a 20 20 20 20 20 20 20 20  meters..        
9c80: 20 20 73 74 6d 74 2e 42 69 6e 64 50 61 72 61 6d    stmt.BindParam
9c90: 65 74 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20  eters();..      
9ca0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74    }..        ret
9cb0: 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
9cc0: 6f 64 65 2e 55 6e 6b 6e 6f 77 6e 3b 20 2f 2f 20  ode.Unknown; // 
9cd0: 52 65 73 65 74 20 77 61 73 20 4f 4b 2c 20 77 69  Reset was OK, wi
9ce0: 74 68 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  th schema change
9cf0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
9d00: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
9d10: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
9d20: 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51  ocked || n == SQ
9d30: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
9d40: 73 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74  sy)..        ret
9d50: 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  urn n;....      
9d60: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
9d70: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
9d80: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
9d90: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
9da0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
9db0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  ));....      ret
9dc0: 75 72 6e 20 6e 3b 20 2f 2f 20 57 65 20 72 65 73  urn n; // We res
9dd0: 65 74 20 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d 61  et OK, no schema
9de0: 20 63 68 61 6e 67 65 73 0d 0a 20 20 20 20 7d 0d   changes..    }.
9df0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
9e00: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
9e10: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a  GetLastError()..
9e20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
9e30: 65 74 75 72 6e 20 47 65 74 4c 61 73 74 45 72 72  eturn GetLastErr
9e40: 6f 72 28 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d  or(null);..    }
9e50: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
9e60: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
9e70: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 73 74   GetLastError(st
9e80: 72 69 6e 67 20 64 65 66 56 61 6c 75 65 29 0d 0a  ring defValue)..
9e90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73      {..        s
9ea0: 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 53  tring result = S
9eb0: 51 4c 69 74 65 42 61 73 65 2e 47 65 74 4c 61 73  QLiteBase.GetLas
9ec0: 74 45 72 72 6f 72 28 5f 73 71 6c 2c 20 5f 73 71  tError(_sql, _sq
9ed0: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  l);..        if 
9ee0: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
9ef0: 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29 20 72  Empty(result)) r
9f00: 65 73 75 6c 74 20 3d 20 64 65 66 56 61 6c 75 65  esult = defValue
9f10: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
9f20: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d  n result;..    }
9f30: 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
9fa0: 72 65 67 69 6f 6e 20 51 75 65 72 79 20 44 69 61  region Query Dia
9fb0: 67 6e 6f 73 74 69 63 73 20 53 75 70 70 6f 72 74  gnostics Support
9fc0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
9fd0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
9fe0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
9ff0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
a000: 73 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  s field is used 
a010: 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66  to keep track of
a020: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
a030: 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 22 53 51  the..    /// "SQ
a040: 4c 69 74 65 5f 46 6f 72 63 65 4c 6f 67 50 72 65  Lite_ForceLogPre
a050: 70 61 72 65 22 20 65 6e 76 69 72 6f 6e 6d 65 6e  pare" environmen
a060: 74 20 76 61 72 69 61 62 6c 65 20 68 61 73 20 62  t variable has b
a070: 65 65 6e 20 71 75 65 72 69 65 64 2e 20 20 49 66  een queried.  If
a080: 20 73 6f 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74   so,..    /// it
a090: 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 6e 6f   will only be no
a0a0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 65 6e  n-zero if the en
a0b0: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
a0c0: 6c 65 20 77 61 73 20 70 72 65 73 65 6e 74 2e 0d  le was present..
a0d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
a0e0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
a0f0: 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 66 6f   static bool? fo
a100: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 20  rceLogPrepare = 
a110: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  null;....    ///
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a180: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
a190: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
a1a0: 6d 69 6e 65 73 20 69 66 20 61 6c 6c 20 63 61 6c  mines if all cal
a1b0: 6c 73 20 74 6f 20 70 72 65 70 61 72 65 20 61 20  ls to prepare a 
a1c0: 53 51 4c 20 71 75 65 72 79 20 77 69 6c 6c 20 62  SQL query will b
a1d0: 65 20 6c 6f 67 67 65 64 2c 0d 0a 20 20 20 20 2f  e logged,..    /
a1e0: 2f 2f 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  // regardless of
a1f0: 20 74 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74   the flags for t
a200: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f  he associated co
a210: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
a220: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
a230: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
a240: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
a250: 72 6f 20 74 6f 20 6c 6f 67 20 61 6c 6c 20 63 61  ro to log all ca
a260: 6c 6c 73 20 74 6f 20 70 72 65 70 61 72 65 20 61  lls to prepare a
a270: 20 53 51 4c 20 71 75 65 72 79 2e 0d 0a 20 20 20   SQL query...   
a280: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
a290: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
a2a0: 74 69 63 20 62 6f 6f 6c 20 46 6f 72 63 65 4c 6f  tic bool ForceLo
a2b0: 67 50 72 65 70 61 72 65 28 29 0d 0a 20 20 20 20  gPrepare()..    
a2c0: 7b 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20  {..        lock 
a2d0: 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20  (syncRoot)..    
a2e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a2f0: 20 20 20 69 66 20 28 66 6f 72 63 65 4c 6f 67 50     if (forceLogP
a300: 72 65 70 61 72 65 20 3d 3d 20 6e 75 6c 6c 29 0d  repare == null).
a310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a330: 69 66 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65  if (UnsafeNative
a340: 4d 65 74 68 6f 64 73 2e 47 65 74 53 65 74 74 69  Methods.GetSetti
a350: 6e 67 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  ngValue(..      
a360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a370: 20 20 22 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c    "SQLite_ForceL
a380: 6f 67 50 72 65 70 61 72 65 22 2c 20 6e 75 6c 6c  ogPrepare", null
a390: 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  ) != null)..    
a3a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3c0: 20 20 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61     forceLogPrepa
a3d0: 72 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  re = true;..    
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
a400: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
a410: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a420: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 63              forc
a430: 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 20 66 61  eLogPrepare = fa
a440: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
a450: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a460: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a470: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 62 6f        return (bo
a480: 6f 6c 29 66 6f 72 63 65 4c 6f 67 50 72 65 70 61  ol)forceLogPrepa
a490: 72 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  re;..        }..
a4a0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
a4b0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
a4c0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
a4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a520: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
a530: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
a540: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72  LiteStatement Pr
a550: 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e  epare(SQLiteConn
a560: 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69  ection cnn, stri
a570: 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74  ng strSql, SQLit
a580: 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69  eStatement previ
a590: 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75  ous, uint timeou
a5a0: 74 4d 53 2c 20 72 65 66 20 73 74 72 69 6e 67 20  tMS, ref string 
a5b0: 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20  strRemain)..    
a5c0: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53 74  {..      if (!St
a5d0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
a5e0: 74 79 28 73 74 72 53 71 6c 29 29 20 73 74 72 53  ty(strSql)) strS
a5f0: 71 6c 20 3d 20 73 74 72 53 71 6c 2e 54 72 69 6d  ql = strSql.Trim
a600: 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 21  ();..      if (!
a610: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
a620: 6d 70 74 79 28 73 74 72 53 71 6c 29 29 0d 0a 20  mpty(strSql)).. 
a630: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a640: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e  //..        // N
a650: 4f 54 45 3a 20 53 51 4c 69 74 65 20 64 6f 65 73  OTE: SQLite does
a660: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65   not support the
a670: 20 63 6f 6e 63 65 70 74 20 6f 66 20 73 65 70 61   concept of sepa
a680: 72 61 74 65 20 73 63 68 65 6d 61 73 0d 0a 20 20  rate schemas..  
a690: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
a6a0: 6e 20 6f 6e 65 20 64 61 74 61 62 61 73 65 3b 20  n one database; 
a6b0: 74 68 65 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76  therefore, remov
a6c0: 65 20 74 68 65 20 62 61 73 65 20 73 63 68 65 6d  e the base schem
a6d0: 61 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  a name..        
a6e0: 2f 2f 20 20 20 20 20 20 20 75 73 65 64 20 74 6f  //       used to
a6f0: 20 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72 61 74   smooth integrat
a700: 69 6f 6e 20 77 69 74 68 20 74 68 65 20 62 61 73  ion with the bas
a710: 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
a720: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
a730: 20 20 20 64 61 74 61 20 63 6c 61 73 73 65 73 2e     data classes.
a740: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
a750: 20 20 20 20 20 20 73 74 72 69 6e 67 20 62 61 73        string bas
a760: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63  eSchemaName = (c
a770: 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e  nn != null) ? cn
a780: 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  n._baseSchemaNam
a790: 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e : null;....   
a7a0: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
a7b0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62  .IsNullOrEmpty(b
a7c0: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d  aseSchemaName)).
a7d0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
a7e0: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
a7f0: 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a  trSql.Replace(..
a800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48 65                He
a810: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
a820: 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65  ngFormat(Culture
a830: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
a840: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
a850: 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c 20        "[{0}].", 
a860: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c  baseSchemaName),
a870: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
a880: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  ...          str
a890: 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70  Sql = strSql.Rep
a8a0: 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  lace(..         
a8b0: 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f       HelperMetho
a8c0: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
a8d0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
a8e0: 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  riantCulture,.. 
a8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
a900: 7d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e  }.", baseSchemaN
a910: 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70  ame), String.Emp
a920: 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ty);..        }.
a930: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
a940: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
a950: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 20 3d 0d  onFlags flags =.
a960: 0a 20 20 20 20 20 20 20 20 20 20 28 63 6e 6e 20  .          (cnn 
a970: 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 46  != null) ? cnn.F
a980: 6c 61 67 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e  lags : SQLiteCon
a990: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 66  nectionFlags.Def
a9a0: 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ault;....      i
a9b0: 66 20 28 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  f (..#if !PLATFO
a9c0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
a9d0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 46  ORK..          F
a9e0: 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29  orceLogPrepare()
a9f0: 20 7c 7c 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20   ||..#endif..   
aa00: 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74         HelperMet
aa10: 68 6f 64 73 2e 4c 6f 67 50 72 65 70 61 72 65 28  hods.LogPrepare(
aa20: 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 7b  flags))..      {
aa30: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
aa40: 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29  (strSql == null)
aa50: 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67   || (strSql.Leng
aa60: 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72  th == 0) || (str
aa70: 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74  Sql.Trim().Lengt
aa80: 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20  h == 0))..      
aa90: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
aaa0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22 50 72  g.LogMessage("Pr
aab0: 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e  eparing {<nothin
aac0: 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20  g>}...");..     
aad0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
aae0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
aaf0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65  og.LogMessage(He
ab00: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
ab10: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
ab30: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
ab40: 43 75 6c 74 75 72 65 2c 20 22 50 72 65 70 61 72  Culture, "Prepar
ab50: 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c  ing {{{0}}}...",
ab60: 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20 20 20 20   strSql));..    
ab70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 49 6e 74    }....      Int
ab80: 50 74 72 20 73 74 6d 74 20 3d 20 49 6e 74 50 74  Ptr stmt = IntPt
ab90: 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49  r.Zero;..      I
aba0: 6e 74 50 74 72 20 70 74 72 20 3d 20 49 6e 74 50  ntPtr ptr = IntP
abb0: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
abc0: 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  int len = 0;..  
abd0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
abe0: 6f 64 65 20 6e 20 3d 20 53 51 4c 69 74 65 45 72  ode n = SQLiteEr
abf0: 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 3b 0d  rorCode.Schema;.
ac00: 0a 20 20 20 20 20 20 69 6e 74 20 72 65 74 72 69  .      int retri
ac10: 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69  es = 0;..      i
ac20: 6e 74 20 6d 61 78 69 6d 75 6d 52 65 74 72 69 65  nt maximumRetrie
ac30: 73 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c  s = (cnn != null
ac40: 29 20 3f 20 63 6e 6e 2e 5f 70 72 65 70 61 72 65  ) ? cnn._prepare
ac50: 52 65 74 72 69 65 73 20 3a 20 53 51 4c 69 74 65  Retries : SQLite
ac60: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 44 65 66 61 75  Connection.Defau
ac70: 6c 74 50 72 65 70 61 72 65 52 65 74 72 69 65 73  ltPrepareRetries
ac80: 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  ;..      byte[] 
ac90: 62 20 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71  b = ToUTF8(strSq
aca0: 6c 29 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e  l);..      strin
acb0: 67 20 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c  g typedefs = nul
acc0: 6c 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  l;..      SQLite
acd0: 53 74 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20  Statement cmd = 
ace0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e  null;..      Ran
acf0: 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d  dom rnd = null;.
ad00: 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72  .      uint star
ad10: 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e  ttick = (uint)En
ad20: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
ad30: 75 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65  unt;....      Re
ad40: 73 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29  setCancelCount()
ad50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 43 48 61 6e  ;....      GCHan
ad60: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 47 43 48  dle handle = GCH
ad70: 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47  andle.Alloc(b, G
ad80: 43 48 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e  CHandleType.Pinn
ad90: 65 64 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50  ed);..      IntP
ada0: 74 72 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65  tr psql = handle
adb0: 2e 41 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a  .AddrOfPinnedObj
adc0: 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 53 51  ect();..      SQ
add0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
ade0: 64 6c 65 20 73 74 61 74 65 6d 65 6e 74 48 61 6e  dle statementHan
adf0: 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  dle = null;..   
ae00: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d     try..      {.
ae10: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28  .        while (
ae20: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
ae30: 72 43 6f 64 65 2e 53 63 68 65 6d 61 20 7c 7c 20  rCode.Schema || 
ae40: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
ae50: 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e  Code.Locked || n
ae60: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
ae70: 6f 64 65 2e 42 75 73 79 29 20 26 26 20 72 65 74  ode.Busy) && ret
ae80: 72 69 65 73 20 3c 20 6d 61 78 69 6d 75 6d 52 65  ries < maximumRe
ae90: 74 72 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20  tries)..        
aea0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 72 79  {..          try
aeb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
aec0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
aed0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
aee0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
aef0: 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54    finally /* NOT
af00: 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28  E: Thread.Abort(
af10: 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f  ) protection. */
af20: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
af30: 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 20             stmt 
af40: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
af50: 20 20 20 20 20 20 20 20 20 20 20 20 70 74 72 20              ptr 
af60: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
af70: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
af80: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
af90: 20 20 20 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20      len = 0;..  
afa0: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
afb0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
afc0: 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  s.sqlite3_prepar
afd0: 65 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  e_interop(_sql, 
afe0: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
aff0: 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65   1, ref stmt, re
b000: 66 20 70 74 72 2c 20 72 65 66 20 6c 65 6e 29 3b  f ptr, ref len);
b010: 0d 0a 23 65 6c 73 65 0d 0a 23 69 66 20 55 53 45  ..#else..#if USE
b020: 5f 50 52 45 50 41 52 45 5f 56 32 0d 0a 20 20 20  _PREPARE_V2..   
b030: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
b040: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b050: 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  .sqlite3_prepare
b060: 5f 76 32 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20  _v2(_sql, psql, 
b070: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65  b.Length - 1, re
b080: 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72 29  f stmt, ref ptr)
b090: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
b0a0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
b0b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
b0c0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 5f 73  lite3_prepare(_s
b0d0: 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67  ql, psql, b.Leng
b0e0: 74 68 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74  th - 1, ref stmt
b0f0: 2c 20 72 65 66 20 70 74 72 29 3b 0d 0a 23 65 6e  , ref ptr);..#en
b100: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
b110: 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64   len = -1;..#end
b120: 69 66 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  if....#if !NET_C
b130: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
b140: 43 45 5f 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20  CE_STATEMENT..  
b150: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
b160: 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72  WriteLine(Helper
b170: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
b180: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
b190: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
b1a0: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
b1b0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
b1c0: 20 20 20 20 22 50 72 65 70 61 72 65 20 28 7b 30      "Prepare ({0
b1d0: 7d 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d  }): {1}", n, stm
b1e0: 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  t));..#endif....
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b200: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
b210: 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73 74  rCode.Ok) && (st
b220: 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  mt != IntPtr.Zer
b230: 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  o))..           
b240: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b250: 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48    if (statementH
b260: 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 73  andle != null) s
b270: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2e 44  tatementHandle.D
b280: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
b290: 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
b2a0: 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53  ntHandle = new S
b2b0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
b2c0: 6e 64 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29  ndle(_sql, stmt)
b2d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
b2e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
b2f0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73  .          if (s
b300: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21  tatementHandle !
b310: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
b320: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b330: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
b340: 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c  on.OnChanged(nul
b350: 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f  l, new Connectio
b360: 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  nEventArgs(..   
b370: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
b380: 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74  eConnectionEvent
b390: 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c  Type.NewCritical
b3a0: 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75  Handle, null, nu
b3b0: 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
b3c0: 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 73     null, null, s
b3d0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20  tatementHandle, 
b3e0: 73 74 72 53 71 6c 2c 20 6e 65 77 20 6f 62 6a 65  strSql, new obje
b3f0: 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ct[] {..        
b400: 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
b410: 69 74 65 33 29 2c 20 63 6e 6e 2c 20 73 74 72 53  ite3), cnn, strS
b420: 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69  ql, previous, ti
b430: 6d 65 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a 20 20  meoutMS }));..  
b440: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b450: 20 20 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c         if (Shoul
b460: 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28  dThrowForCancel(
b470: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
b480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
b490: 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  f ((n == SQLiteE
b4a0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d  rrorCode.Ok) ||.
b4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b4c0: 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45     (n == SQLiteE
b4d0: 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c  rrorCode.Row) ||
b4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b4f0: 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65      (n == SQLite
b500: 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29  ErrorCode.Done))
b510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b520: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b530: 20 20 20 20 20 6e 20 3d 20 53 51 4c 69 74 65 45       n = SQLiteE
b540: 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75  rrorCode.Interru
b550: 70 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pt;..           
b560: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b570: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b580: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
b590: 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  n, null);..     
b5a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b5b0: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
b5c0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74  iteErrorCode.Int
b5d0: 65 72 72 75 70 74 29 0d 0a 20 20 20 20 20 20 20  errupt)..       
b5e0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
b5f0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
b600: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
b610: 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20  Code.Schema)..  
b620: 20 20 20 20 20 20 20 20 20 20 72 65 74 72 69 65            retrie
b630: 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s++;..          
b640: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
b650: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
b660: 72 6f 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ror)..          
b670: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
b680: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
b690: 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  e(GetLastError()
b6a0: 2c 20 22 6e 65 61 72 20 5c 22 54 59 50 45 53 5c  , "near \"TYPES\
b6b0: 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 22  ": syntax error"
b6c0: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
b6d0: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
b6e0: 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20  Case) == 0)..   
b6f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b700: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 70 6f            int po
b710: 73 20 3d 20 73 74 72 53 71 6c 2e 49 6e 64 65 78  s = strSql.Index
b720: 4f 66 28 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20  Of(';');..      
b730: 20 20 20 20 20 20 20 20 69 66 20 28 70 6f 73 20          if (pos 
b740: 3d 3d 20 2d 31 29 20 70 6f 73 20 3d 20 73 74 72  == -1) pos = str
b750: 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d  Sql.Length - 1;.
b760: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b770: 20 74 79 70 65 64 65 66 73 20 3d 20 73 74 72 53   typedefs = strS
b780: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20  ql.Substring(0, 
b790: 70 6f 73 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20  pos + 1);..     
b7a0: 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20           strSql 
b7b0: 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69  = strSql.Substri
b7c0: 6e 67 28 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a  ng(pos + 1);....
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
b7e0: 72 52 65 6d 61 69 6e 20 3d 20 53 74 72 69 6e 67  rRemain = String
b7f0: 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20  .Empty;....     
b800: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
b810: 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73  cmd == null && s
b820: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30  trSql.Length > 0
b830: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b840: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b850: 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72      cmd = Prepar
b860: 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70  e(cnn, strSql, p
b870: 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74  revious, timeout
b880: 4d 53 2c 20 72 65 66 20 73 74 72 52 65 6d 61 69  MS, ref strRemai
b890: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
b8a0: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
b8b0: 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20  rRemain;..      
b8c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b8d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
b8e0: 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  md != null)..   
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
b900: 2e 53 65 74 54 79 70 65 73 28 74 79 70 65 64 65  .SetTypes(typede
b910: 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  fs);....        
b920: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64        return cmd
b930: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
b940: 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35 20 7c 7c  ..#if (NET_35 ||
b950: 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34   NET_40 || NET_4
b960: 35 20 7c 7c 20 4e 45 54 5f 34 35 31 20 7c 7c 20  5 || NET_451 || 
b970: 4e 45 54 5f 34 35 32 20 7c 7c 20 4e 45 54 5f 34  NET_452 || NET_4
b980: 36 20 7c 7c 20 4e 45 54 5f 34 36 31 20 7c 7c 20  6 || NET_461 || 
b990: 4e 45 54 5f 34 36 32 20 7c 7c 20 4e 45 54 5f 34  NET_462 || NET_4
b9a0: 37 20 7c 7c 20 4e 45 54 5f 34 37 31 29 20 26 26  7 || NET_471) &&
b9b0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
b9c0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
b9d0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
b9e0: 20 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d   (_buildingSchem
b9f0: 61 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74  a == false && St
ba00: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74  ring.Compare(Get
ba10: 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20  LastError(), 0, 
ba20: 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  "no such table: 
ba30: 54 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c  TEMP.SCHEMA", 0,
ba40: 20 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61   26, StringCompa
ba50: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
ba60: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a  oreCase) == 0)..
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ba80: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
ba90: 52 65 6d 61 69 6e 20 3d 20 53 74 72 69 6e 67 2e  Remain = String.
baa0: 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  Empty;..        
bab0: 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53        _buildingS
bac0: 63 68 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20  chema = true;.. 
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
bae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
baf0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bb00: 20 20 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61     ISQLiteSchema
bb10: 45 78 74 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d  Extensions ext =
bb20: 20 28 28 49 53 65 72 76 69 63 65 50 72 6f 76 69   ((IServiceProvi
bb30: 64 65 72 29 53 51 4c 69 74 65 46 61 63 74 6f 72  der)SQLiteFactor
bb40: 79 2e 49 6e 73 74 61 6e 63 65 29 2e 47 65 74 53  y.Instance).GetS
bb50: 65 72 76 69 63 65 28 74 79 70 65 6f 66 28 49 53  ervice(typeof(IS
bb60: 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e  QLiteSchemaExten
bb70: 73 69 6f 6e 73 29 29 20 61 73 20 49 53 51 4c 69  sions)) as ISQLi
bb80: 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f  teSchemaExtensio
bb90: 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ns;....         
bba0: 20 20 20 20 20 20 20 69 66 20 28 65 78 74 20 21         if (ext !
bbb0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
bbc0: 20 20 20 20 20 20 20 20 20 20 20 65 78 74 2e 42             ext.B
bbd0: 75 69 6c 64 54 65 6d 70 53 63 68 65 6d 61 28 63  uildTempSchema(c
bbe0: 6e 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nn);....        
bbf0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 63          while (c
bc00: 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74  md == null && st
bc10: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29  rSql.Length > 0)
bc20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bc30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bc40: 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65         cmd = Pre
bc50: 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c  pare(cnn, strSql
bc60: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
bc70: 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72 52 65  outMS, ref strRe
bc80: 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  main);..        
bc90: 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c            strSql
bca0: 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20   = strRemain;.. 
bcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
bcc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bcd0: 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d      return cmd;.
bce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
bcf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd00: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
bd10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bd20: 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c 64            _build
bd30: 69 6e 67 53 63 68 65 6d 61 20 3d 20 66 61 6c 73  ingSchema = fals
bd40: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
bd50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
bd60: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   }..#endif..    
bd70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
bd80: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
bd90: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
bda0: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20  .Locked || n == 
bdb0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
bdc0: 42 75 73 79 29 20 2f 2f 20 4c 6f 63 6b 65 64 20  Busy) // Locked 
bdd0: 2d 2d 20 64 65 6c 61 79 20 61 20 73 6d 61 6c 6c  -- delay a small
bde0: 20 61 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20 72   amount before r
bdf0: 65 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20  etrying..       
be00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
be10: 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67    // Keep trying
be20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
be30: 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f   (rnd == null) /
be40: 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77 65 27  / First time we'
be50: 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74  ve encountered t
be60: 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20  he lock..       
be70: 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77         rnd = new
be80: 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20   Random();....  
be90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20            // If 
bea0: 77 65 27 76 65 20 65 78 63 65 65 64 65 64 20 74  we've exceeded t
beb0: 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d  he command's tim
bec0: 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e  eout, give up an
bed0: 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72  d throw an error
bee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
bef0: 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d   ((uint)Environm
bf00: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20  ent.TickCount - 
bf10: 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65  starttick > time
bf20: 6f 75 74 4d 53 29 0d 0a 20 20 20 20 20 20 20 20  outMS)..        
bf30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bf40: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
bf50: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
bf60: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
bf70: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
bf80: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
bf90: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
bfa0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
bfb0: 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73    // Otherwise s
bfc0: 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f  leep for a rando
bfd0: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  m amount of time
bfe0: 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20   up to 150ms..  
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
c000: 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72  em.Threading.Thr
c010: 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65  ead.Sleep(rnd.Ne
c020: 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20  xt(1, 150));..  
c030: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
c040: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c050: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
c060: 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f  f (ShouldThrowFo
c070: 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20  rCancel())..    
c080: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c090: 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c     if ((n == SQL
c0a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
c0b0: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
c0c0: 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74       (n == SQLit
c0d0: 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20  eErrorCode.Row) 
c0e0: 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
c0f0: 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65      (n == SQLite
c100: 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29  ErrorCode.Done))
c110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
c120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c130: 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72   n = SQLiteError
c140: 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d  Code.Interrupt;.
c150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
c170: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
c180: 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29  ception(n, null)
c190: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
c1a0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
c1b0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c1c0: 2e 49 6e 74 65 72 72 75 70 74 29 20 72 65 74 75  .Interrupt) retu
c1d0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
c1e0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
c1f0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
c200: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
c210: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
c220: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a  astError());....
c230: 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69          strRemai
c240: 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  n = UTF8ToString
c250: 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a 20  (ptr, len);.... 
c260: 20 20 20 20 20 20 20 69 66 20 28 73 74 61 74 65         if (state
c270: 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75  mentHandle != nu
c280: 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77 20 53 51  ll) cmd = new SQ
c290: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28 74 68  LiteStatement(th
c2a0: 69 73 2c 20 66 6c 61 67 73 2c 20 73 74 61 74 65  is, flags, state
c2b0: 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72 53  mentHandle, strS
c2c0: 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20  ql.Substring(0, 
c2d0: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20  strSql.Length - 
c2e0: 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68  strRemain.Length
c2f0: 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d  ), previous);...
c300: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
c310: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  cmd;..      }.. 
c320: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
c330: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 68      {..        h
c340: 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20  andle.Free();.. 
c350: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
c360: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
c370: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
c380: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
c390: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
c3a0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
c3b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
c3c0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
c3d0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
c3e0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
c3f0: 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72  ogMessage(Helper
c400: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
c410: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
c420: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
c430: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
c440: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
c450: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
c460: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
c470: 20 61 73 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20   as NULL...",.. 
c480: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
c490: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 29 29  eIntPtr, index))
c4a0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
c4b0: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
c4c0: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
c4d0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
c4e0: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
c4f0: 69 6e 64 65 78 2c 20 56 61 6c 75 65 54 79 70 65  index, ValueType
c500: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
c510: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
c520: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
c530: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
c540: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
c550: 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74 68  ssage(HelperMeth
c560: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
c570: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  (..            C
c580: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
c590: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
c5a0: 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67          "Binding
c5b0: 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70   statement {0} p
c5c0: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20  aramter #{1} as 
c5d0: 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61  type {2} with va
c5e0: 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c  lue {{{3}}}...",
c5f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ..            ha
c600: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
c610: 78 2c 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65  x, value.GetType
c620: 28 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20  (), value));..  
c630: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61    }....    priva
c640: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
c650: 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28   FormatDateTime(
c660: 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d  DateTime value).
c670: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
c680: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65  StringBuilder re
c690: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
c6a0: 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20  gBuilder();.... 
c6b0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
c6c0: 70 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74 72  pend(value.ToStr
c6d0: 69 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54  ing("yyyy-MM-ddT
c6e0: 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46  HH:mm:ss.FFFFFFF
c6f0: 4b 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  K"));..        r
c700: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
c710: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
c720: 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e  lt.Append(value.
c730: 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  Kind);..        
c740: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20  result.Append(' 
c750: 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  ');..        res
c760: 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65  ult.Append(value
c770: 2e 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20  .Ticks);....    
c780: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
c790: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
c7a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
c7b0: 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69  ected static voi
c7c0: 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65  d LogBind(SQLite
c7d0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
c7e0: 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65  handle, int inde
c7f0: 78 2c 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75  x, DateTime valu
c800: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
c810: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
c820: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
c830: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
c840: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
c850: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
c860: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
c870: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
c880: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
c890: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
c8a0: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
c8b0: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
c8c0: 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20  er #{1} as type 
c8d0: 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b  {2} with value {
c8e0: 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20  {{3}}}...",..   
c8f0: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
c900: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79  ntPtr, index, ty
c910: 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29 2c 20  peof(DateTime), 
c920: 46 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28 76  FormatDateTime(v
c930: 61 6c 75 65 29 29 29 3b 0d 0a 20 20 20 20 7d 0d  alue)));..    }.
c940: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
c950: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
c960: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
c970: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
c980: 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74  e, int index, st
c990: 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  ring value)..   
c9a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
c9b0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
c9c0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
c9d0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
c9e0: 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72  ogMessage(Helper
c9f0: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
ca00: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
ca10: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
ca20: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
ca40: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
ca50: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
ca60: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
ca70: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
ca80: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
ca90: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
caa0: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 53 74  index, typeof(St
cab0: 72 69 6e 67 29 2c 20 28 76 61 6c 75 65 20 21 3d  ring), (value !=
cac0: 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75 65 20 3a   null) ? value :
cad0: 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20   "<null>"));..  
cae0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61    }....    priva
caf0: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
cb00: 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53 74   ToHexadecimalSt
cb10: 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 62  ring(..        b
cb20: 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a 20 20 20  yte[] array..   
cb30: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
cb40: 20 20 20 20 20 20 20 69 66 20 28 61 72 72 61 79         if (array
cb50: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
cb60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
cb70: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ll;....        S
cb80: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
cb90: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
cba0: 42 75 69 6c 64 65 72 28 61 72 72 61 79 2e 4c 65  Builder(array.Le
cbb0: 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d 0a 20 20  ngth * 2);....  
cbc0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
cbd0: 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74 68 3b   = array.Length;
cbe0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20  ....        for 
cbf0: 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
cc00: 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20  index < length; 
cc10: 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
cc20: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
cc30: 65 6e 64 28 61 72 72 61 79 5b 69 6e 64 65 78 5d  end(array[index]
cc40: 2e 54 6f 53 74 72 69 6e 67 28 22 78 32 22 29 29  .ToString("x2"))
cc50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
cc60: 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72  urn result.ToStr
cc70: 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ing();..    }...
cc80: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
cc90: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
cca0: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
ccb0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
ccc0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65   int index, byte
ccd0: 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  [] value)..    {
cce0: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
ccf0: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
cd00: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
cd10: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
cd20: 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65  Message(HelperMe
cd30: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
cd40: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
cd50: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
cd60: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
cd70: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
cd80: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
cd90: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
cda0: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
cdb0: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
cdc0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
cdd0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
cde0: 64 65 78 2c 20 74 79 70 65 6f 66 28 42 79 74 65  dex, typeof(Byte
cdf0: 5b 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e  []), (value != n
ce00: 75 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64 65 63  ull) ? ToHexadec
ce10: 69 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c 75 65  imalString(value
ce20: 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d  ) : "<null>"));.
ce30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
ce40: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
ce50: 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65  void Bind_Double
ce60: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
ce70: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
ce80: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
ce90: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 64  gs, int index, d
cea0: 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20  ouble value)..  
ceb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
cec0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
ced0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
cee0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
cef0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 48 65  ..        if (He
cf00: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42  lperMethods.LogB
cf10: 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20  ind(flags))..   
cf20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cf30: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
cf40: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
cf50: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
cf60: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
cf70: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
cf80: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
cf90: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
cfa0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
cfb0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  .sqlite3_bind_do
cfc0: 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64  uble(handle, ind
cfd0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
cfe0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
cff0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
d000: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
d010: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
d020: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
d030: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
d040: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
d050: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d060: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
d070: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d080: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74  _bind_double_int
d090: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
d0a0: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
d0b0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
d0c0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
d0d0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
d0e0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
d0f0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
d100: 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ));..#else..    
d110: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
d120: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
d130: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
d140: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
d150: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
d160: 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 33 32   void Bind_Int32
d170: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
d180: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
d190: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
d1a0: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69  gs, int index, i
d1b0: 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  nt value)..    {
d1c0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d1d0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
d1e0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
d1f0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
d200: 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65         if (Helpe
d210: 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64  rMethods.LogBind
d220: 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  (flags))..      
d230: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d240: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
d250: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
d260: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
d270: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
d280: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
d290: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d2a0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68  lite3_bind_int(h
d2b0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
d2c0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
d2d0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
d2e0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
d2f0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
d300: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
d310: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
d320: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
d330: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
d340: 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74  ind_UInt32(SQLit
d350: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
d360: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d370: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
d380: 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61  t index, uint va
d390: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
d3a0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
d3b0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
d3c0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
d3d0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
d3e0: 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68    if (HelperMeth
d3f0: 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67  ods.LogBind(flag
d400: 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s))..        {..
d410: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
d420: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
d430: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
d440: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d450: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d460: 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69   n;....        i
d470: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
d480: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
d490: 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e  s.BindUInt32AsIn
d4a0: 74 36 34 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  t64) == SQLiteCo
d4b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69  nnectionFlags.Bi
d4c0: 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36 34 29  ndUInt32AsInt64)
d4d0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
d4e0: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61           long va
d4f0: 6c 75 65 32 20 3d 20 76 61 6c 75 65 3b 0d 0a 0d  lue2 = value;...
d500: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
d510: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
d520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
d530: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d540: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
d550: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
d560: 69 6e 64 65 78 2c 20 76 61 6c 75 65 32 29 3b 0d  index, value2);.
d570: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
d580: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
d590: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
d5a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d5b0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f  ite3_bind_int64_
d5c0: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
d5d0: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
d5e0: 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  2);..#else..    
d5f0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
d600: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
d610: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
d620: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
d630: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
d640: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d650: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
d660: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d670: 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28  lite3_bind_uint(
d680: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
d690: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
d6a0: 7d 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  }..        if (n
d6b0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
d6c0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
d6d0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
d6e0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
d6f0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
d700: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
d710: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
d720: 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74  Int64(SQLiteStat
d730: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
d740: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
d750: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
d760: 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d  ex, long value).
d770: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
d780: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
d790: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
d7a0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
d7b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
d7c0: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c  (HelperMethods.L
d7d0: 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a  ogBind(flags))..
d7e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d7f0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
d800: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
d810: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
d820: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
d830: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
d840: 52 4b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RK..        SQLi
d850: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
d860: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d870: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
d880: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
d890: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
d8a0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
d8b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
d8c0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
d8d0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
d8e0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
d8f0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
d900: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
d910: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
d920: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
d930: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d940: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
d950: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
d960: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
d970: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
d980: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
d990: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
d9a0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
d9b0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
d9c0: 28 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ());..#else..   
d9d0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
d9e0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
d9f0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
da00: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
da10: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
da20: 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74  e void Bind_UInt
da30: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
da40: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
da50: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
da60: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
da70: 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20   ulong value).. 
da80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
da90: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
daa0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
dab0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
dac0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 48  ...        if (H
dad0: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67  elperMethods.Log
dae0: 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20  Bind(flags))..  
daf0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
db00: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
db10: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
db20: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
db30: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
db40: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
db50: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
db60: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
db70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
db80: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
db90: 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e  int64(handle, in
dba0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
dbb0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
dbc0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
dbd0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
dbe0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
dbf0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
dc00: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
dc10: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
dc20: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
dc30: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
dc40: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
dc50: 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 5f 69 6e  3_bind_uint64_in
dc60: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
dc70: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
dc80: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
dc90: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
dca0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
dcb0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
dcc0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
dcd0: 28 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ());..#else..   
dce0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
dcf0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
dd00: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
dd10: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
dd20: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
dd30: 65 20 76 6f 69 64 20 42 69 6e 64 5f 42 6f 6f 6c  e void Bind_Bool
dd40: 65 61 6e 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ean(SQLiteStatem
dd50: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
dd60: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
dd70: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
dd80: 2c 20 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20  , bool value).. 
dd90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
dda0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
ddb0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
ddc0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
ddd0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 48  ...        if (H
dde0: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67  elperMethods.Log
ddf0: 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20  Bind(flags))..  
de00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
de10: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
de20: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
de30: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
de40: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76 61  ..        int va
de50: 6c 75 65 32 20 3d 20 76 61 6c 75 65 20 3f 20 31  lue2 = value ? 1
de60: 20 3a 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   : 0;....       
de70: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
de80: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
de90: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
dea0: 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65  _bind_int(handle
deb0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 32 29  , index, value2)
dec0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
ded0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
dee0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
def0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
df00: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
df10: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
df20: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
df30: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
df40: 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65  Text(SQLiteState
df50: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
df60: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
df70: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
df80: 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  x, string value)
df90: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
dfa0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
dfb0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
dfc0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
dfd0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  t;....        if
dfe0: 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e   (HelperMethods.
dff0: 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d  LogBind(flags)).
e000: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e010: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
e020: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
e030: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
e040: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74  }....        byt
e050: 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76  e[] b = ToUTF8(v
e060: 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alue);....      
e070: 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68    if (HelperMeth
e080: 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67  ods.LogBind(flag
e090: 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s))..        {..
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
e0b0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
e0c0: 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  x, b);..        
e0d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
e0e0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
e0f0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e100: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
e110: 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69  d_text(handle, i
e120: 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74  ndex, b, b.Lengt
e130: 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28  h - 1, (IntPtr)(
e140: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  -1));..        i
e150: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
e160: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
e170: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
e180: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
e190: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
e1a0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
e1b0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
e1c0: 69 6e 64 5f 44 61 74 65 54 69 6d 65 28 53 51 4c  ind_DateTime(SQL
e1d0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
e1e0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
e1f0: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
e200: 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54  int index, DateT
e210: 69 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a  ime dt)..    {..
e220: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
e230: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
e240: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
e250: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
e260: 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d       if (HelperM
e270: 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66  ethods.LogBind(f
e280: 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  lags))..        
e290: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
e2a0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
e2b0: 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20 20 20 20  ndex, dt);..    
e2c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
e2d0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
e2e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e2f0: 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69 6d 65  ags.BindDateTime
e300: 57 69 74 68 4b 69 6e 64 29 20 3d 3d 20 53 51 4c  WithKind) == SQL
e310: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
e320: 67 73 2e 42 69 6e 64 44 61 74 65 54 69 6d 65 57  gs.BindDateTimeW
e330: 69 74 68 4b 69 6e 64 29 0d 0a 20 20 20 20 20 20  ithKind)..      
e340: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e350: 20 69 66 20 28 28 5f 64 61 74 65 74 69 6d 65 4b   if ((_datetimeK
e360: 69 6e 64 20 21 3d 20 44 61 74 65 54 69 6d 65 4b  ind != DateTimeK
e370: 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64 29  ind.Unspecified)
e380: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
e390: 20 20 20 20 20 28 64 74 2e 4b 69 6e 64 20 21 3d       (dt.Kind !=
e3a0: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e   DateTimeKind.Un
e3b0: 73 70 65 63 69 66 69 65 64 29 20 26 26 0d 0a 20  specified) &&.. 
e3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
e3d0: 64 74 2e 4b 69 6e 64 20 21 3d 20 5f 64 61 74 65  dt.Kind != _date
e3e0: 74 69 6d 65 4b 69 6e 64 29 29 0d 0a 20 20 20 20  timeKind))..    
e3f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e400: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
e410: 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d 20  datetimeKind == 
e420: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 74 63  DateTimeKind.Utc
e430: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e440: 20 20 20 20 20 20 20 64 74 20 3d 20 64 74 2e 54         dt = dt.T
e450: 6f 55 6e 69 76 65 72 73 61 6c 54 69 6d 65 28 29  oUniversalTime()
e460: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e470: 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74     else if (_dat
e480: 65 74 69 6d 65 4b 69 6e 64 20 3d 3d 20 44 61 74  etimeKind == Dat
e490: 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f 63 61 6c 29  eTimeKind.Local)
e4a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e4b0: 20 20 20 20 20 20 64 74 20 3d 20 64 74 2e 54 6f        dt = dt.To
e4c0: 4c 6f 63 61 6c 54 69 6d 65 28 29 3b 0d 0a 20 20  LocalTime();..  
e4d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e4e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e4f0: 20 20 73 77 69 74 63 68 20 28 5f 64 61 74 65 74    switch (_datet
e500: 69 6d 65 46 6f 72 6d 61 74 29 0d 0a 20 20 20 20  imeFormat)..    
e510: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e520: 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61     case SQLiteDa
e530: 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73 3a  teFormats.Ticks:
e540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e550: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e560: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61           long va
e570: 6c 75 65 20 3d 20 64 74 2e 54 69 63 6b 73 3b 0d  lue = dt.Ticks;.
e580: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e590: 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65         if (Helpe
e5a0: 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64  rMethods.LogBind
e5b0: 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  (flags))..      
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
e5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e5e0: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
e5f0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
e600: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
e610: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
e620: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
e630: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
e640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e650: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
e660: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
e670: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e680: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
e690: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
e6a0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
e6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e6c0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
e6d0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
e6e0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e6f0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
e700: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
e710: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
e720: 61 6b 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ak;..#elif !SQLI
e730: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
e740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e750: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e760: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
e770: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
e780: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
e790: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
e7a0: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
e7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7c0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
e7d0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
e7e0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
e7f0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
e800: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
e810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e820: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 73      break;..#els
e830: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
e840: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
e850: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
e860: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
e870: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
e880: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e890: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
e8a0: 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61  ateFormats.Julia
e8b0: 6e 44 61 79 3a 0d 0a 20 20 20 20 20 20 20 20 20  nDay:..         
e8c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
e8e0: 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a  uble value = ToJ
e8f0: 75 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d  ulianDay(dt);...
e900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e910: 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d       if (HelperM
e920: 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66  ethods.LogBind(f
e930: 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  lags))..        
e940: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 4c 6f 67 42 69 6e 64 28 68         LogBind(h
e970: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
e980: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
e990: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e9a0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
e9b0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
e9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9d0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
e9e0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
e9f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
ea00: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28  te3_bind_double(
ea10: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
ea20: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ea40: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
ea50: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
ea60: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
ea70: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
ea80: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
eaa0: 6b 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  k;..#elif !SQLIT
eab0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
eac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ead0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
eae0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
eaf0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
eb00: 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  bind_double_inte
eb10: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
eb20: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
eb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb40: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
eb50: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
eb60: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
eb70: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
eb80: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
eb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eba0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 73      break;..#els
ebb0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
ebc0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
ebd0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
ebe0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
ebf0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
ec00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ec10: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
ec20: 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45  ateFormats.UnixE
ec30: 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20 20 20 20  poch:..         
ec40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
ec60: 6e 67 20 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65  ng value = Conve
ec70: 72 74 2e 54 6f 49 6e 74 36 34 28 64 74 2e 53 75  rt.ToInt64(dt.Su
ec80: 62 74 72 61 63 74 28 55 6e 69 78 45 70 6f 63 68  btract(UnixEpoch
ec90: 29 2e 54 6f 74 61 6c 53 65 63 6f 6e 64 73 29 3b  ).TotalSeconds);
eca0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ecb0: 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70          if (Help
ecc0: 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e  erMethods.LogBin
ecd0: 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20  d(flags))..     
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
ecf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ed00: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
ed10: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
ed20: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
ed30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
ed40: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
ed50: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
ed60: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K..             
ed70: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
ed80: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
ed90: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
eda0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
edb0: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
edc0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ede0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
edf0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
ee00: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
ee10: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
ee20: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
ee40: 65 61 6b 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  eak;..#elif !SQL
ee50: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee70: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
ee80: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
ee90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
eea0: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74  3_bind_int64_int
eeb0: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
eec0: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
eed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eee0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
eef0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
ef00: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
ef10: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
ef20: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
ef30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ef40: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c       break;..#el
ef50: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
ef60: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
ef70: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
ef80: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
ef90: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
efa0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
efb0: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20       default:.. 
efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
efd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
efe0: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
eff0: 20 54 6f 55 54 46 38 28 64 74 29 3b 0d 0a 0d 0a   ToUTF8(dt);....
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f010: 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65      if (HelperMe
f020: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
f030: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ags))..         
f040: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f060: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
f070: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b  ndle, index, b);
f080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f090: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
f0b0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
f0c0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
f0d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
f0e0: 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c  ind_text(handle,
f0f0: 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e   index, b, b.Len
f100: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
f110: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  )(-1));..       
f120: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f130: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
f140: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
f150: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
f160: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
f170: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
f180: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
f190: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
f1a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f1b0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
f1c0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
f1d0: 65 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62  e void Bind_Blob
f1e0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
f1f0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
f200: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
f210: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  gs, int index, b
f220: 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d  yte[] blobData).
f230: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
f240: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
f250: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
f260: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
f270: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
f280: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c  (HelperMethods.L
f290: 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a  ogBind(flags))..
f2a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f2b0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
f2c0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c  andle, index, bl
f2d0: 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20  obData);..      
f2e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
f2f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
f300: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
f310: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
f320: 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c  ind_blob(handle,
f330: 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61   index, blobData
f340: 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74  , blobData.Lengt
f350: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
f360: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
f370: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
f380: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
f390: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
f3a0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
f3b0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
f3c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
f3d0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
f3e0: 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65  Null(SQLiteState
f3f0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
f400: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
f410: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
f420: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
f430: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
f440: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
f450: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
f460: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
f470: 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
f480: 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29  s.LogBind(flags)
f490: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
f4a0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
f4b0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  d(handle, index)
f4c0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
f4d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
f4e0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
f4f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f500: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c  sqlite3_bind_nul
f510: 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  l(handle, index)
f520: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
f530: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
f540: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
f550: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
f560: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
f570: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
f580: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
f590: 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50  rride int Bind_P
f5a0: 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65  aramCount(SQLite
f5b0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
f5c0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f5d0: 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20  Flags flags)..  
f5e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
f5f0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
f600: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
f610: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
f620: 20 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c 75          int valu
f630: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
f640: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f650: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
f660: 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a 0d  ount(handle);...
f670: 0a 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c  .        if (Hel
f680: 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69  perMethods.LogBi
f690: 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20  nd(flags))..    
f6a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f6b0: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
f6c0: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
f6d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f6e0: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
f6f0: 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  sage(HelperMetho
f700: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
f710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f720: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
f730: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
f740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
f750: 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  Statement {0} pa
f760: 72 61 6d 74 65 72 20 63 6f 75 6e 74 20 69 73 20  ramter count is 
f770: 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
f780: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
f790: 74 50 74 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a  tPtr, value));..
f7a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
f7b0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
f7c0: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
f7d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
f7e0: 64 65 20 73 74 72 69 6e 67 20 42 69 6e 64 5f 50  de string Bind_P
f7f0: 61 72 61 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53  aramName(SQLiteS
f800: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
f810: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
f820: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
f830: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
f840: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
f850: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
f860: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
f870: 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20  te_stmt;..      
f880: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a    string name;..
f890: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
f8a0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
f8b0: 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  int len = 0;..  
f8c0: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46        name = UTF
f8d0: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
f8e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f8f0: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
f900: 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  eter_name_intero
f910: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
f920: 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   ref len), len);
f930: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
f940: 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74   name = UTF8ToSt
f950: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
f960: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f970: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
f980: 6e 61 6d 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64  name(handle, ind
f990: 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
f9a0: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  f....        if 
f9b0: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c  (HelperMethods.L
f9c0: 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a  ogBind(flags))..
f9d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f9e0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
f9f0: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
fa00: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
fa10: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
fa20: 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d  gMessage(HelperM
fa30: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
fa40: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
fa50: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
fa60: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
fa70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fa80: 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30     "Statement {0
fa90: 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20  } paramter #{1} 
faa0: 6e 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d 7d 2e  name is {{{2}}}.
fab0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
fac0: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
fad0: 2c 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29 29 3b  , index, name));
fae0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
faf0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61         return na
fb00: 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  me;..    }....  
fb10: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
fb20: 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72  ide int Bind_Par
fb30: 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74  amIndex(SQLiteSt
fb40: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
fb50: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
fb60: 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72 69 6e  ags flags, strin
fb70: 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20  g paramName)..  
fb80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
fb90: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
fba0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
fbb0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
fbc0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
fbd0: 78 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  x = UnsafeNative
fbe0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
fbf0: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
fc00: 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55  ndex(handle, ToU
fc10: 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b  TF8(paramName));
fc20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
fc30: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
fc40: 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20  gBind(flags)).. 
fc50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
fc60: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
fc70: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
fc80: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
fc90: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
fca0: 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65  Message(HelperMe
fcb0: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
fcc0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
fcd0: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
fce0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
fcf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd00: 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d    "Statement {0}
fd10: 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65 78 20   paramter index 
fd20: 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d 20  of name {{{1}}} 
fd30: 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20 20  is #{2}.",..    
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
fd50: 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61 6d 4e  leIntPtr, paramN
fd60: 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20  ame, index));.. 
fd70: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
fd80: 20 20 20 20 72 65 74 75 72 6e 20 69 6e 64 65 78      return index
fd90: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
fda0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
fdb0: 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e  e int ColumnCoun
fdc0: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
fdd0: 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a  t stmt)..    {..
fde0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
fdf0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
fe00: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
fe10: 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69  count(stmt._sqli
fe20: 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d  te_stmt);..    }
fe30: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
fe40: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
fe50: 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c 69   ColumnName(SQLi
fe60: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
fe70: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
fe80: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
fe90: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
fea0: 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
feb0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
fec0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
fed0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
fee0: 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  mn_name_interop(
fef0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
ff00: 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  t, index, ref le
ff10: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
ff20: 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73    IntPtr p = Uns
ff30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ff40: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
ff50: 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  name(stmt._sqlit
ff60: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
ff70: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
ff80: 66 20 28 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  f (p == IntPtr.Z
ff90: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 74 68  ero)..        th
ffa0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
ffb0: 63 65 70 74 69 6f 6e 28 53 51 4c 69 74 65 45 72  ception(SQLiteEr
ffc0: 72 6f 72 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 20 47  rorCode.NoMem, G
ffd0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
ffe0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
fff0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74  NDARD..      ret
10000 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
10010 28 70 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  (p, len);..#else
10020 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
10030 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 2d  TF8ToString(p, -
10040 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
10050 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
10060 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65  al override Type
10070 41 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41  Affinity ColumnA
10080 66 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74  ffinity(SQLiteSt
10090 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
100a0 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
100b0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
100c0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
100d0 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
100e0 5f 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _type(stmt._sqli
100f0 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
10100 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10110 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10120 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79   string ColumnTy
10130 70 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  pe(SQLiteStateme
10140 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
10150 65 78 2c 20 72 65 66 20 54 79 70 65 41 66 66 69  ex, ref TypeAffi
10160 6e 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d  nity nAffinity).
10170 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
10180 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53  int len;..#if !S
10190 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
101a0 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 30 3b          len = 0;
101b0 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
101c0 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
101d0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
101e0 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
101f0 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
10200 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
10210 78 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65  x, ref len);..#e
10220 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6c 65 6e  lse..        len
10230 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20   = -1;..        
10240 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
10250 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10260 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
10270 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c  cltype(stmt._sql
10280 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
10290 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
102a0 20 20 20 6e 41 66 66 69 6e 69 74 79 20 3d 20 43     nAffinity = C
102b0 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74  olumnAffinity(st
102c0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
102d0 20 20 20 20 20 20 20 69 66 20 28 28 70 20 21 3d         if ((p !=
102e0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 26 26   IntPtr.Zero) &&
102f0 20 28 28 6c 65 6e 20 3e 20 30 29 20 7c 7c 20 28   ((len > 0) || (
10300 6c 65 6e 20 3d 3d 20 2d 31 29 29 29 0d 0a 20 20  len == -1)))..  
10310 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10320 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 63 6c       string decl
10330 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72  Type = UTF8ToStr
10340 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a  ing(p, len);....
10350 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10360 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
10370 45 6d 70 74 79 28 64 65 63 6c 54 79 70 65 29 29  Empty(declType))
10380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10390 20 20 72 65 74 75 72 6e 20 64 65 63 6c 54 79 70    return declTyp
103a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
103b0 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b  .        string[
103c0 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65  ] ar = stmt.Type
103d0 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 0d 0a  Definitions;....
103e0 20 20 20 20 20 20 20 20 69 66 20 28 61 72 20 21          if (ar !
103f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10400 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10410 69 66 20 28 69 6e 64 65 78 20 3c 20 61 72 2e 4c  if (index < ar.L
10420 65 6e 67 74 68 20 26 26 20 61 72 5b 69 6e 64 65  ength && ar[inde
10430 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  x] != null)..   
10440 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
10450 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a  urn ar[index];..
10460 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
10470 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
10480 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 7d  ng.Empty;..    }
10490 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
104a0 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
104b0 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74 65  lumnIndex(SQLite
104c0 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
104d0 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d  string columnNam
104e0 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
104f0 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43   int x = ColumnC
10500 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20  ount(stmt);.... 
10510 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20       for (int n 
10520 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29  = 0; n < x; n++)
10530 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
10540 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
10550 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65  mpare(columnName
10560 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d  , ColumnName(stm
10570 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d  t, n), StringCom
10580 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
10590 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
105a0 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
105b0 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  rn n;..      }..
105c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b        return -1;
105d0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
105e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
105f0 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72   string ColumnOr
10600 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74  iginalName(SQLit
10610 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
10620 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
10630 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
10640 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
10650 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  int len = 0;..  
10660 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
10670 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
10680 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10690 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
106a0 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
106b0 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
106c0 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e  , index, ref len
106d0 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
106e0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
106f0 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
10700 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10710 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
10720 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  igin_name(stmt._
10730 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
10740 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ex), -1);..#endi
10750 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
10760 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10770 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44  e string ColumnD
10780 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c 69  atabaseName(SQLi
10790 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
107a0 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
107b0 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
107c0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
107d0 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
107e0 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
107f0 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
10800 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10810 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
10820 62 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  base_name_intero
10830 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
10840 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
10850 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
10860 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
10870 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
10880 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10890 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
108a0 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73  _database_name(s
108b0 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
108c0 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
108d0 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
108e0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
108f0 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
10900 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 53 51  lumnTableName(SQ
10910 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
10920 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
10930 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
10940 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
10950 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
10960 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
10970 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
10980 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10990 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
109a0 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ble_name_interop
109b0 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
109c0 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c  mt, index, ref l
109d0 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
109e0 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
109f0 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
10a00 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10a10 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
10a20 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2e  table_name(stmt.
10a30 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
10a40 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
10a50 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
10a60 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
10a70 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65  de void ColumnMe
10a80 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64 61  taData(string da
10a90 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20 74  taBase, string t
10aa0 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c  able, string col
10ab0 75 6d 6e 2c 20 72 65 66 20 73 74 72 69 6e 67 20  umn, ref string 
10ac0 64 61 74 61 54 79 70 65 2c 20 72 65 66 20 73 74  dataType, ref st
10ad0 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71 75  ring collateSequ
10ae0 65 6e 63 65 2c 20 72 65 66 20 62 6f 6f 6c 20 6e  ence, ref bool n
10af0 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62 6f 6f 6c  otNull, ref bool
10b00 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66   primaryKey, ref
10b10 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d   bool autoIncrem
10b20 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ent)..    {..   
10b30 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54 79     IntPtr dataTy
10b40 70 65 50 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a  pePtr = IntPtr.Z
10b50 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50  ero;..      IntP
10b60 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 20 3d 20  tr collSeqPtr = 
10b70 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
10b80 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c      int nnotNull
10b90 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74   = 0;..      int
10ba0 20 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 30   nprimaryKey = 0
10bb0 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61 75  ;..      int nau
10bc0 74 6f 49 6e 63 20 3d 20 30 3b 0d 0a 20 20 20 20  toInc = 0;..    
10bd0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
10be0 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  e n;..      int 
10bf0 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e  dtLen;..      in
10c00 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20  t csLen;....#if 
10c10 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
10c20 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20  ..      dtLen = 
10c30 30 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20  0;..      csLen 
10c40 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6e 20 3d 20  = 0;..      n = 
10c50 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10c60 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c  ods.sqlite3_tabl
10c70 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
10c80 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  a_interop(_sql, 
10c90 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29  ToUTF8(dataBase)
10ca0 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c  , ToUTF8(table),
10cb0 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c   ToUTF8(column),
10cc0 20 72 65 66 20 64 61 74 61 54 79 70 65 50 74 72   ref dataTypePtr
10cd0 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74 72  , ref collSeqPtr
10ce0 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20  , ref nnotNull, 
10cf0 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c  ref nprimaryKey,
10d00 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 2c 20 72   ref nautoInc, r
10d10 65 66 20 64 74 4c 65 6e 2c 20 72 65 66 20 63 73  ef dtLen, ref cs
10d20 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  Len);..#else..  
10d30 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d      dtLen = -1;.
10d40 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20 2d  .      csLen = -
10d50 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d 20  1;....      n = 
10d60 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10d70 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c  ods.sqlite3_tabl
10d80 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
10d90 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  a(_sql, ToUTF8(d
10da0 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38  ataBase), ToUTF8
10db0 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28  (table), ToUTF8(
10dc0 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61 74  column), ref dat
10dd0 61 54 79 70 65 50 74 72 2c 20 72 65 66 20 63 6f  aTypePtr, ref co
10de0 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e 6e  llSeqPtr, ref nn
10df0 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72 69  otNull, ref npri
10e00 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61 75  maryKey, ref nau
10e10 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66 0d  toInc);..#endif.
10e20 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
10e30 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
10e40 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
10e50 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
10e60 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
10e70 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74 61 54  ;....      dataT
10e80 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ype = UTF8ToStri
10e90 6e 67 28 64 61 74 61 54 79 70 65 50 74 72 2c 20  ng(dataTypePtr, 
10ea0 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 63  dtLen);..      c
10eb0 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 20 3d  ollateSequence =
10ec0 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f   UTF8ToString(co
10ed0 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c 65 6e 29  llSeqPtr, csLen)
10ee0 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74 4e 75  ;....      notNu
10ef0 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d  ll = (nnotNull =
10f00 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 70 72 69  = 1);..      pri
10f10 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70 72 69 6d  maryKey = (nprim
10f20 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a 20  aryKey == 1);.. 
10f30 20 20 20 20 20 61 75 74 6f 49 6e 63 72 65 6d 65       autoIncreme
10f40 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63 20 3d  nt = (nautoInc =
10f50 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  = 1);..    }....
10f60 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10f70 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74  rride object Get
10f80 4f 62 6a 65 63 74 28 53 51 4c 69 74 65 53 74 61  Object(SQLiteSta
10f90 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
10fa0 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
10fb0 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28          switch (
10fc0 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
10fd0 74 6d 74 2c 20 69 6e 64 65 78 29 29 0d 0a 20 20  tmt, index))..  
10fe0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10ff0 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
11000 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20  finity.Int64:.. 
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11030 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
11040 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
11050 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x);..           
11060 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11070 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
11080 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20  inity.Double:.. 
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
110a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
110b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
110c0 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64  Double(stmt, ind
110d0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
110e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
110f0 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
11100 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d 0a 20 20  finity.Text:..  
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11130 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54       return GetT
11140 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
11150 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11160 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11170 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
11180 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
11190 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
111a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111b0 20 20 6c 6f 6e 67 20 73 69 7a 65 20 3d 20 47 65    long size = Ge
111c0 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64  tBytes(stmt, ind
111d0 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20  ex, 0, null, 0, 
111e0 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  0);....         
111f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
11200 73 69 7a 65 20 3e 20 30 29 20 26 26 20 28 73 69  size > 0) && (si
11210 7a 65 20 3c 3d 20 69 6e 74 2e 4d 61 78 56 61 6c  ze <= int.MaxVal
11220 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
11230 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11250 20 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65       byte[] byte
11260 73 20 3d 20 6e 65 77 20 62 79 74 65 5b 28 69 6e  s = new byte[(in
11270 74 29 73 69 7a 65 5d 3b 0d 0a 0d 0a 20 20 20 20  t)size];....    
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11290 20 20 20 20 47 65 74 42 79 74 65 73 28 73 74 6d      GetBytes(stm
112a0 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 79 74  t, index, 0, byt
112b0 65 73 2c 20 30 2c 20 28 69 6e 74 29 73 69 7a 65  es, 0, (int)size
112c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
112d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
112e0 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 20 20 20  turn bytes;..   
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11300 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11310 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11330 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
11340 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
11350 2e 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20 20  .Null:..        
11360 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11380 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c  eturn DBNull.Val
11390 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
113a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
113b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 68 72  }....        thr
113c0 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
113d0 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
113e0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
113f0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
11400 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62  e double GetDoub
11410 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  le(SQLiteStateme
11420 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
11430 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
11440 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
11450 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
11460 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
11470 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11480 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
11490 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  le(stmt._sqlite_
114a0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
114b0 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
114c0 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 64 6f 75  NDARD..      dou
114d0 62 6c 65 20 76 61 6c 75 65 20 3d 20 30 2e 30 3b  ble value = 0.0;
114e0 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
114f0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11500 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
11510 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
11520 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
11530 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
11540 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
11550 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  lue;..#else..   
11560 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
11570 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
11580 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
11590 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
115a0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
115b0 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61 6e 28  bool GetBoolean(
115c0 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
115d0 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
115e0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
115f0 65 74 75 72 6e 20 54 6f 42 6f 6f 6c 65 61 6e 28  eturn ToBoolean(
11600 47 65 74 4f 62 6a 65 63 74 28 73 74 6d 74 2c 20  GetObject(stmt, 
11610 69 6e 64 65 78 29 2c 20 43 75 6c 74 75 72 65 49  index), CultureI
11620 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
11630 74 75 72 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20  ture, false);.. 
11640 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
11650 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 62  rnal override sb
11660 79 74 65 20 47 65 74 53 42 79 74 65 28 53 51 4c  yte GetSByte(SQL
11670 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
11680 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
11690 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
116a0 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 73 62  rn unchecked((sb
116b0 79 74 65 29 28 47 65 74 49 6e 74 33 32 28 73 74  yte)(GetInt32(st
116c0 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 62 79 74  mt, index) & byt
116d0 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20  e.MaxValue));.. 
116e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
116f0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 79  rnal override by
11700 74 65 20 47 65 74 42 79 74 65 28 53 51 4c 69 74  te GetByte(SQLit
11710 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
11720 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
11730 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
11740 20 75 6e 63 68 65 63 6b 65 64 28 28 62 79 74 65   unchecked((byte
11750 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
11760 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d   index) & byte.M
11770 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
11780 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
11790 6c 20 6f 76 65 72 72 69 64 65 20 73 68 6f 72 74  l override short
117a0 20 47 65 74 49 6e 74 31 36 28 53 51 4c 69 74 65   GetInt16(SQLite
117b0 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
117c0 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
117d0 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
117e0 75 6e 63 68 65 63 6b 65 64 28 28 73 68 6f 72 74  unchecked((short
117f0 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
11800 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74   index) & ushort
11810 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20  .MaxValue));..  
11820 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
11830 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 73 68  nal override ush
11840 6f 72 74 20 47 65 74 55 49 6e 74 31 36 28 53 51  ort GetUInt16(SQ
11850 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
11860 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
11870 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
11880 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75  urn unchecked((u
11890 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32 28  short)(GetInt32(
118a0 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 75  stmt, index) & u
118b0 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29 29  short.MaxValue))
118c0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
118d0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
118e0 65 20 69 6e 74 20 47 65 74 49 6e 74 33 32 28 53  e int GetInt32(S
118f0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
11900 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
11910 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
11920 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
11930 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11940 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74  _column_int(stmt
11950 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
11960 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ndex);..    }...
11970 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11980 65 72 72 69 64 65 20 75 69 6e 74 20 47 65 74 55  erride uint GetU
11990 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
119a0 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
119b0 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
119c0 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
119d0 65 63 6b 65 64 28 28 75 69 6e 74 29 47 65 74 49  ecked((uint)GetI
119e0 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
119f0 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
11a00 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11a10 69 64 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36  ide long GetInt6
11a20 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  4(SQLiteStatemen
11a30 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
11a40 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
11a50 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
11a60 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
11a70 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
11a80 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11a90 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  te3_column_int64
11aa0 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
11ab0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c  mt, index);..#el
11ac0 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
11ad0 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20  ARD..      long 
11ae0 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20 20  value = 0;..    
11af0 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
11b00 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
11b10 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72  lumn_int64_inter
11b20 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
11b30 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
11b40 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
11b50 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23  return value;..#
11b60 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
11b70 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
11b80 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
11b90 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
11ba0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11bb0 6f 76 65 72 72 69 64 65 20 75 6c 6f 6e 67 20 47  override ulong G
11bc0 65 74 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53  etUInt64(SQLiteS
11bd0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
11be0 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
11bf0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
11c00 6e 63 68 65 63 6b 65 64 28 28 75 6c 6f 6e 67 29  nchecked((ulong)
11c10 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
11c20 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ndex));..    }..
11c30 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11c40 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
11c50 65 74 54 65 78 74 28 53 51 4c 69 74 65 53 74 61  etText(SQLiteSta
11c60 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
11c70 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
11c80 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
11c90 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
11ca0 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
11cb0 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
11cc0 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
11cd0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11ce0 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65  column_text_inte
11cf0 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
11d00 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65  _stmt, index, re
11d10 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  f len), len);..#
11d20 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
11d30 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
11d40 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
11d50 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
11d60 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71  mn_text(stmt._sq
11d70 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
11d80 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61  ),..        Unsa
11d90 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
11da0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
11db0 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74  ytes(stmt._sqlit
11dc0 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  e_stmt, index));
11dd0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
11de0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11df0 6f 76 65 72 72 69 64 65 20 44 61 74 65 54 69 6d  override DateTim
11e00 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 53 51  e GetDateTime(SQ
11e10 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
11e20 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
11e30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20      {..      if 
11e40 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74  (_datetimeFormat
11e50 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f   == SQLiteDateFo
11e60 72 6d 61 74 73 2e 54 69 63 6b 73 29 0d 0a 20 20  rmats.Ticks)..  
11e70 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 69 63        return Tic
11e80 6b 73 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74  ksToDateTime(Get
11e90 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
11ea0 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e  x), _datetimeKin
11eb0 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20  d);..      else 
11ec0 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72  if (_datetimeFor
11ed0 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74  mat == SQLiteDat
11ee0 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44  eFormats.JulianD
11ef0 61 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ay)..        ret
11f00 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47  urn ToDateTime(G
11f10 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69  etDouble(stmt, i
11f20 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65  ndex), _datetime
11f30 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  Kind);..      el
11f40 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65  se if (_datetime
11f50 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65  Format == SQLite
11f60 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78  DateFormats.Unix
11f70 45 70 6f 63 68 29 0d 0a 20 20 20 20 20 20 20 20  Epoch)..        
11f80 72 65 74 75 72 6e 20 55 6e 69 78 45 70 6f 63 68  return UnixEpoch
11f90 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49 6e  ToDateTime(GetIn
11fa0 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
11fb0 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29  , _datetimeKind)
11fc0 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
11fd0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
11fe0 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
11ff0 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
12000 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74  teTime(UnsafeNat
12010 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
12020 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69  e3_column_text_i
12030 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
12040 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
12050 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   ref len), len);
12060 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
12070 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
12080 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
12090 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
120a0 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73  umn_text(stmt._s
120b0 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
120c0 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  x),..        Uns
120d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
120e0 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
120f0 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69  bytes(stmt._sqli
12100 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  te_stmt, index))
12110 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
12120 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12130 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
12140 65 74 42 79 74 65 73 28 53 51 4c 69 74 65 53 74  etBytes(SQLiteSt
12150 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
12160 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61  t index, int nDa
12170 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d  taOffset, byte[]
12180 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
12190 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
121a0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
121b0 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65  nt nlen = Unsafe
121c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
121d0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
121e0 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  es(stmt._sqlite_
121f0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
12200 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20  .      // If no 
12210 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66  destination buff
12220 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73  er, return the s
12230 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20  ize needed...   
12240 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20     if (bDest == 
12250 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65  null) return nle
12260 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20  n;....      int 
12270 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74  nCopied = nLengt
12280 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  h;....      if (
12290 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74  nCopied + nStart
122a0 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29   > bDest.Length)
122b0 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74   nCopied = bDest
122c0 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74  .Length - nStart
122d0 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ;..      if (nCo
122e0 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73  pied + nDataOffs
122f0 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69  et > nlen) nCopi
12300 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74  ed = nlen - nDat
12310 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20  aOffset;....    
12320 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20    if (nCopied > 
12330 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  0)..      {..   
12340 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20       IntPtr ptr 
12350 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
12360 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
12370 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f  lumn_blob(stmt._
12380 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
12390 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ex);....        
123a0 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e  Marshal.Copy((In
123b0 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36  tPtr)(ptr.ToInt6
123c0 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  4() + nDataOffse
123d0 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72  t), bDest, nStar
123e0 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20  t, nCopied);..  
123f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73      }..      els
12400 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  e..      {..    
12410 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b      nCopied = 0;
12420 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
12430 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65     return nCopie
12440 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  d;..    }....   
12450 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
12460 64 65 20 63 68 61 72 20 47 65 74 43 68 61 72 28  de char GetChar(
12470 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
12480 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
12490 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
124a0 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f  eturn Convert.To
124b0 43 68 61 72 28 47 65 74 55 49 6e 74 31 36 28 73  Char(GetUInt16(s
124c0 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20  tmt, index));.. 
124d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
124e0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
124f0 6e 67 20 47 65 74 43 68 61 72 73 28 53 51 4c 69  ng GetChars(SQLi
12500 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
12510 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
12520 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63 68   nDataOffset, ch
12530 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  ar[] bDest, int 
12540 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
12550 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
12560 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20     int nlen;..  
12570 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20      int nCopied 
12580 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  = nLength;....  
12590 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d      string str =
125a0 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
125b0 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c  ndex);..      nl
125c0 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b  en = str.Length;
125d0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44  ....      if (bD
125e0 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74  est == null) ret
125f0 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20  urn nlen;....   
12600 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
12610 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e   nStart > bDest.
12620 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20  Length) nCopied 
12630 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d  = bDest.Length -
12640 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20   nStart;..      
12650 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44  if (nCopied + nD
12660 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e  ataOffset > nlen
12670 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e  ) nCopied = nlen
12680 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d   - nDataOffset;.
12690 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
126a0 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20  pied > 0)..     
126b0 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44     str.CopyTo(nD
126c0 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73 74  ataOffset, bDest
126d0 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65  , nStart, nCopie
126e0 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20  d);..      else 
126f0 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a  nCopied = 0;....
12700 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
12710 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
12720 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12730 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c  rride bool IsNul
12740 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  l(SQLiteStatemen
12750 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
12760 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
12770 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41   return (ColumnA
12780 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e  ffinity(stmt, in
12790 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66 69  dex) == TypeAffi
127a0 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20  nity.Null);..   
127b0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
127c0 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
127d0 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49  AggregateCount(I
127e0 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a  ntPtr context)..
127f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
12800 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
12810 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12820 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28  aggregate_count(
12830 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d  context);..    }
12840 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12850 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
12860 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65  ErrorCode Create
12870 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20  Function(string 
12880 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74  strFunction, int
12890 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65   nArgs, bool nee
128a0 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65  dCollSeq, SQLite
128b0 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53  Callback func, S
128c0 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75  QLiteCallback fu
128d0 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69  ncstep, SQLiteFi
128e0 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  nalCallback func
128f0 66 69 6e 61 6c 2c 20 62 6f 6f 6c 20 63 61 6e 54  final, bool canT
12900 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  hrow)..    {..  
12910 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
12920 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
12930 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
12940 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
12950 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12960 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
12970 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73  ction_interop(_s
12980 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75  ql, ToUTF8(strFu
12990 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20  nction), nArgs, 
129a0 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  4, IntPtr.Zero, 
129b0 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20  func, funcstep, 
129c0 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64  funcfinal, (need
129d0 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29  CollSeq == true)
129e0 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20   ? 1 : 0);..    
129f0 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
12a00 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e  eErrorCode.Ok) n
12a10 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
12a20 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
12a30 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69  reate_function_i
12a40 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
12a50 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
12a60 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50  , nArgs, 1, IntP
12a70 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
12a80 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
12a90 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71  al, (needCollSeq
12aa0 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20   == true) ? 1 : 
12ab0 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  0);..#else..    
12ac0 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
12ad0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12ae0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
12af0 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
12b00 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72  trFunction), nAr
12b10 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65  gs, 4, IntPtr.Ze
12b20 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74  ro, func, funcst
12b30 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d  ep, funcfinal);.
12b40 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20  .      if (n == 
12b50 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
12b60 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  Ok) n = UnsafeNa
12b70 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12b80 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
12b90 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
12ba0 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
12bb0 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e  Args, 1, IntPtr.
12bc0 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
12bd0 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29  step, funcfinal)
12be0 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
12bf0 20 69 66 20 28 63 61 6e 54 68 72 6f 77 20 26 26   if (canThrow &&
12c00 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
12c10 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72 6f  orCode.Ok)) thro
12c20 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
12c30 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
12c40 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
12c50 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20   return n;..    
12c60 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12c70 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
12c80 65 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74  eErrorCode Creat
12c90 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e  eCollation(strin
12ca0 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20  g strCollation, 
12cb0 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20  SQLiteCollation 
12cc0 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c  func, SQLiteColl
12cd0 61 74 69 6f 6e 20 66 75 6e 63 31 36 2c 20 62 6f  ation func16, bo
12ce0 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20  ol canThrow)..  
12cf0 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
12d00 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
12d10 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12d20 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
12d30 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c  e_collation(_sql
12d40 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c  , ToUTF8(strColl
12d50 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74  ation), 2, IntPt
12d60 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b  r.Zero, func16);
12d70 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
12d80 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12d90 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e  .Ok) n = UnsafeN
12da0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12db0 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
12dc0 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54  ation(_sql, ToUT
12dd0 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29  F8(strCollation)
12de0 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
12df0 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20  , func);..      
12e00 69 66 20 28 63 61 6e 54 68 72 6f 77 20 26 26 20  if (canThrow && 
12e10 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
12e20 72 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72 6f 77  rCode.Ok)) throw
12e30 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
12e40 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
12e50 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
12e60 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d  return n;..    }
12e70 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12e80 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
12e90 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70  ntextCollateComp
12ea0 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  are(CollationEnc
12eb0 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49  odingEnum enc, I
12ec0 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
12ed0 74 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67  tring s1, string
12ee0 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66   s2)..    {..#if
12ef0 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
12f00 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  D..      byte[] 
12f10 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  b1;..      byte[
12f20 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73  ] b2;..      Sys
12f30 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
12f40 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75  g converter = nu
12f50 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69  ll;....      swi
12f60 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20  tch (enc)..     
12f70 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65   {..        case
12f80 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
12f90 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20  ngEnum.UTF8:..  
12fa0 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
12fb0 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
12fc0 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a  Encoding.UTF8;..
12fd0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
12fe0 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
12ff0 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
13000 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20  Enum.UTF16LE:.. 
13010 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
13020 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
13030 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64  .Encoding.Unicod
13040 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
13050 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
13060 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
13070 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45  dingEnum.UTF16BE
13080 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
13090 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
130a0 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69  Text.Encoding.Bi
130b0 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d  gEndianUnicode;.
130c0 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
130d0 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
130e0 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74      b1 = convert
130f0 65 72 2e 47 65 74 42 79 74 65 73 28 73 31 29 3b  er.GetBytes(s1);
13100 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e  ..      b2 = con
13110 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
13120 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  s2);....      re
13130 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
13140 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13150 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d  _context_collcom
13160 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  pare_interop(con
13170 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e  text, b1, b1.Len
13180 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67  gth, b2, b2.Leng
13190 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  th);..#else..   
131a0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
131b0 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
131c0 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
131d0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
131e0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
131f0 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
13200 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
13210 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
13220 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
13230 65 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20  ext, char[] c1, 
13240 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20  char[] c2)..    
13250 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
13260 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62  TANDARD..      b
13270 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20  yte[] b1;..     
13280 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20   byte[] b2;..   
13290 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45     System.Text.E
132a0 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65  ncoding converte
132b0 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
132c0 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d     switch (enc).
132d0 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
132e0 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
132f0 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
13300 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  8:..          co
13310 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
13320 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
13330 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8;..          
13340 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
13350 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
13360 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
13370 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  LE:..          c
13380 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
13390 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
133a0 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
133b0 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
133c0 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
133d0 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
133e0 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20  TF16BE:..       
133f0 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
13400 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
13410 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69  ing.BigEndianUni
13420 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
13430 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
13440 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63  ....      b1 = c
13450 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
13460 73 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32  s(c1);..      b2
13470 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
13480 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20  Bytes(c2);....  
13490 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
134a0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
134b0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
134c0 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72  ollcompare_inter
134d0 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20  op(context, b1, 
134e0 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62  b1.Length, b2, b
134f0 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73  2.Length);..#els
13500 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
13510 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
13520 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
13530 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
13540 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
13550 72 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53  rride CollationS
13560 65 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61  equence GetColla
13570 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c  tionSequence(SQL
13580 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63  iteFunction func
13590 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
135a0 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
135b0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
135c0 20 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53        CollationS
135d0 65 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e 65  equence seq = ne
135e0 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  w CollationSeque
135f0 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e  nce();..      in
13600 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  t len = 0;..    
13610 20 20 69 6e 74 20 74 79 70 65 20 3d 20 30 3b 0d    int type = 0;.
13620 0a 20 20 20 20 20 20 69 6e 74 20 65 6e 63 20 3d  .      int enc =
13630 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74   0;..      IntPt
13640 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
13650 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13660 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73 65  3_context_collse
13670 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  q_interop(contex
13680 74 2c 20 72 65 66 20 74 79 70 65 2c 20 72 65 66  t, ref type, ref
13690 20 65 6e 63 2c 20 72 65 66 20 6c 65 6e 29 3b 0d   enc, ref len);.
136a0 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21  ...      if (p !
136b0 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65  = null) seq.Name
136c0 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
136d0 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20  p, len);..      
136e0 73 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c  seq.Type = (Coll
136f0 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79  ationTypeEnum)ty
13700 70 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f  pe;..      seq._
13710 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20  func = func;..  
13720 20 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67      seq.Encoding
13730 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63   = (CollationEnc
13740 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a  odingEnum)enc;..
13750 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73  ..      return s
13760 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  eq;..#else..    
13770 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
13780 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
13790 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
137a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
137b0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
137c0 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ong GetParamValu
137d0 65 42 79 74 65 73 28 49 6e 74 50 74 72 20 70 2c  eBytes(IntPtr p,
137e0 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74   int nDataOffset
137f0 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20  , byte[] bDest, 
13800 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
13810 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d  nLength)..    {.
13820 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20  .      int nlen 
13830 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
13840 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
13850 6c 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d  lue_bytes(p);...
13860 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20  .      // If no 
13870 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66  destination buff
13880 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73  er, return the s
13890 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20  ize needed...   
138a0 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20     if (bDest == 
138b0 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65  null) return nle
138c0 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20  n;....      int 
138d0 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74  nCopied = nLengt
138e0 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  h;....      if (
138f0 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74  nCopied + nStart
13900 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29   > bDest.Length)
13910 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74   nCopied = bDest
13920 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74  .Length - nStart
13930 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ;..      if (nCo
13940 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73  pied + nDataOffs
13950 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69  et > nlen) nCopi
13960 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74  ed = nlen - nDat
13970 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20  aOffset;....    
13980 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20    if (nCopied > 
13990 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  0)..      {..   
139a0 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20       IntPtr ptr 
139b0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
139c0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
139d0 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a  lue_blob(p);....
139e0 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
139f0 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74  Copy((IntPtr)(pt
13a00 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44  r.ToInt64() + nD
13a10 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73  ataOffset), bDes
13a20 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
13a30 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ed);..      }.. 
13a40 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
13a50 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70   {..        nCop
13a60 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ied = 0;..      
13a70 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
13a80 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20  n nCopied;..    
13a90 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13aa0 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c  l override doubl
13ab0 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44  e GetParamValueD
13ac0 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72  ouble(IntPtr ptr
13ad0 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
13ae0 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
13af0 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
13b00 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
13b10 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13b20 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28  e3_value_double(
13b30 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  ptr);..#elif !SQ
13b40 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
13b50 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
13b60 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20  e = 0.0;..      
13b70 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13b80 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
13b90 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  e_double_interop
13ba0 28 70 74 72 2c 20 72 65 66 20 76 61 6c 75 65 29  (ptr, ref value)
13bb0 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
13bc0 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20  value;..#else.. 
13bd0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
13be0 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
13bf0 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
13c00 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
13c10 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
13c20 65 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56 61  e int GetParamVa
13c30 6c 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72 20  lueInt32(IntPtr 
13c40 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
13c50 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
13c60 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13c70 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28  lite3_value_int(
13c80 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ptr);..    }....
13c90 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
13ca0 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61  rride long GetPa
13cb0 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e  ramValueInt64(In
13cc0 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
13cd0 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
13ce0 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
13cf0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
13d00 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
13d10 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
13d20 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23 65  _int64(ptr);..#e
13d30 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
13d40 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 36  DARD..      Int6
13d50 34 20 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20 20  4 value = 0;..  
13d60 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
13d70 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13d80 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65  value_int64_inte
13d90 72 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61 6c  rop(ptr, ref val
13da0 75 65 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  ue);..      retu
13db0 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65  rn value;..#else
13dc0 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
13dd0 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
13de0 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
13df0 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
13e00 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13e10 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 50  ride string GetP
13e20 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e  aramValueText(In
13e30 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
13e40 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
13e50 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
13e60 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  t len = 0;..    
13e70 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
13e80 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
13e90 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13ea0 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74  3_value_text_int
13eb0 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20 6c 65  erop(ptr, ref le
13ec0 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
13ed0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
13ee0 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
13ef0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13f00 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
13f10 78 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20 20  xt(ptr),..      
13f20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
13f30 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
13f40 6c 75 65 5f 62 79 74 65 73 28 70 74 72 29 29 3b  lue_bytes(ptr));
13f50 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
13f60 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
13f70 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66  override TypeAff
13f80 69 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56 61  inity GetParamVa
13f90 6c 75 65 54 79 70 65 28 49 6e 74 50 74 72 20 70  lueType(IntPtr p
13fa0 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  tr)..    {..    
13fb0 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
13fc0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13fd0 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
13fe0 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ptr);..    }....
13ff0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14000 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
14010 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e  nBlob(IntPtr con
14020 74 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c  text, byte[] val
14030 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
14040 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
14050 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
14060 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78  sult_blob(contex
14070 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e  t, value, value.
14080 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29  Length, (IntPtr)
14090 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (-1));..    }...
140a0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
140b0 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
140c0 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20  rnDouble(IntPtr 
140d0 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65 20  context, double 
140e0 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  value)..    {..#
140f0 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
14100 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
14110 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
14120 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
14130 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63  _result_double(c
14140 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
14150 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
14160 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55  TANDARD..      U
14170 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14180 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
14190 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  t_double_interop
141a0 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61  (context, ref va
141b0 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
141c0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
141d0 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
141e0 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
141f0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
14200 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
14210 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f   void ReturnErro
14220 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  r(IntPtr context
14230 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d  , string value).
14240 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
14250 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
14260 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
14270 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20  _error(context, 
14280 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76  ToUTF8(value), v
14290 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20  alue.Length);.. 
142a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
142b0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
142c0 69 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49  id ReturnInt32(I
142d0 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69  ntPtr context, i
142e0 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  nt value)..    {
142f0 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
14300 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
14310 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63  te3_result_int(c
14320 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
14330 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
14340 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
14350 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34  void ReturnInt64
14360 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
14370 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20   long value)..  
14380 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
14390 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
143a0 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ORK..      Unsaf
143b0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
143c0 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
143d0 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  t64(context, val
143e0 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
143f0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
14400 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
14410 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14420 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74  result_int64_int
14430 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65  erop(context, re
14440 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  f value);..#else
14450 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
14460 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
14470 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
14480 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
14490 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
144a0 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
144b0 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74  Null(IntPtr cont
144c0 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ext)..    {..   
144d0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
144e0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
144f0 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65  esult_null(conte
14500 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  xt);..    }.... 
14510 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
14520 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
14530 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  Text(IntPtr cont
14540 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  ext, string valu
14550 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
14560 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
14570 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  F8(value);..    
14580 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
14590 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
145a0 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78  sult_text(contex
145b0 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29  t, ToUTF8(value)
145c0 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
145d0 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
145e0 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54      }....#if INT
145f0 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
14600 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  LE..    /// <sum
14610 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
14620 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 66 69  etermines the fi
14630 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e  le name of the n
14640 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 63 6f  ative library co
14650 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6e 61 74  ntaining the nat
14660 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 22 76 74  ive..    /// "vt
14670 73 68 69 6d 22 20 65 78 74 65 6e 73 69 6f 6e 20  shim" extension 
14680 2d 41 4e 44 2d 20 77 68 65 74 68 65 72 20 69 74  -AND- whether it
14690 20 73 68 6f 75 6c 64 20 62 65 20 64 79 6e 61 6d   should be dynam
146a0 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20 62 79  ically loaded by
146b0 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 63  ..    /// this c
146c0 6c 61 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  lass...    /// <
146d0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
146e0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
146f0 69 73 4c 6f 61 64 4e 65 65 64 65 64 22 3e 0d 0a  isLoadNeeded">..
14700 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6f 75 74      /// This out
14710 70 75 74 20 70 61 72 61 6d 65 74 65 72 20 77 69  put parameter wi
14720 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 6e 6f 6e  ll be set to non
14730 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 72 65 74  -zero if the ret
14740 75 72 6e 65 64 20 6e 61 74 69 76 65 0d 0a 20 20  urned native..  
14750 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 20 66 69    /// library fi
14760 6c 65 20 6e 61 6d 65 20 73 68 6f 75 6c 64 20 62  le name should b
14770 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 6c 6f  e dynamically lo
14780 61 64 65 64 20 70 72 69 6f 72 20 74 6f 20 61 74  aded prior to at
14790 74 65 6d 70 74 69 6e 67 0d 0a 20 20 20 20 2f 2f  tempting..    //
147a0 2f 20 74 68 65 20 63 72 65 61 74 69 6f 6e 20 6f  / the creation o
147b0 66 20 6e 61 74 69 76 65 20 64 69 73 70 6f 73 61  f native disposa
147c0 62 6c 65 20 65 78 74 65 6e 73 69 6f 6e 20 6d 6f  ble extension mo
147d0 64 75 6c 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  dules...    /// 
147e0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
147f0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
14800 20 2f 2f 2f 20 54 68 65 20 66 69 6c 65 20 6e 61   /// The file na
14810 6d 65 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65  me of the native
14820 20 6c 69 62 72 61 72 79 20 63 6f 6e 74 61 69 6e   library contain
14830 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 22  ing the native "
14840 76 74 73 68 69 6d 22 0d 0a 20 20 20 20 2f 2f 2f  vtshim"..    ///
14850 20 65 78 74 65 6e 73 69 6f 6e 20 2d 4f 52 2d 20   extension -OR- 
14860 6e 75 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f  null if it canno
14870 74 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64 2e  t be determined.
14880 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
14890 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  rns>..    privat
148a0 65 20 73 74 72 69 6e 67 20 47 65 74 53 68 69 6d  e string GetShim
148b0 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61 6d  ExtensionFileNam
148c0 65 28 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  e(..        ref 
148d0 62 6f 6f 6c 20 69 73 4c 6f 61 64 4e 65 65 64 65  bool isLoadNeede
148e0 64 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20  d /* out */..   
148f0 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
14900 20 20 20 20 20 20 20 69 66 20 28 5f 73 68 69 6d         if (_shim
14910 49 73 4c 6f 61 64 4e 65 65 64 65 64 20 21 3d 20  IsLoadNeeded != 
14920 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
14930 20 20 20 69 73 4c 6f 61 64 4e 65 65 64 65 64 20     isLoadNeeded 
14940 3d 20 28 62 6f 6f 6c 29 5f 73 68 69 6d 49 73 4c  = (bool)_shimIsL
14950 6f 61 64 4e 65 65 64 65 64 3b 0d 0a 20 20 20 20  oadNeeded;..    
14960 20 20 20 20 65 6c 73 65 0d 0a 23 69 66 20 53 51      else..#if SQ
14970 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 7c 7c  LITE_STANDARD ||
14980 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c   USE_INTEROP_DLL
14990 20 7c 7c 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d   || PLATFORM_COM
149a0 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
149b0 20 20 20 20 20 20 20 20 20 20 20 69 73 4c 6f 61             isLoa
149c0 64 4e 65 65 64 65 64 20 3d 20 48 65 6c 70 65 72  dNeeded = Helper
149d0 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e 64 6f 77  Methods.IsWindow
149e0 73 28 29 3b 20 2f 2a 20 43 4f 4d 50 41 54 20 2a  s(); /* COMPAT *
149f0 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  /..#else..      
14a00 20 20 20 20 20 20 69 73 4c 6f 61 64 4e 65 65 64        isLoadNeed
14a10 65 64 20 3d 20 66 61 6c 73 65 3b 20 2f 2a 20 6d  ed = false; /* m
14a20 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
14a30 6c 79 20 2a 2f 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ly */..#endif...
14a40 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
14a50 66 69 6c 65 4e 61 6d 65 20 3d 20 5f 73 68 69 6d  fileName = _shim
14a60 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61 6d  ExtensionFileNam
14a70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
14a80 20 28 66 69 6c 65 4e 61 6d 65 20 21 3d 20 6e 75   (fileName != nu
14a90 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14aa0 20 72 65 74 75 72 6e 20 66 69 6c 65 4e 61 6d 65   return fileName
14ab0 3b 0d 0a 0d 0a 23 69 66 20 28 53 51 4c 49 54 45  ;....#if (SQLITE
14ac0 5f 53 54 41 4e 44 41 52 44 20 7c 7c 20 55 53 45  _STANDARD || USE
14ad0 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 7c 7c 20  _INTEROP_DLL || 
14ae0 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
14af0 46 52 41 4d 45 57 4f 52 4b 29 20 26 26 20 50 52  FRAMEWORK) && PR
14b00 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42  ELOAD_NATIVE_LIB
14b10 52 41 52 59 0d 0a 20 20 20 20 20 20 20 20 72 65  RARY..        re
14b20 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
14b30 65 4d 65 74 68 6f 64 73 2e 47 65 74 4e 61 74 69  eMethods.GetNati
14b40 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d  veLibraryFileNam
14b50 65 4f 6e 6c 79 28 29 3b 20 2f 2a 20 43 4f 4d 50  eOnly(); /* COMP
14b60 41 54 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20  AT */..#else..  
14b70 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
14b80 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l;..#endif..    
14b90 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
14ba0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
14bb0 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65  Calls the native
14bc0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
14bd0 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  rary in order to
14be0 20 63 72 65 61 74 65 20 61 20 64 69 73 70 6f 73   create a dispos
14bf0 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f  able..    /// mo
14c00 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  dule containing 
14c10 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
14c20 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  on of a virtual 
14c30 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  table...    /// 
14c40 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
14c50 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
14c60 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f  "module">..    /
14c70 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62  // The module ob
14c80 6a 65 63 74 20 74 6f 20 62 65 20 75 73 65 64 20  ject to be used 
14c90 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68  when creating th
14ca0 65 20 6e 61 74 69 76 65 20 64 69 73 70 6f 73 61  e native disposa
14cb0 62 6c 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20  ble module...   
14cc0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
14cd0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
14ce0 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20  me="flags">..   
14cf0 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66   /// The flags f
14d00 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  or the associate
14d10 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  d <see cref="SQL
14d20 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f  iteConnection" /
14d30 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
14d40 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
14d50 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
14d60 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
14d70 20 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51   CreateModule(SQ
14d80 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
14d90 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  e, SQLiteConnect
14da0 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d  ionFlags flags).
14db0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
14dc0 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
14dd0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14de0 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
14df0 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
14e00 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20  ("module");.... 
14e10 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65         if (Helpe
14e20 72 4d 65 74 68 6f 64 73 2e 4e 6f 4c 6f 67 4d 6f  rMethods.NoLogMo
14e30 64 75 6c 65 28 66 6c 61 67 73 29 29 0d 0a 20 20  dule(flags))..  
14e40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14e50 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45       module.LogE
14e60 72 72 6f 72 73 20 3d 20 48 65 6c 70 65 72 4d 65  rrors = HelperMe
14e70 74 68 6f 64 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45  thods.LogModuleE
14e80 72 72 6f 72 28 66 6c 61 67 73 29 3b 0d 0a 20 20  rror(flags);..  
14e90 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
14ea0 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 20 3d  .LogExceptions =
14eb0 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c   HelperMethods.L
14ec0 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74 69 6f  ogModuleExceptio
14ed0 6e 28 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20  n(flags);..     
14ee0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
14ef0 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
14f00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
14f10 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
14f20 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63  xception("connec
14f30 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
14f40 6c 69 64 20 68 61 6e 64 6c 65 22 29 3b 0d 0a 0d  lid handle");...
14f50 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 69 73  .        bool is
14f60 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 66 61 6c  LoadNeeded = fal
14f70 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72  se;..        str
14f80 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 47  ing fileName = G
14f90 65 74 53 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46  etShimExtensionF
14fa0 69 6c 65 4e 61 6d 65 28 72 65 66 20 69 73 4c 6f  ileName(ref isLo
14fb0 61 64 4e 65 65 64 65 64 29 3b 0d 0a 0d 0a 20 20  adNeeded);....  
14fc0 20 20 20 20 20 20 69 66 20 28 69 73 4c 6f 61 64        if (isLoad
14fd0 4e 65 65 64 65 64 29 0d 0a 20 20 20 20 20 20 20  Needed)..       
14fe0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14ff0 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d 20  if (fileName == 
15000 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15010 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
15020 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
15030 28 22 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20  ("the file name 
15040 66 6f 72 20 74 68 65 20 5c 22 76 74 73 68 69 6d  for the \"vtshim
15050 5c 22 20 65 78 74 65 6e 73 69 6f 6e 20 69 73 20  \" extension is 
15060 75 6e 6b 6e 6f 77 6e 22 29 3b 0d 0a 0d 0a 20 20  unknown");....  
15070 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 73            if (_s
15080 68 69 6d 45 78 74 65 6e 73 69 6f 6e 50 72 6f 63  himExtensionProc
15090 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
150b0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
150c0 78 63 65 70 74 69 6f 6e 28 22 74 68 65 20 65 6e  xception("the en
150d0 74 72 79 20 70 6f 69 6e 74 20 66 6f 72 20 74 68  try point for th
150e0 65 20 5c 22 76 74 73 68 69 6d 5c 22 20 65 78 74  e \"vtshim\" ext
150f0 65 6e 73 69 6f 6e 20 69 73 20 75 6e 6b 6e 6f 77  ension is unknow
15100 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
15110 20 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65 6e      SetLoadExten
15120 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20 20  sion(true);..   
15130 20 20 20 20 20 20 20 20 20 4c 6f 61 64 45 78 74           LoadExt
15140 65 6e 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 2c  ension(fileName,
15150 20 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 50   _shimExtensionP
15160 72 6f 63 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  rocName);..     
15170 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15180 69 66 20 28 6d 6f 64 75 6c 65 2e 43 72 65 61 74  if (module.Creat
15190 65 44 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c  eDisposableModul
151a0 65 28 5f 73 71 6c 29 29 0d 0a 20 20 20 20 20 20  e(_sql))..      
151b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
151c0 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 3d 3d   if (_modules ==
151d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
151e0 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73          _modules
151f0 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
15200 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65  y<string, SQLite
15210 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20 20  Module>();....  
15220 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c            _modul
15230 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65 2e 4e 61  es.Add(module.Na
15240 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a  me, module);....
15250 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15260 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  _usePool)..     
15270 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15280 20 20 20 20 20 20 20 20 20 20 5f 75 73 65 50 6f            _usePo
15290 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23  ol = false;....#
152a0 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
152b0 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
152c0 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
152d0 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
152e0 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
152f0 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
15300 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
15310 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
15320 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
15330 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
15340 20 20 20 20 20 20 20 20 20 20 22 43 72 65 61 74            "Creat
15350 65 4d 6f 64 75 6c 65 20 28 50 6f 6f 6c 29 20 44  eModule (Pool) D
15360 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d 0a  isabled: {0}",..
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15380 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69      HandleToStri
15390 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
153a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
153b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
153c0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
153d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
153e0 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
153f0 45 78 63 65 70 74 69 6f 6e 28 47 65 74 4c 61 73  Exception(GetLas
15400 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
15410 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
15420 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
15430 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73  >..    /// Calls
15440 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69   the native SQLi
15450 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
15460 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6c 65 61  in order to clea
15470 6e 75 70 20 74 68 65 20 72 65 73 6f 75 72 63 65  nup the resource
15480 73 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63  s..    /// assoc
15490 69 61 74 65 64 20 77 69 74 68 20 61 20 6d 6f 64  iated with a mod
154a0 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ule containing t
154b0 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
154c0 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  n of a virtual t
154d0 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
154e0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
154f0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
15500 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f  module">..    //
15510 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a  / The module obj
15520 65 63 74 20 70 72 65 76 69 6f 75 73 6c 79 20 70  ect previously p
15530 61 73 73 65 64 20 74 6f 20 74 68 65 20 3c 73 65  assed to the <se
15540 65 20 63 72 65 66 3d 22 43 72 65 61 74 65 4d 6f  e cref="CreateMo
15550 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f  dule" />..    //
15560 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f  / method...    /
15570 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
15580 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
15590 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f  ="flags">..    /
155a0 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72  // The flags for
155b0 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
155c0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
155d0 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20  eConnection" /> 
155e0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
155f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
15600 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
15610 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44   override void D
15620 69 73 70 6f 73 65 4d 6f 64 75 6c 65 28 53 51 4c  isposeModule(SQL
15630 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  iteModule module
15640 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
15650 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a  onFlags flags)..
15660 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
15670 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
15680 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
15690 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
156a0 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
156b0 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20  "module");....  
156c0 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73        module.Dis
156d0 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a  pose();..    }..
156e0 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e  #endif....    in
156f0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
15700 49 6e 74 50 74 72 20 41 67 67 72 65 67 61 74 65  IntPtr Aggregate
15710 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63  Context(IntPtr c
15720 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
15730 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
15740 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
15750 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61  .sqlite3_aggrega
15760 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65  te_context(conte
15770 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a  xt, 1);..    }..
15780 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49  ..#if INTEROP_VI
15790 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20  RTUAL_TABLE..   
157a0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
157b0 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
157c0 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
157d0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
157e0 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65  order to declare
157f0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
15800 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73  ..    /// in res
15810 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20  ponse to a call 
15820 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72  into the <see cr
15830 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
15840 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22  eModule.xCreate"
15850 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20   />..    /// or 
15860 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
15870 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
15880 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74  Connect" /> virt
15890 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64  ual table method
158a0 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
158b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
158c0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
158d0 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ule">..    /// T
158e0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
158f0 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20   module that is 
15900 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c  to be responsibl
15910 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61  e for the virtua
15920 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f  l table..    ///
15930 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e   being declared.
15940 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
15950 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
15960 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c 22  am name="strSql"
15970 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73  >..    /// The s
15980 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
15990 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
159a0 6e 74 20 64 65 73 63 72 69 62 69 6e 67 20 74 68  nt describing th
159b0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
159c0 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 64  to..    /// be d
159d0 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  eclared...    //
159e0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
159f0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
15a00 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f  "error">..    //
15a10 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20  / Upon success, 
15a20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
15a30 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 61  this parameter a
15a40 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55  re undefined.  U
15a50 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20  pon failure,..  
15a60 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20    /// it should 
15a70 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f  contain an appro
15a80 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73  priate error mes
15a90 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sage...    /// <
15aa0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
15ab0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
15ac0 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
15ad0 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
15ae0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
15af0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
15b00 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
15b10 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65  LiteErrorCode De
15b20 63 6c 61 72 65 56 69 72 74 75 61 6c 54 61 62 6c  clareVirtualTabl
15b30 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e(..        SQLi
15b40 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c  teModule module,
15b50 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
15b60 20 73 74 72 53 71 6c 2c 0d 0a 20 20 20 20 20 20   strSql,..      
15b70 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
15b80 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  or..        ).. 
15b90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
15ba0 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
15bb0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
15bc0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
15bd0 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20  "connection has 
15be0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
15bf0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
15c00 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
15c10 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a  rorCode.Error;..
15c20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15c30 20 20 20 20 20 49 6e 74 50 74 72 20 70 53 71 6c       IntPtr pSql
15c40 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
15c50 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
15c60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15c70 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20 53 51         pSql = SQ
15c80 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
15c90 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
15ca0 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20  strSql);....    
15cb0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
15cc0 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
15cd0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
15ce0 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
15cf0 76 74 61 62 28 0d 0a 20 20 20 20 20 20 20 20 20  vtab(..         
15d00 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 53 71         _sql, pSq
15d10 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
15d20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c     if ((n == SQL
15d30 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
15d40 20 26 26 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e   && (module != n
15d50 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
15d60 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 65         module.De
15d70 63 6c 61 72 65 64 20 3d 20 74 72 75 65 3b 0d 0a  clared = true;..
15d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
15d90 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
15da0 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72  orCode.Ok) error
15db0 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28   = GetLastError(
15dc0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15dd0 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20    return n;..   
15de0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15df0 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
15e00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15e10 69 66 20 28 70 53 71 6c 20 21 3d 20 49 6e 74 50  if (pSql != IntP
15e20 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
15e30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15e40 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
15e50 65 6d 6f 72 79 2e 46 72 65 65 28 70 53 71 6c 29  emory.Free(pSql)
15e60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15e70 20 20 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72     pSql = IntPtr
15e80 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
15e90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
15ea0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
15eb0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
15ec0 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
15ed0 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f  native SQLite co
15ee0 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72  re library in or
15ef0 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61  der to declare a
15f00 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
15f10 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e      /// function
15f20 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
15f30 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  a call into the 
15f40 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
15f50 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
15f60 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20  Create" />..    
15f70 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66  /// or <see cref
15f80 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
15f90 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20  odule.xConnect" 
15fa0 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  /> virtual table
15fb0 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f   methods...    /
15fc0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
15fd0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
15fe0 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
15ff0 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61    /// The virtua
16000 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74  l table module t
16010 68 61 74 20 69 73 20 74 6f 20 62 65 20 72 65 73  hat is to be res
16020 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65  ponsible for the
16030 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
16040 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e      /// function
16050 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e   being declared.
16060 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
16070 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
16080 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e  am name="argumen
16090 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f  tCount">..    //
160a0 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
160b0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
160c0 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20   function being 
160d0 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
160e0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
160f0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
16100 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  ="name">..    //
16110 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
16120 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67  e function being
16130 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
16140 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
16150 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
16160 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20  e="error">..    
16170 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
16180 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  , the contents o
16190 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  f this parameter
161a0 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20   are undefined. 
161b0 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a   Upon failure,..
161c0 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c      /// it shoul
161d0 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70  d contain an app
161e0 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d  ropriate error m
161f0 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f  essage...    ///
16200 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
16210 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
16220 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
16230 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
16240 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode...    /// </
16250 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
16260 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
16270 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
16280 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 46 75  DeclareVirtualFu
16290 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
162a0 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f   SQLiteModule mo
162b0 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 69  dule,..        i
162c0 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74  nt argumentCount
162d0 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
162e0 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
162f0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
16300 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  r..        )..  
16310 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
16320 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
16330 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16340 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
16350 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61  connection has a
16360 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
16370 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
16380 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
16390 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20  orCode.Error;.. 
163a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
163b0 20 20 20 20 49 6e 74 50 74 72 20 70 4e 61 6d 65      IntPtr pName
163c0 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
163d0 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
163e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
163f0 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 53         pName = S
16400 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38  QLiteString.Utf8
16410 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
16420 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  (name);....     
16430 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
16440 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
16450 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
16460 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f  qlite3_overload_
16470 66 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  function(..     
16480 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c             _sql,
16490 20 70 4e 61 6d 65 2c 20 61 72 67 75 6d 65 6e 74   pName, argument
164a0 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
164b0 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
164c0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
164d0 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c  Ok) error = GetL
164e0 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20  astError();.... 
164f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
16500 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n n;..        }.
16510 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
16520 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
16530 20 20 20 20 20 20 20 20 20 69 66 20 28 70 4e 61           if (pNa
16540 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  me != IntPtr.Zer
16550 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
16560 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16570 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e     SQLiteMemory.
16580 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20  Free(pName);..  
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4e                pN
165a0 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ame = IntPtr.Zer
165b0 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
165c0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
165d0 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
165e0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
165f0 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65  ..    /// Enable
16600 73 20 6f 72 20 64 69 73 61 62 6c 65 73 20 61 20  s or disables a 
16610 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70  configuration op
16620 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 64 61 74  tion for the dat
16630 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  abase...    /// 
16640 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
16650 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
16660 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
16670 6e 61 6d 65 3d 22 6f 70 74 69 6f 6e 22 3e 0d 0a  name="option">..
16680 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 61 74 61      /// The data
16690 62 61 73 65 20 63 6f 6e 66 69 67 75 72 61 74 69  base configurati
166a0 6f 6e 20 6f 70 74 69 6f 6e 20 74 6f 20 65 6e 61  on option to ena
166b0 62 6c 65 20 6f 72 20 64 69 73 61 62 6c 65 2e 0d  ble or disable..
166c0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
166d0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
166e0 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e  m name="bOnOff">
166f0 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74  ..    /// True t
16700 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67  o enable loading
16710 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20   of extensions, 
16720 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65  false to disable
16730 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
16740 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
16750 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
16760 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
16770 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
16780 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
16790 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
167a0 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
167b0 45 72 72 6f 72 43 6f 64 65 20 53 65 74 43 6f 6e  ErrorCode SetCon
167c0 66 69 67 75 72 61 74 69 6f 6e 4f 70 74 69 6f 6e  figurationOption
167d0 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
167e0 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
167f0 20 6f 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20   option,..      
16800 20 20 62 6f 6f 6c 20 62 4f 6e 4f 66 66 0d 0a 20    bool bOnOff.. 
16810 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
16820 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6f 70  .        if ((op
16830 74 69 6f 6e 20 3c 20 53 51 4c 69 74 65 43 6f 6e  tion < SQLiteCon
16840 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
16850 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41  ITE_DBCONFIG_ENA
16860 42 4c 45 5f 46 4b 45 59 29 20 7c 7c 0d 0a 20 20  BLE_FKEY) ||..  
16870 20 20 20 20 20 20 20 20 20 20 28 6f 70 74 69 6f            (optio
16880 6e 20 3e 20 53 51 4c 69 74 65 43 6f 6e 66 69 67  n > SQLiteConfig
16890 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  DbOpsEnum.SQLITE
168a0 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45  _DBCONFIG_ENABLE
168b0 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 29  _LOAD_EXTENSION)
168c0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
168d0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
168e0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
168f0 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ion(HelperMethod
16900 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
16910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16920 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
16930 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75                "u
16950 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6e 66 69  nsupported confi
16960 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 2c  guration option,
16970 20 6d 75 73 74 20 62 65 3a 20 7b 30 7d 2c 20 7b   must be: {0}, {
16980 31 7d 2c 20 7b 32 7d 2c 20 6f 72 20 7b 33 7d 22  1}, {2}, or {3}"
16990 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
169a0 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44     SQLiteConfigD
169b0 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  bOpsEnum.SQLITE_
169c0 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f  DBCONFIG_ENABLE_
169d0 46 4b 45 59 2c 0d 0a 20 20 20 20 20 20 20 20 20  FKEY,..         
169e0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
169f0 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
16a00 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41  ITE_DBCONFIG_ENA
16a10 42 4c 45 5f 54 52 49 47 47 45 52 2c 0d 0a 20 20  BLE_TRIGGER,..  
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
16a30 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
16a40 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
16a50 46 49 47 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f  FIG_ENABLE_FTS3_
16a60 54 4f 4b 45 4e 49 5a 45 52 2c 0d 0a 20 20 20 20  TOKENIZER,..    
16a70 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
16a80 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
16a90 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  m.SQLITE_DBCONFI
16aa0 47 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58  G_ENABLE_LOAD_EX
16ab0 54 45 4e 53 49 4f 4e 29 29 3b 0d 0a 20 20 20 20  TENSION));..    
16ac0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16ad0 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30 3b   int result = 0;
16ae0 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d   /* NOT USED */.
16af0 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
16b00 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
16b10 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62  thods.sqlite3_db
16b20 5f 63 6f 6e 66 69 67 5f 69 6e 74 5f 72 65 66 69  _config_int_refi
16b30 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
16b40 20 5f 73 71 6c 2c 20 6f 70 74 69 6f 6e 2c 20 28   _sql, option, (
16b50 62 4f 6e 4f 66 66 20 3f 20 31 20 3a 20 30 29 2c  bOnOff ? 1 : 0),
16b60 20 72 65 66 20 72 65 73 75 6c 74 29 3b 0d 0a 20   ref result);.. 
16b70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
16b80 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
16b90 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69  // Enables or di
16ba0 73 61 62 6c 65 73 20 65 78 74 65 6e 73 69 6f 6e  sables extension
16bb0 20 6c 6f 61 64 69 6e 67 20 62 79 20 53 51 4c 69   loading by SQLi
16bc0 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  te...    /// </s
16bd0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
16be0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f   <param name="bO
16bf0 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  nOff">..    /// 
16c00 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c  True to enable l
16c10 6f 61 64 69 6e 67 20 6f 66 20 65 78 74 65 6e 73  oading of extens
16c20 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20 64  ions, false to d
16c30 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f  isable...    ///
16c40 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
16c50 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
16c60 20 76 6f 69 64 20 53 65 74 4c 6f 61 64 45 78 74   void SetLoadExt
16c70 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f  ension(bool bOnO
16c80 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ff)..    {..    
16c90 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
16ca0 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode n;....      
16cb0 20 20 69 66 20 28 53 51 4c 69 74 65 56 65 72 73    if (SQLiteVers
16cc0 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30 31  ionNumber >= 301
16cd0 33 30 30 30 29 0d 0a 20 20 20 20 20 20 20 20 7b  3000)..        {
16ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
16cf0 3d 20 53 65 74 43 6f 6e 66 69 67 75 72 61 74 69  = SetConfigurati
16d00 6f 6e 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  onOption(..     
16d10 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16d20 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
16d30 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47  .SQLITE_DBCONFIG
16d40 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54  _ENABLE_LOAD_EXT
16d50 45 4e 53 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20  ENSION,..       
16d60 20 20 20 20 20 20 20 20 20 62 4f 6e 4f 66 66 29           bOnOff)
16d70 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
16d80 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
16d90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16da0 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
16db0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
16dc0 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65  e3_enable_load_e
16dd0 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20  xtension(..     
16de0 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c             _sql,
16df0 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20   (bOnOff ? -1 : 
16e00 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  0));..        }.
16e10 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
16e20 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
16e30 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
16e40 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
16e50 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
16e60 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
16e70 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
16e80 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73  >..    /// Loads
16e90 20 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73   a SQLite extens
16ea0 69 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d  ion library from
16eb0 20 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e   the named file.
16ec0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
16ed0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
16ee0 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e  aram name="fileN
16ef0 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
16f00 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
16f10 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72  ynamic link libr
16f20 61 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  ary file contain
16f30 69 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f  ing the extensio
16f40 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  n...    /// </pa
16f50 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
16f60 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e  aram name="procN
16f70 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
16f80 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65  he name of the e
16f90 78 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e  xported function
16fa0 20 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c   used to initial
16fb0 69 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f  ize the extensio
16fc0 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e  n...    /// If n
16fd0 75 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74  ull, the default
16fe0 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73   "sqlite3_extens
16ff0 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62  ion_init" will b
17000 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  e used...    ///
17010 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
17020 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
17030 20 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73   void LoadExtens
17040 69 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e  ion(string fileN
17050 61 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63  ame, string proc
17060 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
17070 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61        if (fileNa
17080 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
17090 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
170a0 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
170b0 78 63 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61  xception("fileNa
170c0 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
170d0 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d   IntPtr pError =
170e0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
170f0 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
17100 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17110 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38       byte[] utf8
17120 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45  FileName = UTF8E
17130 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74  ncoding.UTF8.Get
17140 42 79 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b  Bytes(fileName +
17150 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20   '\0');..       
17160 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38       byte[] utf8
17170 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  ProcName = null;
17180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17190 69 66 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20  if (procName != 
171a0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
171b0 20 20 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e         utf8ProcN
171c0 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69  ame = UTF8Encodi
171d0 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73  ng.UTF8.GetBytes
171e0 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27  (procName + '\0'
171f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17200 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
17210 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
17220 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
17230 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  3_load_extension
17240 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
17250 20 20 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c     _sql, utf8Fil
17260 65 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e  eName, utf8ProcN
17270 61 6d 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29  ame, ref pError)
17280 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17290 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
172a0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
172b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
172c0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
172d0 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38  xception(n, UTF8
172e0 54 6f 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c  ToString(pError,
172f0 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20   -1));..        
17300 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
17310 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
17320 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
17330 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e  Error != IntPtr.
17340 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
17350 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17360 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
17370 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
17380 33 5f 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d  3_free(pError);.
17390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
173a0 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72   pError = IntPtr
173b0 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
173c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
173d0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
173e0 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69  // Enables or di
173f0 73 61 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20  sabled extended 
17400 72 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74  result codes ret
17410 75 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d  urned by SQLite.
17420 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
17430 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 45  erride void SetE
17440 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64  xtendedResultCod
17450 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d  es(bool bOnOff).
17460 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
17470 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
17480 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
17490 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
174a0 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f  tended_result_co
174b0 64 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  des(..          
174c0 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20  _sql, (bOnOff ? 
174d0 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20  -1 : 0));....   
174e0 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
174f0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
17500 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
17510 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
17520 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
17530 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
17540 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
17550 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20  te error code.. 
17560 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
17570 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
17580 43 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28  Code ResultCode(
17590 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
175a0 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
175b0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
175c0 65 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29  e3_errcode(_sql)
175d0 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f  ;..    }..    //
175e0 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20  / Gets the last 
175f0 53 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20  SQLite extended 
17600 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20  error code..    
17610 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
17620 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
17630 65 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74  e ExtendedResult
17640 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Code()..    {.. 
17650 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
17660 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
17670 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
17680 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d  _errcode(_sql);.
17690 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
176a0 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73  / Add a log mess
176b0 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69  age via the SQLi
176c0 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69  te sqlite3_log i
176d0 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69  nterface...    i
176e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
176f0 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65   void LogMessage
17700 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
17710 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e   iErrCode, strin
17720 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20  g zMessage)..   
17730 20 7b 0d 0a 20 20 20 20 20 20 53 74 61 74 69 63   {..      Static
17740 4c 6f 67 4d 65 73 73 61 67 65 28 69 45 72 72 43  LogMessage(iErrC
17750 6f 64 65 2c 20 7a 4d 65 73 73 61 67 65 29 3b 0d  ode, zMessage);.
17760 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
17770 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73  / Add a log mess
17780 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69  age via the SQLi
17790 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69  te sqlite3_log i
177a0 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69  nterface...    i
177b0 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76  nternal static v
177c0 6f 69 64 20 53 74 61 74 69 63 4c 6f 67 4d 65 73  oid StaticLogMes
177d0 73 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72  sage(SQLiteError
177e0 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73  Code iErrCode, s
177f0 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d  tring zMessage).
17800 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
17810 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
17820 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45  s.sqlite3_log(iE
17830 72 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a  rrCode, ToUTF8(z
17840 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20  Message));..    
17850 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  }....#if INTEROP
17860 5f 43 4f 44 45 43 20 7c 7c 20 49 4e 54 45 52 4f  _CODEC || INTERO
17870 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 0d 0a 20  P_INCLUDE_SEE.. 
17880 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
17890 72 69 64 65 20 76 6f 69 64 20 53 65 74 50 61 73  ride void SetPas
178a0 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73  sword(byte[] pas
178b0 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20  swordBytes)..   
178c0 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
178d0 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
178e0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
178f0 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73  s.sqlite3_key(_s
17900 71 6c 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65  ql, passwordByte
17910 73 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  s, passwordBytes
17920 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20  .Length);..     
17930 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
17940 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
17950 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
17960 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
17970 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
17980 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f       if (_usePoo
17990 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
179a0 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20       _usePool = 
179b0 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e  false;....#if !N
179c0 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
179d0 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
179e0 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63 65  N..        Trace
179f0 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
17a00 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
17a10 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
17a20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
17a30 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
17a40 20 20 20 20 20 20 20 20 20 22 53 65 74 50 61 73           "SetPas
17a50 73 77 6f 72 64 20 28 50 6f 6f 6c 29 20 44 69 73  sword (Pool) Dis
17a60 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20  abled: {0}",..  
17a70 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f          HandleTo
17a80 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e  String()));..#en
17a90 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  dif..      }..  
17aa0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
17ab0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
17ac0 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64  d ChangePassword
17ad0 28 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77  (byte[] newPassw
17ae0 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b  ordBytes)..    {
17af0 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
17b00 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
17b10 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
17b20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73  sqlite3_rekey(_s
17b30 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42  ql, newPasswordB
17b40 79 74 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f  ytes, (newPasswo
17b50 72 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29  rdBytes == null)
17b60 20 3f 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f   ? 0 : newPasswo
17b70 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b  rdBytes.Length);
17b80 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
17b90 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
17ba0 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
17bb0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
17bc0 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
17bd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
17be0 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  _usePool)..     
17bf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 75 73 65   {..        _use
17c00 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  Pool = false;...
17c10 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
17c20 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
17c30 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
17c40 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
17c50 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
17c60 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
17c70 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
17c80 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
17c90 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
17ca0 22 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64 20  "ChangePassword 
17cb0 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65 64 3a  (Pool) Disabled:
17cc0 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
17cd0 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
17ce0 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
17cf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23       }..    }..#
17d00 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74  endif....    int
17d10 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
17d20 6f 69 64 20 53 65 74 50 72 6f 67 72 65 73 73 48  oid SetProgressH
17d30 6f 6f 6b 28 69 6e 74 20 6e 4f 70 73 2c 20 53 51  ook(int nOps, SQ
17d40 4c 69 74 65 50 72 6f 67 72 65 73 73 43 61 6c 6c  LiteProgressCall
17d50 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
17d60 7b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  {..        Unsaf
17d70 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
17d80 71 6c 69 74 65 33 5f 70 72 6f 67 72 65 73 73 5f  qlite3_progress_
17d90 68 61 6e 64 6c 65 72 28 5f 73 71 6c 2c 20 6e 4f  handler(_sql, nO
17da0 70 73 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ps, func, IntPtr
17db0 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
17dc0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
17dd0 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
17de0 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f 6b 28 53  AuthorizerHook(S
17df0 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72 43  QLiteAuthorizerC
17e00 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
17e10 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
17e20 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
17e30 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68  sqlite3_set_auth
17e40 6f 72 69 7a 65 72 28 5f 73 71 6c 2c 20 66 75 6e  orizer(_sql, fun
17e50 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
17e60 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
17e70 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
17e80 20 76 6f 69 64 20 53 65 74 55 70 64 61 74 65 48   void SetUpdateH
17e90 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65  ook(SQLiteUpdate
17ea0 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
17eb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
17ec0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
17ed0 2e 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f  .sqlite3_update_
17ee0 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
17ef0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
17f00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
17f10 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
17f20 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f  oid SetCommitHoo
17f30 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61  k(SQLiteCommitCa
17f40 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
17f50 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
17f60 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
17f70 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f  qlite3_commit_ho
17f80 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ok(_sql, func, I
17f90 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
17fa0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
17fb0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
17fc0 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61  d SetTraceCallba
17fd0 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65 43 61  ck(SQLiteTraceCa
17fe0 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
17ff0 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
18000 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
18010 71 6c 69 74 65 33 5f 74 72 61 63 65 28 5f 73 71  qlite3_trace(_sq
18020 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
18030 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
18040 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
18050 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 52  erride void SetR
18060 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69  ollbackHook(SQLi
18070 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  teRollbackCallba
18080 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
18090 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
180a0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
180b0 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b  e3_rollback_hook
180c0 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
180d0 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
180e0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
180f0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
18100 41 6c 6c 6f 77 73 20 74 68 65 20 73 65 74 74 69  Allows the setti
18110 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20  ng of a logging 
18120 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64  callback invoked
18130 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20   by SQLite when 
18140 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65  a..    /// log e
18150 76 65 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e  vent occurs.  On
18160 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20  ly one callback 
18170 6d 61 79 20 62 65 20 73 65 74 2e 20 20 49 66 20  may be set.  If 
18180 4e 55 4c 4c 20 69 73 20 70 61 73 73 65 64 2c 0d  NULL is passed,.
18190 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67  .    /// the log
181a0 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 73  ging callback is
181b0 20 75 6e 72 65 67 69 73 74 65 72 65 64 2e 0d 0a   unregistered...
181c0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
181d0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
181e0 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54  am name="func">T
181f0 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  he callback func
18200 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c  tion to invoke.<
18210 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
18220 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
18230 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c  s a result code<
18240 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
18250 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
18260 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
18270 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28   SetLogCallback(
18280 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63  SQLiteLogCallbac
18290 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
182a0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
182b0 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
182c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
182d0 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f  .sqlite3_config_
182e0 6c 6f 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  log(..          
182f0 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70    SQLiteConfigOp
18300 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e  sEnum.SQLITE_CON
18310 46 49 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49  FIG_LOG, func, I
18320 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a  ntPtr.Zero);....
18330 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
18340 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
18350 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
18360 20 20 20 5f 73 65 74 4c 6f 67 43 61 6c 6c 62 61     _setLogCallba
18370 63 6b 20 3d 20 28 66 75 6e 63 20 21 3d 20 6e 75  ck = (func != nu
18380 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ll);....        
18390 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
183a0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
183b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18400 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18410 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
18420 20 20 20 2f 2f 2f 20 41 70 70 65 6e 64 73 20 61     /// Appends a
18430 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
18440 61 6e 64 20 61 6e 20 61 70 70 72 6f 70 72 69 61  and an appropria
18450 74 65 20 6c 69 6e 65 2d 65 6e 64 69 6e 67 20 74  te line-ending t
18460 6f 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53  o a <see cref="S
18470 74 72 69 6e 67 42 75 69 6c 64 65 72 22 20 2f 3e  tringBuilder" />
18480 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e  ..    /// instan
18490 63 65 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ce.  This is use
184a0 66 75 6c 20 62 65 63 61 75 73 65 20 74 68 65 20  ful because the 
184b0 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20 46 72 61  .NET Compact Fra
184c0 6d 65 77 6f 72 6b 20 68 61 73 20 61 20 73 6c 69  mework has a sli
184d0 67 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74 20  ghtly different 
184e0 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20  set..    /// of 
184f0 73 75 70 70 6f 72 74 65 64 20 6d 65 74 68 6f 64  supported method
18500 73 20 66 6f 72 20 74 68 65 20 3c 73 65 65 20 63  s for the <see c
18510 72 65 66 3d 22 53 74 72 69 6e 67 42 75 69 6c 64  ref="StringBuild
18520 65 72 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20  er" /> class... 
18530 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
18540 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
18550 6d 20 6e 61 6d 65 3d 22 62 75 69 6c 64 65 72 22  m name="builder"
18560 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
18570 73 65 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67  see cref="String
18580 42 75 69 6c 64 65 72 22 20 2f 3e 20 69 6e 73 74  Builder" /> inst
18590 61 6e 63 65 20 74 6f 20 61 70 70 65 6e 64 20 74  ance to append t
185a0 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  o...    /// </pa
185b0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
185c0 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 65 73 73 61  aram name="messa
185d0 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ge">..    /// Th
185e0 65 20 6d 65 73 73 61 67 65 20 74 6f 20 61 70 70  e message to app
185f0 65 6e 64 2e 20 20 49 74 20 77 69 6c 6c 20 62 65  end.  It will be
18600 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
18610 61 70 70 72 6f 70 72 69 61 74 65 20 6c 69 6e 65  appropriate line
18620 2d 65 6e 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f  -ending...    //
18630 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
18640 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
18650 6f 69 64 20 41 70 70 65 6e 64 45 72 72 6f 72 28  oid AppendError(
18660 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67  ..        String
18670 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72 2c  Builder builder,
18680 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
18690 20 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20   message..      
186a0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
186b0 20 20 20 20 69 66 20 28 62 75 69 6c 64 65 72 20      if (builder 
186c0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
186d0 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
186e0 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
186f0 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
18700 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72  .        builder
18710 2e 41 70 70 65 6e 64 4c 69 6e 65 28 6d 65 73 73  .AppendLine(mess
18720 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  age);..#else..  
18730 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
18740 70 65 6e 64 28 6d 65 73 73 61 67 65 29 3b 0d 0a  pend(message);..
18750 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
18760 41 70 70 65 6e 64 28 22 5c 72 5c 6e 22 29 3b 0d  Append("\r\n");.
18770 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
18780 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
18790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
187a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
187b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
187c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
187d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
187e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
187f0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
18800 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
18810 61 74 74 65 6d 70 74 73 20 74 6f 20 63 61 75 73  attempts to caus
18820 65 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74  e the SQLite nat
18830 69 76 65 20 6c 69 62 72 61 72 79 20 74 6f 20 69  ive library to i
18840 6e 76 61 6c 69 64 61 74 65 0d 0a 20 20 20 20 2f  nvalidate..    /
18850 2f 2f 20 69 74 73 20 66 75 6e 63 74 69 6f 6e 20  // its function 
18860 70 6f 69 6e 74 65 72 73 20 74 68 61 74 20 72 65  pointers that re
18870 66 65 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74  fer to this inst
18880 61 6e 63 65 2e 20 20 54 68 69 73 20 69 73 20 6e  ance.  This is n
18890 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 2f 2f  ecessary..    //
188a0 2f 20 74 6f 20 70 72 65 76 65 6e 74 20 63 61 6c  / to prevent cal
188b0 6c 73 20 66 72 6f 6d 20 6e 61 74 69 76 65 20 63  ls from native c
188c0 6f 64 65 20 69 6e 74 6f 20 64 65 6c 65 67 61 74  ode into delegat
188d0 65 73 20 74 68 61 74 20 6d 61 79 20 68 61 76 65  es that may have
188e0 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 67   been..    /// g
188f0 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 65 64  arbage collected
18900 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65  .  Normally, the
18910 73 65 20 74 79 70 65 73 20 6f 66 20 69 73 73 75  se types of issu
18920 65 73 20 63 61 6e 20 6f 6e 6c 79 20 61 72 69 73  es can only aris
18930 65 20 66 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63  e for..    /// c
18940 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 68 61 74 20  onnections that 
18950 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65  are added to the
18960 20 70 6f 6f 6c 3b 20 68 6f 77 76 65 72 2c 20 69   pool; howver, i
18970 74 20 69 73 20 67 6f 6f 64 20 70 72 61 63 74 69  t is good practi
18980 63 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 75  ce to..    /// u
18990 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20 69  nconditionally i
189a0 6e 76 61 6c 69 64 61 74 65 20 66 75 6e 63 74 69  nvalidate functi
189b0 6f 6e 20 70 6f 69 6e 74 65 72 73 20 74 68 61 74  on pointers that
189c0 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20 6f 62   may refer to ob
189d0 6a 65 63 74 73 0d 0a 20 20 20 20 2f 2f 2f 20 62  jects..    /// b
189e0 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a  eing disposed...
189f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
18a00 61 6d 65 3d 22 69 6e 63 6c 75 64 65 47 6c 6f 62  ame="includeGlob
18a10 61 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  al">..    /// No
18a20 6e 2d 7a 65 72 6f 20 74 6f 20 61 6c 73 6f 20 69  n-zero to also i
18a30 6e 76 61 6c 69 64 61 74 65 20 67 6c 6f 62 61 6c  nvalidate global
18a40 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
18a50 72 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 74  rs (i.e. those t
18a60 68 61 74 0d 0a 20 20 20 20 2f 2f 2f 20 61 72 65  hat..    /// are
18a70 20 6e 6f 74 20 64 69 72 65 63 74 6c 79 20 61 73   not directly as
18a80 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
18a90 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 6e  is connection on
18aa0 20 74 68 65 20 6e 61 74 69 76 65 20 73 69 64 65   the native side
18ab0 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  )...    /// </pa
18ac0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
18ad0 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6e 54 68  aram name="canTh
18ae0 72 6f 77 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  row">..    /// N
18af0 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20  on-zero if this 
18b00 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67 20  method is being 
18b10 65 78 65 63 75 74 65 64 20 77 69 74 68 69 6e 20  executed within 
18b20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 20  a context where 
18b30 69 74 20 63 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20  it can..    /// 
18b40 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69  throw an excepti
18b50 6f 6e 20 69 6e 20 74 68 65 20 65 76 65 6e 74 20  on in the event 
18b60 6f 66 20 66 61 69 6c 75 72 65 3b 20 6f 74 68 65  of failure; othe
18b70 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20  rwise, zero...  
18b80 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
18b90 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
18ba0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
18bb0 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
18bc0 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20  on-zero if this 
18bd0 6d 65 74 68 6f 64 20 77 61 73 20 73 75 63 63 65  method was succe
18be0 73 73 66 75 6c 3b 20 6f 74 68 65 72 77 69 73 65  ssful; otherwise
18bf0 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f  , zero...    ///
18c00 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
18c10 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 55 6e   private bool Un
18c20 68 6f 6f 6b 4e 61 74 69 76 65 43 61 6c 6c 62 61  hookNativeCallba
18c30 63 6b 73 28 0d 0a 20 20 20 20 20 20 20 20 62 6f  cks(..        bo
18c40 6f 6c 20 69 6e 63 6c 75 64 65 47 6c 6f 62 61 6c  ol includeGlobal
18c50 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  ,..        bool 
18c60 63 61 6e 54 68 72 6f 77 0d 0a 20 20 20 20 20 20  canThrow..      
18c70 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
18c80 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
18c90 2f 2f 20 4e 4f 54 45 3a 20 49 6e 69 74 69 61 6c  // NOTE: Initial
18ca0 6c 79 2c 20 74 68 69 73 20 6d 65 74 68 6f 64 20  ly, this method 
18cb0 61 73 73 75 6d 65 73 20 73 75 63 63 65 73 73 2e  assumes success.
18cc0 20 20 54 68 65 6e 2c 20 69 66 20 61 6e 79 20 61    Then, if any a
18cd0 74 74 65 6d 70 74 0d 0a 20 20 20 20 20 20 20 20  ttempt..        
18ce0 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 6e 76 61  //       to inva
18cf0 6c 69 64 61 74 65 20 61 20 66 75 6e 63 74 69 6f  lidate a functio
18d00 6e 20 70 6f 69 6e 74 65 72 20 66 61 69 6c 73 2c  n pointer fails,
18d10 20 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73   the overall res
18d20 75 6c 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20  ult is..        
18d30 2f 2f 20 20 20 20 20 20 20 73 65 74 20 74 6f 20  //       set to 
18d40 66 61 69 6c 75 72 65 2e 20 20 48 6f 77 65 76 65  failure.  Howeve
18d50 72 2c 20 74 68 69 73 20 77 69 6c 6c 20 6e 6f 74  r, this will not
18d60 20 70 72 65 76 65 6e 74 20 66 75 72 74 68 65 72   prevent further
18d70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
18d80 20 20 20 61 74 74 65 6d 70 74 73 2c 20 69 66 20     attempts, if 
18d90 61 6e 79 2c 20 74 6f 20 69 6e 76 61 6c 69 64 61  any, to invalida
18da0 74 65 20 73 75 62 73 65 71 75 65 6e 74 20 66 75  te subsequent fu
18db0 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 73 2e  nction pointers.
18dc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
18dd0 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 75 6c        bool resul
18de0 74 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  t = true;..     
18df0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
18e00 64 65 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72  de rc = SQLiteEr
18e10 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
18e20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
18e30 65 72 20 62 75 69 6c 64 65 72 20 3d 20 6e 65 77  er builder = new
18e40 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29   StringBuilder()
18e50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
18e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18eb0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18ec0 20 20 20 20 23 72 65 67 69 6f 6e 20 52 6f 6c 6c      #region Roll
18ed0 62 61 63 6b 20 48 6f 6f 6b 20 28 50 65 72 2d 43  back Hook (Per-C
18ee0 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  onnection)..    
18ef0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
18f00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18f10 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28  SetRollbackHook(
18f20 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20  null); /* throw 
18f30 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  */..        }..#
18f40 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
18f50 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
18f60 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
18f70 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
18f80 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20   e)..#else..    
18f90 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
18fa0 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20  tion)..#endif.. 
18fb0 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e         {..#if !N
18fc0 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
18fd0 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
18fe0 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  N..            t
18ff0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
19000 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19010 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
19020 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
19030 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19050 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
19060 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
19070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19080 20 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20       "Failed to 
19090 75 6e 73 65 74 20 72 6f 6c 6c 62 61 63 6b 20 68  unset rollback h
190a0 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ook: {0}",..    
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190c0 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  e)); /* throw */
190d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
190e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
190f0 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
19100 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19110 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
19120 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
19130 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
19140 20 20 20 20 20 20 20 20 41 70 70 65 6e 64 45 72          AppendEr
19150 72 6f 72 28 62 75 69 6c 64 65 72 2c 20 22 66 61  ror(builder, "fa
19160 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 72 6f  iled to unset ro
19170 6c 6c 62 61 63 6b 20 68 6f 6f 6b 22 29 3b 0d 0a  llback hook");..
19180 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
19190 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
191a0 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20  .Error;....     
191b0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
191c0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
191d0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
191e0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
191f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19250 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
19260 54 72 61 63 65 20 43 61 6c 6c 62 61 63 6b 20 28  Trace Callback (
19270 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d  Per-Connection).
19280 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
19290 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
192a0 20 20 20 20 20 53 65 74 54 72 61 63 65 43 61 6c       SetTraceCal
192b0 6c 62 61 63 6b 28 6e 75 6c 6c 29 3b 20 2f 2a 20  lback(null); /* 
192c0 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
192d0 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    }..#if !NET_CO
192e0 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
192f0 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
19300 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
19310 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65  eption e)..#else
19320 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
19330 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65 6e  (Exception)..#en
19340 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  dif..        {..
19350 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
19360 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
19370 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
19380 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
19390 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
193a0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
193b0 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
193c0 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
193d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
193e0 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
193f0 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
19400 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
19410 20 20 20 20 20 20 20 20 20 20 20 22 46 61 69 6c             "Fail
19420 65 64 20 74 6f 20 75 6e 73 65 74 20 74 72 61 63  ed to unset trac
19430 65 20 63 61 6c 6c 62 61 63 6b 3a 20 7b 30 7d 22  e callback: {0}"
19440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19450 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74         e)); /* t
19460 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
19470 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
19480 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
19490 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
194a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
194b0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
194c0 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
194d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ...            A
194e0 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64  ppendError(build
194f0 65 72 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 75  er, "failed to u
19500 6e 73 65 74 20 74 72 61 63 65 20 63 61 6c 6c 62  nset trace callb
19510 61 63 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ack");..        
19520 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45      rc = SQLiteE
19530 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
19540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
19550 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a  esult = false;..
19560 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19570 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
19580 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
19590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
195a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
195b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
195c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
195d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
195e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
195f0 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 69 74 20 48  #region Commit H
19600 6f 6f 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74  ook (Per-Connect
19610 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 72  ion)..        tr
19620 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
19630 20 20 20 20 20 20 20 20 20 20 53 65 74 43 6f 6d            SetCom
19640 6d 69 74 48 6f 6f 6b 28 6e 75 6c 6c 29 3b 20 2f  mitHook(null); /
19650 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
19660 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f      }..#if !NET_
19670 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
19680 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
19690 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
196a0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c  xception e)..#el
196b0 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  se..        catc
196c0 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23  h (Exception)..#
196d0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b  endif..        {
196e0 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
196f0 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
19700 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
19710 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
19720 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19730 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
19740 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
19750 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
19760 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
19770 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
19780 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
19790 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
197a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 61               "Fa
197b0 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 63 6f  iled to unset co
197c0 6d 6d 69 74 20 68 6f 6f 6b 3a 20 7b 30 7d 22 2c  mmit hook: {0}",
197d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
197e0 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68        e)); /* th
197f0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
19800 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
19810 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
19820 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19830 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
19840 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
19850 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
19860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 70  ..            Ap
19870 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64 65  pendError(builde
19880 72 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 75 6e  r, "failed to un
19890 73 65 74 20 63 6f 6d 6d 69 74 20 68 6f 6f 6b 22  set commit hook"
198a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
198b0 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  rc = SQLiteError
198c0 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20  Code.Error;.... 
198d0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
198e0 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  t = false;..    
198f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
19900 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
19910 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
19920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
19980 69 6f 6e 20 55 70 64 61 74 65 20 48 6f 6f 6b 20  ion Update Hook 
19990 28 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29  (Per-Connection)
199a0 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
199b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
199c0 20 20 20 20 20 20 53 65 74 55 70 64 61 74 65 48        SetUpdateH
199d0 6f 6f 6b 28 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68  ook(null); /* th
199e0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
199f0 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  }..#if !NET_COMP
19a00 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
19a10 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
19a20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
19a30 74 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a  tion e)..#else..
19a40 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
19a50 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65 6e 64 69  xception)..#endi
19a60 66 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  f..        {..#i
19a70 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
19a80 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
19a90 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
19aa0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
19ab0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19ac0 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
19ad0 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74  teLine(HelperMet
19ae0 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
19af0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
19b00 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
19b10 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
19b20 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
19b30 20 20 20 20 20 20 20 20 20 22 46 61 69 6c 65 64           "Failed
19b40 20 74 6f 20 75 6e 73 65 74 20 75 70 64 61 74 65   to unset update
19b50 20 68 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20   hook: {0}",..  
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20    e)); /* throw 
19b80 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
19b90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
19ba0 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
19bb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19bc0 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
19bd0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
19be0 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
19bf0 20 20 20 20 20 20 20 20 20 20 41 70 70 65 6e 64            Append
19c00 45 72 72 6f 72 28 62 75 69 6c 64 65 72 2c 20 22  Error(builder, "
19c10 66 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20  failed to unset 
19c20 75 70 64 61 74 65 20 68 6f 6f 6b 22 29 3b 0d 0a  update hook");..
19c30 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
19c40 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
19c50 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20  .Error;....     
19c60 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
19c70 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
19c80 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
19c90 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
19ca0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19d00 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
19d10 41 75 74 68 6f 72 69 7a 65 72 20 48 6f 6f 6b 20  Authorizer Hook 
19d20 28 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29  (Per-Connection)
19d30 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
19d40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19d50 20 20 20 20 20 20 53 65 74 41 75 74 68 6f 72 69        SetAuthori
19d60 7a 65 72 48 6f 6f 6b 28 6e 75 6c 6c 29 3b 20 2f  zerHook(null); /
19d70 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
19d80 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f      }..#if !NET_
19d90 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
19da0 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
19db0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
19dc0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c  xception e)..#el
19dd0 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  se..        catc
19de0 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23  h (Exception)..#
19df0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b  endif..        {
19e00 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
19e10 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
19e20 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
19e30 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
19e40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19e50 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
19e60 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
19e70 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
19e80 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
19e90 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
19ea0 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
19eb0 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 61               "Fa
19ed0 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 61 75  iled to unset au
19ee0 74 68 6f 72 69 7a 65 72 20 68 6f 6f 6b 3a 20 7b  thorizer hook: {
19ef0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
19f00 20 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f            e)); /
19f10 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
19f20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19f30 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
19f40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
19f60 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
19f70 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64           }..#end
19f80 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
19f90 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75    AppendError(bu
19fa0 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74  ilder, "failed t
19fb0 6f 20 75 6e 73 65 74 20 61 75 74 68 6f 72 69 7a  o unset authoriz
19fc0 65 72 20 68 6f 6f 6b 22 29 3b 0d 0a 20 20 20 20  er hook");..    
19fd0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
19fe0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
19ff0 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  or;....         
1a000 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73     result = fals
1a010 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
1a020 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1a030 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
1a040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a090 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1a0a0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 6f 67      #region Prog
1a0b0 72 65 73 73 20 48 6f 6f 6b 20 28 50 65 72 2d 43  ress Hook (Per-C
1a0c0 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  onnection)..    
1a0d0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
1a0e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a0f0 53 65 74 50 72 6f 67 72 65 73 73 48 6f 6f 6b 28  SetProgressHook(
1a100 30 2c 20 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72  0, null); /* thr
1a110 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d  ow */..        }
1a120 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
1a130 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
1a140 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
1a150 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1a160 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20  ion e)..#else.. 
1a170 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
1a180 63 65 70 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66  ception)..#endif
1a190 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
1a1a0 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
1a1b0 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
1a1c0 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
1a1d0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1a1e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a1f0 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
1a200 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68  eLine(HelperMeth
1a210 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
1a220 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1a230 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
1a240 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
1a250 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1a260 20 20 20 20 20 20 20 20 22 46 61 69 6c 65 64 20          "Failed 
1a270 74 6f 20 75 6e 73 65 74 20 70 72 6f 67 72 65 73  to unset progres
1a280 73 20 68 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a 20  s hook: {0}",.. 
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77     e)); /* throw
1a2b0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1a2c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a2d0 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
1a2e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a2f0 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
1a300 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
1a310 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
1a320 20 20 20 20 20 20 20 20 20 20 20 41 70 70 65 6e             Appen
1a330 64 45 72 72 6f 72 28 62 75 69 6c 64 65 72 2c 20  dError(builder, 
1a340 22 66 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74  "failed to unset
1a350 20 70 72 6f 67 72 65 73 73 20 68 6f 6f 6b 22 29   progress hook")
1a360 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
1a370 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  c = SQLiteErrorC
1a380 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20  ode.Error;....  
1a390 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1a3a0 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
1a3b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
1a3c0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1a3d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1a3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1a430 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1a440 6f 6e 20 4c 6f 67 20 43 61 6c 6c 62 61 63 6b 20  on Log Callback 
1a450 28 47 6c 6f 62 61 6c 29 0d 0a 20 20 20 20 20 20  (Global)..      
1a460 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
1a470 20 4e 4f 54 45 3a 20 57 65 20 68 61 76 65 20 74   NOTE: We have t
1a480 6f 20 62 65 20 63 61 72 65 66 75 6c 20 68 65 72  o be careful her
1a490 65 20 62 65 63 61 75 73 65 20 74 68 65 20 6c 6f  e because the lo
1a4a0 67 20 63 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20  g callback..    
1a4b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20      //       is 
1a4c0 6e 6f 74 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69  not per-connecti
1a4d0 6f 6e 20 6f 6e 20 74 68 65 20 6e 61 74 69 76 65  on on the native
1a4e0 20 73 69 64 65 2e 20 20 49 74 20 73 68 6f 75 6c   side.  It shoul
1a4f0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  d..        //   
1a500 20 20 20 20 6f 6e 6c 79 20 62 65 20 75 6e 73 65      only be unse
1a510 74 20 62 79 20 74 68 69 73 20 6d 65 74 68 6f 64  t by this method
1a520 20 69 66 20 74 68 69 73 20 69 6e 73 74 61 6e 63   if this instanc
1a530 65 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f  e was..        /
1a540 2f 20 20 20 20 20 20 20 72 65 73 70 6f 6e 73 69  /       responsi
1a550 62 6c 65 20 66 6f 72 20 73 65 74 74 69 6e 67 20  ble for setting 
1a560 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  it...        //.
1a570 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 63  .        if (inc
1a580 6c 75 64 65 47 6c 6f 62 61 6c 20 26 26 20 5f 73  ludeGlobal && _s
1a590 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 29 0d 0a  etLogCallback)..
1a5a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a5b0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
1a5c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a5d0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1a5e0 65 45 72 72 6f 72 43 6f 64 65 20 72 63 32 20 3d  eErrorCode rc2 =
1a5f0 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28   SetLogCallback(
1a600 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20  null); /* throw 
1a610 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
1a620 20 20 20 20 20 20 69 66 20 28 72 63 32 20 21 3d        if (rc2 !=
1a630 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1a640 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
1a650 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
1a670 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64 65 72  endError(builder
1a680 2c 20 22 63 6f 75 6c 64 20 6e 6f 74 20 75 6e 73  , "could not uns
1a690 65 74 20 6c 6f 67 20 63 61 6c 6c 62 61 63 6b 22  et log callback"
1a6a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1a6b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 72 63 32          rc = rc2
1a6c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a6d0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
1a6e0 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
1a6f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1a700 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20           }..#if 
1a710 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
1a720 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
1a730 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ION..           
1a740 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1a750 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  n e)..#else..   
1a760 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
1a770 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65 6e 64  Exception)..#end
1a780 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
1a790 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  {..#if !NET_COMP
1a7a0 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
1a7b0 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1a7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a7e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a7f0 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
1a800 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
1a810 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
1a820 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
1a840 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
1a850 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a870 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75 6e 73    "Failed to uns
1a880 65 74 20 6c 6f 67 20 63 61 6c 6c 62 61 63 6b 3a  et log callback:
1a890 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8b0 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  e)); /* throw */
1a8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a8d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1a8e0 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
1a8f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a910 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
1a920 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a930 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
1a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a950 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c  AppendError(buil
1a960 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  der, "failed to 
1a970 75 6e 73 65 74 20 6c 6f 67 20 63 61 6c 6c 62 61  unset log callba
1a980 63 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ck");..         
1a990 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69         rc = SQLi
1a9a0 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
1a9b0 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  r;....          
1a9c0 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66        result = f
1a9d0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1a9e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1a9f0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1aa00 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
1aa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1aa70 20 20 20 20 20 20 69 66 20 28 21 72 65 73 75 6c        if (!resul
1aa80 74 20 26 26 20 63 61 6e 54 68 72 6f 77 29 0d 0a  t && canThrow)..
1aa90 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1aaa0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
1aab0 70 74 69 6f 6e 28 72 63 2c 20 62 75 69 6c 64 65  ption(rc, builde
1aac0 72 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  r.ToString());..
1aad0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1aae0 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d   result;..    }.
1aaf0 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1ab00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab50 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
1ab60 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1ab70 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 20 6e   /// Creates a n
1ab80 65 77 20 53 51 4c 69 74 65 20 62 61 63 6b 75 70  ew SQLite backup
1ab90 20 6f 62 6a 65 63 74 20 62 61 73 65 64 20 6f 6e   object based on
1aba0 20 74 68 65 20 70 72 6f 76 69 64 65 64 20 64 65   the provided de
1abb0 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f  stination..    /
1abc0 2f 2f 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  // database conn
1abd0 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75  ection.  The sou
1abe0 72 63 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  rce database con
1abf0 6e 65 63 74 69 6f 6e 20 69 73 20 74 68 65 20 6f  nection is the o
1ac00 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f  ne..    /// asso
1ac10 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
1ac20 20 6f 62 6a 65 63 74 2e 20 20 54 68 65 20 73 6f   object.  The so
1ac30 75 72 63 65 20 61 6e 64 20 64 65 73 74 69 6e 61  urce and destina
1ac40 74 69 6f 6e 20 64 61 74 61 62 61 73 65 0d 0a 20  tion database.. 
1ac50 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f     /// connectio
1ac60 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 74 68 65  ns cannot be the
1ac70 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   same...    /// 
1ac80 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1ac90 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1aca0 22 64 65 73 74 43 6e 6e 22 3e 54 68 65 20 64 65  "destCnn">The de
1acb0 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
1acc0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f  se connection.</
1acd0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1ace0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73  <param name="des
1acf0 74 4e 61 6d 65 22 3e 54 68 65 20 64 65 73 74 69  tName">The desti
1ad00 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20  nation database 
1ad10 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  name.</param>.. 
1ad20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1ad30 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e  me="sourceName">
1ad40 54 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  The source datab
1ad50 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d  ase name.</param
1ad60 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
1ad70 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20 63 72  rns>The newly cr
1ad80 65 61 74 65 64 20 62 61 63 6b 75 70 20 6f 62 6a  eated backup obj
1ad90 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ect.</returns>..
1ada0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1adb0 72 72 69 64 65 20 53 51 4c 69 74 65 42 61 63 6b  rride SQLiteBack
1adc0 75 70 20 49 6e 69 74 69 61 6c 69 7a 65 42 61 63  up InitializeBac
1add0 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
1ade0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64  LiteConnection d
1adf0 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20  estCnn,..       
1ae00 20 73 74 72 69 6e 67 20 64 65 73 74 4e 61 6d 65   string destName
1ae10 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
1ae20 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d 0a 20 20  g sourceName..  
1ae30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
1ae40 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
1ae50 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Cnn == null)..  
1ae60 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1ae70 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
1ae80 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 43  Exception("destC
1ae90 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nn");....       
1aea0 20 69 66 20 28 64 65 73 74 4e 61 6d 65 20 3d 3d   if (destName ==
1aeb0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1aec0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
1aed0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
1aee0 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65 22 29 3b  ion("destName");
1aef0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
1af00 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d 20 6e 75  sourceName == nu
1af10 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1af20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
1af30 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
1af40 28 22 73 6f 75 72 63 65 4e 61 6d 65 22 29 3b 0d  ("sourceName");.
1af50 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
1af60 65 33 20 64 65 73 74 53 71 6c 69 74 65 33 20 3d  e3 destSqlite3 =
1af70 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c 20 61 73   destCnn._sql as
1af80 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20 20   SQLite3;....   
1af90 20 20 20 20 20 69 66 20 28 64 65 73 74 53 71 6c       if (destSql
1afa0 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ite3 == null).. 
1afb0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1afc0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63   new ArgumentExc
1afd0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
1afe0 20 20 20 20 20 20 20 20 20 22 44 65 73 74 69 6e           "Destin
1aff0 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ation connection
1b000 20 68 61 73 20 6e 6f 20 77 72 61 70 70 65 72 2e   has no wrapper.
1b010 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1b020 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d      "destCnn");.
1b030 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
1b040 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
1b050 65 20 64 65 73 74 48 61 6e 64 6c 65 20 3d 20 64  e destHandle = d
1b060 65 73 74 53 71 6c 69 74 65 33 2e 5f 73 71 6c 3b  estSqlite3._sql;
1b070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
1b080 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d 20 6e 75  destHandle == nu
1b090 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1b0a0 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
1b0b0 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  entException(.. 
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b0d0 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e  Destination conn
1b0e0 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e  ection has an in
1b0f0 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 2c 0d  valid handle.",.
1b100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b110 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a   "destCnn");....
1b120 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
1b130 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 73  nnectionHandle s
1b140 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 20 5f 73  ourceHandle = _s
1b150 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ql;....        i
1b160 66 20 28 73 6f 75 72 63 65 48 61 6e 64 6c 65 20  f (sourceHandle 
1b170 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1b180 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1b190 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
1b1a0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 75              "Sou
1b1c0 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  rce connection h
1b1d0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
1b1e0 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
1b1f0 20 20 20 20 62 79 74 65 5b 5d 20 7a 44 65 73 74      byte[] zDest
1b200 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28 64 65  Name = ToUTF8(de
1b210 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  stName);..      
1b220 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75 72 63 65    byte[] zSource
1b230 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28 73 6f  Name = ToUTF8(so
1b240 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  urceName);....  
1b250 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
1b260 75 70 48 61 6e 64 6c 65 20 62 61 63 6b 75 70 48  upHandle backupH
1b270 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  andle = null;...
1b280 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
1b290 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b2a0 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
1b2b0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
1b2c0 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20          finally 
1b2d0 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
1b2e0 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
1b2f0 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  on. */..        
1b300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
1b310 6e 74 50 74 72 20 62 61 63 6b 75 70 20 3d 20 55  ntPtr backup = U
1b320 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1b330 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
1b340 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20 20 20 20  p_init(..       
1b350 20 20 20 20 20 20 20 20 20 64 65 73 74 48 61 6e           destHan
1b360 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20  dle, zDestName, 
1b370 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53  sourceHandle, zS
1b380 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ourceName);.... 
1b390 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62             if (b
1b3a0 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e  ackup == IntPtr.
1b3b0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
1b3c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b3d0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1b3e0 72 43 6f 64 65 20 72 65 73 75 6c 74 43 6f 64 65  rCode resultCode
1b3f0 20 3d 20 52 65 73 75 6c 74 43 6f 64 65 28 29 3b   = ResultCode();
1b400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b410 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 43 6f      if (resultCo
1b420 64 65 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  de != SQLiteErro
1b430 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b450 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
1b460 78 63 65 70 74 69 6f 6e 28 72 65 73 75 6c 74 43  xception(resultC
1b470 6f 64 65 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  ode, GetLastErro
1b480 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
1b490 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4b0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
1b4c0 65 45 78 63 65 70 74 69 6f 6e 28 22 66 61 69 6c  eException("fail
1b4d0 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ed to initialize
1b4e0 20 62 61 63 6b 75 70 22 29 3b 0d 0a 20 20 20 20   backup");..    
1b4f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1b500 20 20 20 20 20 20 20 20 20 62 61 63 6b 75 70 48           backupH
1b510 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  andle = new SQLi
1b520 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 28 64  teBackupHandle(d
1b530 65 73 74 48 61 6e 64 6c 65 2c 20 62 61 63 6b 75  estHandle, backu
1b540 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  p);..        }..
1b550 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1b560 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61  Connection.OnCha
1b570 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43  nged(null, new C
1b580 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72  onnectionEventAr
1b590 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
1b5a0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
1b5b0 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 43 72  nEventType.NewCr
1b5c0 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75  iticalHandle, nu
1b5d0 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
1b5e0 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c   null, null, nul
1b5f0 6c 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c  l, backupHandle,
1b600 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63   null, new objec
1b610 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  t[] {..         
1b620 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
1b630 33 29 2c 20 64 65 73 74 43 6e 6e 2c 20 64 65 73  3), destCnn, des
1b640 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 4e 61 6d  tName, sourceNam
1b650 65 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  e }));....      
1b660 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c    return new SQL
1b670 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  iteBackup(..    
1b680 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 62 61          this, ba
1b690 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65 73 74  ckupHandle, dest
1b6a0 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d  Handle, zDestNam
1b6b0 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c  e, sourceHandle,
1b6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 53  ..            zS
1b6d0 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  ourceName);..   
1b6e0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
1b6f0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1b700 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20   Copies up to N 
1b710 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73  pages from the s
1b720 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 74  ource database t
1b730 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  o the destinatio
1b740 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  n..    /// datab
1b750 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ase associated w
1b760 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
1b770 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  d backup object.
1b780 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1b790 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
1b7a0 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
1b7b0 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
1b7c0 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61  ject to use.</pa
1b7d0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
1b7e0 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65  aram name="nPage
1b7f0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
1b800 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
1b810 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74 69 76  to copy, negativ
1b820 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65  e to copy all re
1b830 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a  maining pages...
1b840 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1b850 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1b860 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a   name="retry">..
1b870 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74      /// Set to t
1b880 72 75 65 20 69 66 20 74 68 65 20 6f 70 65 72 61  rue if the opera
1b890 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
1b8a0 20 72 65 74 72 69 65 64 20 64 75 65 20 74 6f 20   retried due to 
1b8b0 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f  database..    //
1b8c0 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65 73  / locking issues
1b8d0 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73 65 74  ; otherwise, set
1b8e0 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20   to false...    
1b8f0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1b900 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1b910 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66  .    /// True if
1b920 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72 65 20   there are more 
1b930 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f 70 69  pages to be copi
1b940 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77  ed, false otherw
1b950 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ise...    /// </
1b960 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
1b970 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1b980 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75 70 28  bool StepBackup(
1b990 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1b9a0 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a  Backup backup,..
1b9b0 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61 67          int nPag
1b9c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  e,..        ref 
1b9d0 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20 20  bool retry..    
1b9e0 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
1b9f0 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 66 61        retry = fa
1ba00 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1ba10 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75  if (backup == nu
1ba20 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1ba30 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
1ba40 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
1ba50 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20  ("backup");.... 
1ba60 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
1ba70 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  kupHandle handle
1ba80 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74   = backup._sqlit
1ba90 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20  e_backup;....   
1baa0 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
1bab0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1bac0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1bad0 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
1bae0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
1bb00 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
1bb10 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
1bb20 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
1bb30 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72  IntPtr handlePtr
1bb40 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
1bb50 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
1bb60 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  Ptr == IntPtr.Ze
1bb70 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
1bb80 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
1bb90 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
1bba0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
1bbb0 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
1bbc0 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
1bbd0 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e  alid handle poin
1bbe0 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ter.");....     
1bbf0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1bc00 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
1bc10 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1bc20 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 68  e3_backup_step(h
1bc30 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67 65 29  andlePtr, nPage)
1bc40 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63 6b 75  ;..        backu
1bc50 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20 3d 20  p._stepResult = 
1bc60 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65  n; /* NOTE: Save
1bc70 20 66 6f 72 20 75 73 65 20 62 79 20 46 69 6e 69   for use by Fini
1bc80 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a  shBackup. */....
1bc90 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
1bca0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1bcb0 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  .Ok)..        {.
1bcc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1bcd0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
1bce0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
1bcf0 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
1bd00 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79  teErrorCode.Busy
1bd10 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1bd20 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20            retry 
1bd30 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1bd40 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
1bd50 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1bd60 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
1bd70 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
1bd80 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20  ode.Locked)..   
1bd90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1bda0 20 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65      retry = true
1bdb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
1bdc0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
1bdd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1bde0 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
1bdf0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f  LiteErrorCode.Do
1be00 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ne)..        {..
1be10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1be20 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1be30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
1be40 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
1be50 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1be60 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
1be70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
1be80 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
1be90 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
1bea0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1beb0 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
1bec0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
1bed0 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74  ages remaining t
1bee0 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d  o be copied from
1bef0 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20   the source..   
1bf00 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f   /// database to
1bf10 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e   the destination
1bf20 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69   database associ
1bf30 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
1bf40 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f  ecified..    ///
1bf50 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d   backup object..
1bf60 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1bf70 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
1bf80 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
1bf90 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
1bfa0 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70  ect to check.</p
1bfb0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1bfc0 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62  returns>The numb
1bfd0 65 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61  er of pages rema
1bfe0 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69  ining to be copi
1bff0 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ed.</returns>.. 
1c000 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
1c010 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69  ride int Remaini
1c020 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  ngBackup(..     
1c030 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
1c040 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20  backup..        
1c050 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1c060 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
1c070 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1c080 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
1c090 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
1c0a0 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
1c0b0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
1c0c0 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
1c0d0 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
1c0e0 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
1c0f0 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
1c100 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1c110 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1c120 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
1c130 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
1c150 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
1c160 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
1c170 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
1c180 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
1c190 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
1c1a0 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
1c1b0 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
1c1c0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
1c1d0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
1c1e0 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
1c1f0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
1c200 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
1c210 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
1c220 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
1c230 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
1c240 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
1c250 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1c260 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 72  sqlite3_backup_r
1c270 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50  emaining(handleP
1c280 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
1c290 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1c2a0 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
1c2b0 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
1c2c0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
1c2d0 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
1c2e0 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  se associated.. 
1c2f0 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20     /// with the 
1c300 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70  specified backup
1c310 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f   object...    //
1c320 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1c330 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1c340 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62  e="backup">The b
1c350 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20  ackup object to 
1c360 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  check.</param>..
1c370 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1c380 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65  >The total numbe
1c390 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
1c3a0 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
1c3b0 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  e.</returns>..  
1c3c0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1c3d0 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f 75 6e  ide int PageCoun
1c3e0 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  tBackup(..      
1c3f0 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
1c400 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29  ackup..        )
1c410 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1c420 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
1c430 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1c440 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
1c450 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
1c460 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
1c470 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
1c480 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
1c490 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
1c4a0 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
1c4b0 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
1c4c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1c4d0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1c4e0 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
1c4f0 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
1c510 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
1c520 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
1c530 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
1c540 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
1c550 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
1c560 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
1c570 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
1c580 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
1c590 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1c5a0 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1c5b0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
1c5c0 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
1c5d0 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
1c5e0 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
1c5f0 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nter.");....    
1c600 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
1c610 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1c620 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 70 61  qlite3_backup_pa
1c630 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74  gecount(handlePt
1c640 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  r);..    }....  
1c650 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1c660 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79  .    /// Destroy
1c670 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  s the backup obj
1c680 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63  ect, rolling bac
1c690 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74 68 61  k any backup tha
1c6a0 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20 20  t may be in..   
1c6b0 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20   /// progess... 
1c6c0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1c6d0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1c6e0 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
1c6f0 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
1c700 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70  t to destroy.</p
1c710 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
1c720 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
1c730 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28 0d  d FinishBackup(.
1c740 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
1c750 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20  ackup backup..  
1c760 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
1c770 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
1c780 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  up == null)..   
1c790 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1c7a0 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
1c7b0 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70  xception("backup
1c7c0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
1c7d0 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
1c7e0 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75  e handle = backu
1c7f0 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70  p._sqlite_backup
1c800 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
1c810 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (handle == null)
1c820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
1c830 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
1c840 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
1c850 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1c860 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
1c870 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
1c880 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
1c890 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
1c8a0 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c  andlePtr = handl
1c8b0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
1c8c0 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49   (handlePtr == I
1c8d0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
1c8e0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1c8f0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
1c900 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c920 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
1c930 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
1c940 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d  dle pointer.");.
1c950 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
1c960 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
1c970 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1c980 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
1c990 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1c9a0 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69  _backup_finish_i
1c9b0 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 50 74 72  nterop(handlePtr
1c9c0 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
1c9d0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1c9e0 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
1c9f0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1ca00 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
1ca10 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65  (handlePtr);..#e
1ca20 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 68 61  ndif..        ha
1ca30 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41 73  ndle.SetHandleAs
1ca40 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69  Invalid();....#i
1ca50 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a  f COUNT_HANDLE..
1ca60 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d          if ((n =
1ca70 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
1ca80 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20 62  e.Ok) || (n == b
1ca90 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c  ackup._stepResul
1caa0 74 29 29 20 68 61 6e 64 6c 65 2e 57 61 73 52 65  t)) handle.WasRe
1cab0 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e  leasedOk();..#en
1cac0 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  dif....        i
1cad0 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  f ((n != SQLiteE
1cae0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20  rrorCode.Ok) && 
1caf0 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74  (n != backup._st
1cb00 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20 20 20  epResult))..    
1cb10 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1cb20 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
1cb30 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
1cb40 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
1cb50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1cb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbb0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
1cbc0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1cbd0 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
1cbe0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
1cbf0 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
1cc00 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
1cc10 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
1cc20 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
1cc30 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1cc40 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
1cc50 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
1cc60 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74   boolean indicat
1cc70 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
1cc80 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ot the SQLite co
1cc90 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
1cca0 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69  een..    /// ini
1ccb0 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
1ccc0 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
1ccd0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
1cce0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
1ccf0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
1cd00 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  l IsInitialized(
1cd10 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1cd20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 49    return StaticI
1cd30 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d  sInitialized();.
1cd40 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
1cd50 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1cd60 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
1cd70 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
1cd80 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
1cd90 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
1cda0 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
1cdb0 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
1cdc0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1cdd0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
1cde0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
1cdf0 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69  / A boolean indi
1ce00 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
1ce10 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65  r not the SQLite
1ce20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
1ce30 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
1ce40 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
1ce50 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
1ce60 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
1ce70 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
1ce80 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f  ternal static bo
1ce90 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69 74 69  ol StaticIsIniti
1cea0 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d  alized()..    {.
1ceb0 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
1cec0 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20       // BUGFIX: 
1ced0 50 72 65 76 65 6e 74 20 72 61 63 65 73 20 77 69  Prevent races wi
1cee0 74 68 20 6f 74 68 65 72 20 74 68 72 65 61 64 73  th other threads
1cef0 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69 72 65   for this entire
1cf00 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20   block, due..   
1cf10 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
1cf20 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e 61 6c  to the try/final
1cf30 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20 20 53  ly semantics.  S
1cf40 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39 30 35  ee ticket [72905
1cf50 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20  c9a77]...       
1cf60 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63   //..        loc
1cf70 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20  k (syncRoot)..  
1cf80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1cf90 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1cfa0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61       // NOTE: Sa
1cfb0 76 65 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  ve the state of 
1cfc0 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73  the logging clas
1cfd0 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73 74 6f  s and then resto
1cfe0 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20  re it..         
1cff0 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66 74 65     //       afte
1d000 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20 74 6f  r we are done to
1d010 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74   avoid logging t
1d020 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20 65 72  oo many false er
1d030 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  rors...         
1d040 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d050 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61     bool savedEna
1d060 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67  bled = SQLiteLog
1d070 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20  .Enabled;..     
1d080 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
1d090 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73 65  .Enabled = false
1d0a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d0b0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1d0c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d0d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1d0e0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1d0f0 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20 5b 61  : This method [a
1d100 62 5d 75 73 65 73 20 74 68 65 20 66 61 63 74 20  b]uses the fact 
1d110 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c  that SQLite will
1d120 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20   always..       
1d130 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1d140 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1d150 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e  ERROR for any un
1d160 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61 74  known configurat
1d170 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20  ion option..    
1d180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1d190 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68       *unless* th
1d1a0 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
1d1b0 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
1d1c0 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a  n initialized...
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1e0 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68 61 74  //       In that
1d1f0 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20 61 6c   case it will al
1d200 77 61 79 73 20 72 65 74 75 72 6e 20 53 51 4c 49  ways return SQLI
1d210 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20  TE_MISUSE...    
1d220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d240 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1d250 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
1d260 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1d270 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20  _config_none(.. 
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d290 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f     SQLiteConfigO
1d2a0 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f  psEnum.SQLITE_CO
1d2b0 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20  NFIG_NONE);.... 
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1d2d0 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c  eturn (rc == SQL
1d2e0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73  iteErrorCode.Mis
1d2f0 75 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  use);..         
1d300 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1d310 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
1d320 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d330 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1d340 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61  Log.Enabled = sa
1d350 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20  vedEnabled;..   
1d360 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1d370 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
1d380 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1d390 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65  >..    /// Helpe
1d3a0 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65  r function to re
1d3b0 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20  trieve a column 
1d3c0 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20  of data from an 
1d3d0 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
1d3e0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1d3f0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
1d400 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74  param name="stmt
1d410 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  ">The statement 
1d420 62 65 69 6e 67 20 73 74 65 70 28 29 27 64 20 74  being step()'d t
1d430 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a  hrough</param>..
1d440 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1d450 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20  ame="flags">The 
1d460 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  flags associated
1d470 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63   with the connec
1d480 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  tion.</param>.. 
1d490 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1d4a0 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63  me="index">The c
1d4b0 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72  olumn index to r
1d4c0 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d  etrieve</param>.
1d4d0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1d4e0 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74  name="typ">The t
1d4f0 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74  ype of data cont
1d500 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c  ained in the col
1d510 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69  umn.  If Uniniti
1d520 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e  alized, this fun
1d530 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69  ction will retri
1d540 65 76 65 20 74 68 65 20 64 61 74 61 74 79 70 65  eve the datatype
1d550 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
1d560 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1d570 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
1d580 74 68 65 20 64 61 74 61 20 69 6e 20 74 68 65 20  the data in the 
1d590 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e  column</returns>
1d5a0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1d5b0 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47  verride object G
1d5c0 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74  etValue(SQLiteSt
1d5d0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
1d5e0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
1d5f0 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
1d600 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65  ndex, SQLiteType
1d610 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   typ)..    {..  
1d620 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
1d630 20 61 66 66 20 3d 20 74 79 70 2e 41 66 66 69 6e   aff = typ.Affin
1d640 69 74 79 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  ity;..      if (
1d650 61 66 66 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  aff == TypeAffin
1d660 69 74 79 2e 4e 75 6c 6c 29 20 72 65 74 75 72 6e  ity.Null) return
1d670 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a   DBNull.Value;..
1d680 20 20 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e        Type t = n
1d690 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ull;....      if
1d6a0 20 28 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62   (typ.Type != Db
1d6b0 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20  Type.Object)..  
1d6c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
1d6d0 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74   = SQLiteConvert
1d6e0 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70  .SQLiteTypeToTyp
1d6f0 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20  e(typ);..       
1d700 20 61 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66   aff = TypeToAff
1d710 69 6e 69 74 79 28 74 2c 20 66 6c 61 67 73 29 3b  inity(t, flags);
1d720 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
1d730 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
1d740 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1d750 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65  Flags.GetAllAsTe
1d760 78 74 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  xt) == SQLiteCon
1d770 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74  nectionFlags.Get
1d780 41 6c 6c 41 73 54 65 78 74 29 0d 0a 20 20 20 20  AllAsText)..    
1d790 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
1d7a0 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
1d7b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74  );....      swit
1d7c0 63 68 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20  ch (aff)..      
1d7d0 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
1d7e0 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f  TypeAffinity.Blo
1d7f0 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  b:..          if
1d800 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62   (typ.Type == Db
1d810 54 79 70 65 2e 47 75 69 64 20 26 26 20 74 79 70  Type.Guid && typ
1d820 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70  .Affinity == Typ
1d830 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d  eAffinity.Text).
1d840 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1d850 75 72 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74  urn new Guid(Get
1d860 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
1d870 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
1d880 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65   int n = (int)Ge
1d890 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64  tBytes(stmt, ind
1d8a0 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20  ex, 0, null, 0, 
1d8b0 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  0);..          b
1d8c0 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79  yte[] b = new by
1d8d0 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20  te[n];..        
1d8e0 20 20 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c    GetBytes(stmt,
1d8f0 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c   index, 0, b, 0,
1d900 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   n);....        
1d910 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d    if (typ.Type =
1d920 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26  = DbType.Guid &&
1d930 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20   n == 16)..     
1d940 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
1d950 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20  w Guid(b);....  
1d960 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62          return b
1d970 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
1d980 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74  TypeAffinity.Dat
1d990 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20  eTime:..        
1d9a0 20 20 72 65 74 75 72 6e 20 47 65 74 44 61 74 65    return GetDate
1d9b0 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  Time(stmt, index
1d9c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  );..        case
1d9d0 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
1d9e0 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  uble:..         
1d9f0 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20   if (t == null) 
1da00 72 65 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65  return GetDouble
1da10 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
1da20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1da30 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54   Convert.ChangeT
1da40 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74  ype(GetDouble(st
1da50 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e  mt, index), t, n
1da60 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63  ull);..        c
1da70 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
1da80 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20  .Int64:..       
1da90 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c     if (t == null
1daa0 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36  ) return GetInt6
1dab0 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  4(stmt, index);.
1dac0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
1dad0 20 3d 3d 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65   == typeof(Boole
1dae0 61 6e 29 29 20 72 65 74 75 72 6e 20 47 65 74 42  an)) return GetB
1daf0 6f 6f 6c 65 61 6e 28 73 74 6d 74 2c 20 69 6e 64  oolean(stmt, ind
1db00 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
1db10 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
1db20 53 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47  SByte)) return G
1db30 65 74 53 42 79 74 65 28 73 74 6d 74 2c 20 69 6e  etSByte(stmt, in
1db40 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
1db50 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
1db60 28 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47  (Byte)) return G
1db70 65 74 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64  etByte(stmt, ind
1db80 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
1db90 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
1dba0 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20 47  Int16)) return G
1dbb0 65 74 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e  etInt16(stmt, in
1dbc0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
1dbd0 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
1dbe0 28 55 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e  (UInt16)) return
1dbf0 20 47 65 74 55 49 6e 74 31 36 28 73 74 6d 74 2c   GetUInt16(stmt,
1dc00 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
1dc10 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
1dc20 65 6f 66 28 49 6e 74 33 32 29 29 20 72 65 74 75  eof(Int32)) retu
1dc30 72 6e 20 47 65 74 49 6e 74 33 32 28 73 74 6d 74  rn GetInt32(stmt
1dc40 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
1dc50 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
1dc60 70 65 6f 66 28 55 49 6e 74 33 32 29 29 20 72 65  peof(UInt32)) re
1dc70 74 75 72 6e 20 47 65 74 55 49 6e 74 33 32 28 73  turn GetUInt32(s
1dc80 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
1dc90 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
1dca0 20 74 79 70 65 6f 66 28 49 6e 74 36 34 29 29 20   typeof(Int64)) 
1dcb0 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28  return GetInt64(
1dcc0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
1dcd0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
1dce0 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 36 34 29  = typeof(UInt64)
1dcf0 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74  ) return GetUInt
1dd00 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  64(stmt, index);
1dd10 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
1dd20 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67  rn Convert.Chang
1dd30 65 54 79 70 65 28 47 65 74 49 6e 74 36 34 28 73  eType(GetInt64(s
1dd40 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20  tmt, index), t, 
1dd50 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
1dd60 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20  default:..      
1dd70 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65      return GetTe
1dd80 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  xt(stmt, index);
1dd90 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1dda0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
1ddb0 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
1ddc0 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28  tCursorForTable(
1ddd0 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1dde0 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e  stmt, int db, in
1ddf0 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20  t rootPage)..   
1de00 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
1de10 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
1de20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
1de30 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1de40 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f  e3_table_cursor_
1de50 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
1de60 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72  lite_stmt, db, r
1de70 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65  ootPage);..#else
1de80 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d  ..      return -
1de90 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  1;..#endif..    
1dea0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1deb0 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
1dec0 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f  GetRowIdForCurso
1ded0 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  r(SQLiteStatemen
1dee0 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73  t stmt, int curs
1def0 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  or)..    {..#if 
1df00 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
1df10 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77  ..      long row
1df20 69 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53  id = 0;..      S
1df30 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
1df40 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
1df50 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1df60 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74  cursor_rowid_int
1df70 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
1df80 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20  e_stmt, cursor, 
1df90 72 65 66 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20  ref rowid);..   
1dfa0 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c     if (rc == SQL
1dfb0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
1dfc0 20 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a   return rowid;..
1dfd0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ..      return 0
1dfe0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
1dff0 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69  return 0;..#endi
1e000 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
1e010 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1e020 65 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43  e void GetIndexC
1e030 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66  olumnExtendedInf
1e040 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62 61 73  o(string databas
1e050 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c  e, string index,
1e060 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20   string column, 
1e070 72 65 66 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65  ref int sortMode
1e080 2c 20 72 65 66 20 69 6e 74 20 6f 6e 45 72 72 6f  , ref int onErro
1e090 72 2c 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f  r, ref string co
1e0a0 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29  llationSequence)
1e0b0 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
1e0c0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
1e0d0 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c       IntPtr coll
1e0e0 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
1e0f0 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c  .      int colll
1e100 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53  en = 0;..      S
1e110 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
1e120 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d  c;....      rc =
1e130 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1e140 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
1e150 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69  ex_column_info_i
1e160 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
1e170 54 46 38 28 64 61 74 61 62 61 73 65 29 2c 20 54  TF8(database), T
1e180 6f 55 54 46 38 28 69 6e 64 65 78 29 2c 20 54 6f  oUTF8(index), To
1e190 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65  UTF8(column), re
1e1a0 66 20 73 6f 72 74 4d 6f 64 65 2c 20 72 65 66 20  f sortMode, ref 
1e1b0 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20 63 6f 6c  onError, ref col
1e1c0 6c 2c 20 72 65 66 20 63 6f 6c 6c 6c 65 6e 29 3b  l, ref colllen);
1e1d0 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 21  ..      if (rc !
1e1e0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
1e1f0 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
1e200 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
1e210 72 63 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20  rc, null);....  
1e220 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71      collationSeq
1e230 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74  uence = UTF8ToSt
1e240 72 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c  ring(coll, colll
1e250 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
1e260 20 20 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b     sortMode = 0;
1e270 0d 0a 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20  ..      onError 
1e280 3d 20 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c  = 2;..      coll
1e290 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20  ationSequence = 
1e2a0 22 42 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69  "BINARY";..#endi
1e2b0 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
1e2c0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1e2d0 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
1e2e0 65 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74  e FileControl(st
1e2f0 72 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e  ring zDbName, in
1e300 74 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72  t op, IntPtr pAr
1e310 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  g)..    {..     
1e320 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
1e330 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1e340 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
1e350 28 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65 20  (_sql, (zDbName 
1e360 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54 46  != null) ? ToUTF
1e370 38 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75 6c  8(zDbName) : nul
1e380 6c 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a 20  l, op, pArg);.. 
1e390 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a           }..  }..}..