System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 86583c170cd2d401516d99c5916f6066dff79abd:


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 39 38 2e 30 22 3b 0d 0a 23 65   "1.0.98.0";..#e
0920: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ndif....    /// 
0930: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0940: 2f 2f 20 54 68 65 20 6f 70 61 71 75 65 20 70 6f  // The opaque po
0950: 69 6e 74 65 72 20 72 65 74 75 72 6e 65 64 20 74  inter returned t
0960: 6f 20 75 73 20 62 79 20 74 68 65 20 73 71 6c 69  o us by the sqli
0970: 74 65 20 70 72 6f 76 69 64 65 72 0d 0a 20 20 20  te provider..   
0980: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0990: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 69  .    protected i
09a0: 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 43 6f  nternal SQLiteCo
09b0: 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 5f  nnectionHandle _
09c0: 73 71 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63  sql;..    protec
09d0: 74 65 64 20 73 74 72 69 6e 67 20 5f 66 69 6c 65  ted string _file
09e0: 4e 61 6d 65 3b 0d 0a 20 20 20 20 70 72 6f 74 65  Name;..    prote
09f0: 63 74 65 64 20 53 51 4c 69 74 65 43 6f 6e 6e 65  cted SQLiteConne
0a00: 63 74 69 6f 6e 46 6c 61 67 73 20 5f 66 6c 61 67  ctionFlags _flag
0a10: 73 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  s;..    protecte
0a20: 64 20 62 6f 6f 6c 20 5f 75 73 65 50 6f 6f 6c 3b  d bool _usePool;
0a30: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
0a40: 69 6e 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e  int _poolVersion
0a50: 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 69  ;..    private i
0a60: 6e 74 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 3b  nt _cancelCount;
0a70: 0d 0a 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35 20  ....#if (NET_35 
0a80: 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54  || NET_40 || NET
0a90: 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 29 20  _45 || NET_451) 
0aa0: 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  && !PLATFORM_COM
0ab0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
0ac0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
0ad0: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 3b  _buildingSchema;
0ae0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
0af0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0b00: 20 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d     /// The user-
0b10: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
0b20: 73 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20  s registered on 
0b30: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  this connection.
0b40: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0b50: 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  ry>..    protect
0b60: 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51  ed Dictionary<SQ
0b70: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
0b80: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
0b90: 63 74 69 6f 6e 3e 20 5f 66 75 6e 63 74 69 6f 6e  ction> _function
0ba0: 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  s;....#if INTERO
0bb0: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
0bc0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0bd0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
0be0: 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64 20  modules created 
0bf0: 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e 65  using this conne
0c00: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
0c10: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0c20: 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69 6f  protected Dictio
0c30: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
0c40: 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64 75  iteModule> _modu
0c50: 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  les;..#endif....
0c60: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
0cd0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0ce0: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68 65  / Constructs the
0cf0: 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f 20   object used to 
0d00: 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74 68  interact with th
0d10: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
0d20: 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 75  brary..    /// u
0d30: 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20 74  sing the UTF-8 t
0d40: 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a 20  ext encoding... 
0d50: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0d60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0d70: 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a 20  m name="fmt">.. 
0d80: 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65 54     /// The DateT
0d90: 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62 65  ime format to be
0da0: 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76 65   used when conve
0db0: 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61 6c  rting string val
0dc0: 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f 2f  ues to a..    //
0dd0: 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20 62  / DateTime and b
0de0: 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65 20  inding DateTime 
0df0: 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20  parameters...   
0e00: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
0e10: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e20: 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20 20  me="kind">..    
0e30: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
0e40: 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64 22  f="DateTimeKind"
0e50: 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20 77   /> to be used w
0e60: 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61 74  hen creating Dat
0e70: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0e80: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0e90: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0ea0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
0eb0: 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20  mtString">..    
0ec0: 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20 73  /// The format s
0ed0: 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  tring to be used
0ee0: 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61 6e   when parsing an
0ef0: 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61 74  d formatting Dat
0f00: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0f10: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0f20: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0f30: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
0f40: 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  b">..    /// The
0f50: 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 74   native handle t
0f60: 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64 20  o be associated 
0f70: 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73  with the databas
0f80: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
0f90: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
0fa0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0fb0: 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e  name="fileName">
0fc0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 75  ..    /// The fu
0fd0: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
0fe0: 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61 74  le name associat
0ff0: 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72 65  ed with <paramre
1000: 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e 0d  f name="db "/>..
1010: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1020: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1030: 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64 6c  m name="ownHandl
1040: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  e">..    /// Non
1050: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65 77  -zero if the new
1060: 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65 63  ly created objec
1070: 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c 20  t instance will 
1080: 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65 0d  need to dispose.
1090: 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61 72  .    /// of <par
10a0: 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22 20  amref name="db" 
10b0: 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e 6f  /> when it is no
10c0: 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e 0d   longer needed..
10d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
10e0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
10f0: 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20 20  SQLite3(..      
1100: 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d    SQLiteDateForm
1110: 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20 20  ats fmt,..      
1120: 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b    DateTimeKind k
1130: 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ind,..        st
1140: 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c 0d  ring fmtString,.
1150: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
1160: 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  db,..        str
1170: 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
1180: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e 48         bool ownH
1190: 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 29  andle..        )
11a0: 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28 66  ..      : base(f
11b0: 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72  mt, kind, fmtStr
11c0: 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ing)..    {..   
11d0: 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20 49       if (db != I
11e0: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
11f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1200: 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53      _sql = new S
1210: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
1220: 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61 6e  andle(db, ownHan
1230: 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle);..         
1240: 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 66     _fileName = f
1250: 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
1260: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
1270: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
1280: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
1290: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
12a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12b0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
12c0: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
12d0: 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
12e0: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
12f0: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c         null, nul
1300: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 66  l, null, _sql, f
1310: 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a  ileName, new obj
1320: 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ect[] {..       
1330: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
1340: 53 51 4c 69 74 65 33 29 2c 20 66 6d 74 2c 20 6b  SQLite3), fmt, k
1350: 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 2c 20  ind, fmtString, 
1360: 64 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  db, fileName,.. 
1370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1380: 77 6e 48 61 6e 64 6c 65 20 7d 29 29 3b 0d 0a 20  wnHandle }));.. 
1390: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
13a0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1400: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1410: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
1420: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
1430: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
1440: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
1450: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
1460: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
1470: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
1480: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
1490: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
14a0: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
14b0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
14c0: 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
14d0: 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
14e0: 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33  n(typeof(SQLite3
14f0: 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66  ).Name);..#endif
1500: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1570: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
1580: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69  override void Di
1590: 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f  spose(bool dispo
15a0: 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sing)..    {..  
15b0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
15c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15d0: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
15e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1600: 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67   //if (disposing
1610: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1620: 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20     //{..        
1630: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1670: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73      //    // dis
1680: 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73  pose managed res
1690: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b0: 2f 2f 20 20 20 20 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 0d 0a 20 20 20 20  //////////..    
16e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d              //}.
16f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1700: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
1730: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
1740: 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20  lease unmanaged 
1750: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
1760: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1770: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
17a0: 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c   INTEROP_VIRTUAL
17b0: 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20  _TABLE..        
17c0: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 4d          DisposeM
17d0: 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69  odules();..#endi
17e0: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
17f0: 20 20 20 20 20 43 6c 6f 73 65 28 66 61 6c 73 65       Close(false
1800: 29 3b 20 2f 2a 20 44 69 73 70 6f 73 69 6e 67 2c  ); /* Disposing,
1810: 20 63 61 6e 6e 6f 74 20 74 68 72 6f 77 2e 20 2a   cannot throw. *
1820: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  /..            }
1830: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1840: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
1850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1860: 20 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73       base.Dispos
1870: 65 28 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d  e(disposing);...
1880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
1890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
18a0: 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67  NOTE: Everything
18b0: 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79   should be fully
18c0: 20 64 69 73 70 6f 73 65 64 20 61 74 20 74 68 69   disposed at thi
18d0: 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20  s point...      
18e0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
18f0: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
1900: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1910: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  }..    }..    #e
1920: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1990: 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56  ...#if INTEROP_V
19a0: 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20  IRTUAL_TABLE..  
19b0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
19c0: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65  .    /// This me
19d0: 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f  thod attempts to
19e0: 20 64 69 73 70 6f 73 65 20 6f 66 20 61 6c 6c 20   dispose of all 
19f0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
1a00: 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  QLiteModule" /> 
1a10: 64 65 72 69 76 65 64 0d 0a 20 20 20 20 2f 2f 2f  derived..    ///
1a20: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1a30: 73 20 63 75 72 72 65 6e 74 6c 79 20 61 73 73 6f  s currently asso
1a40: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1a50: 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65 20  native database 
1a60: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
1a70: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1a80: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
1a90: 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73  d DisposeModules
1aa0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
1ab0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
1ac0: 2f 20 4e 4f 54 45 3a 20 49 66 20 61 6e 79 20 6d  / NOTE: If any m
1ad0: 6f 64 75 6c 65 73 20 77 65 72 65 20 63 72 65 61  odules were crea
1ae0: 74 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20  ted, attempt to 
1af0: 64 69 73 70 6f 73 65 20 6f 66 0d 0a 20 20 20 20  dispose of..    
1b00: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
1b10: 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f 64  m now.  This cod
1b20: 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f  e is designed to
1b30: 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e 67 0d   avoid throwing.
1b40: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
1b50: 20 20 65 78 63 65 70 74 69 6f 6e 73 20 75 6e 6c    exceptions unl
1b60: 65 73 73 20 74 68 65 20 44 69 73 70 6f 73 65 20  ess the Dispose 
1b70: 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
1b80: 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dule..        //
1b90: 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 74 68         itself th
1ba0: 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f  rows an exceptio
1bb0: 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  n...        //..
1bc0: 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64          if (_mod
1bd0: 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ules != null).. 
1be0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1bf0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b        foreach (K
1c00: 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69  eyValuePair<stri
1c10: 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ng, SQLiteModule
1c20: 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75 6c  > pair in _modul
1c30: 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es)..           
1c40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c50: 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65      SQLiteModule
1c60: 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e 56   module = pair.V
1c70: 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
1c80: 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
1c90: 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
1ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
1cd0: 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b  odule.Dispose();
1ce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1cf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  ...            _
1d00: 6d 6f 64 75 6c 65 73 2e 43 6c 65 61 72 28 29 3b  modules.Clear();
1d10: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1d20: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
1d30: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d90: 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69  /....    // It i
1da0: 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79 20 74  sn't necessary t
1db0: 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20 66 75  o cleanup any fu
1dc0: 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20 72 65  nctions we've re
1dd0: 67 69 73 74 65 72 65 64 2e 20 20 49 66 20 74 68  gistered.  If th
1de0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20  e connection..  
1df0: 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68 65    // goes to the
1e00: 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65 73   pool and is res
1e10: 75 72 72 65 63 74 65 64 20 6c 61 74 65 72 2c 20  urrected later, 
1e20: 72 65 2d 72 65 67 69 73 74 65 72 65 64 20 66 75  re-registered fu
1e30: 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65  nctions will ove
1e40: 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20 20 20  rwrite the..    
1e50: 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63  // previous func
1e60: 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c 69  tions.  The SQLi
1e70: 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65  teFunctionCookie
1e80: 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65  Handle will take
1e90: 20 63 61 72 65 20 6f 66 20 66 72 65 65 69 6e 67   care of freeing
1ea0: 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20   unmanaged..    
1eb0: 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62 65 6c  // resources bel
1ec0: 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20 70 72  onging to the pr
1ed0: 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73 74 65  eviously-registe
1ee0: 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a  red functions...
1ef0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1f00: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65  rride void Close
1f10: 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d  (bool canThrow).
1f20: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
1f30: 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d   (_sql != null).
1f40: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1f50: 20 20 20 20 69 66 20 28 21 5f 73 71 6c 2e 4f 77      if (!_sql.Ow
1f60: 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20 20 20 20  nHandle)..      
1f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f80: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c       _sql = null
1f90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1fa0: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20   return;..      
1fb0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fc0: 20 20 20 62 6f 6f 6c 20 75 6e 62 69 6e 64 46 75     bool unbindFu
1fd0: 6e 63 74 69 6f 6e 73 20 3d 20 28 28 5f 66 6c 61  nctions = ((_fla
1fe0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
1ff0: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e 62 69 6e  ctionFlags.Unbin
2000: 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43 6c 6f 73  dFunctionsOnClos
2010: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
2020: 20 20 20 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e      == SQLiteCon
2030: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e 62  nectionFlags.Unb
2040: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43 6c  indFunctionsOnCl
2050: 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2060: 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29     if (_usePool)
2070: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2090: 28 53 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65  (SQLiteBase.Rese
20a0: 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c  tConnection(_sql
20b0: 2c 20 5f 73 71 6c 2c 20 63 61 6e 54 68 72 6f 77  , _sql, canThrow
20c0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
20d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20e0: 20 20 20 20 20 20 20 69 66 20 28 75 6e 62 69 6e         if (unbin
20f0: 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20  dFunctions)..   
2100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2120: 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69          if (SQLi
2130: 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69 6e  teFunction.Unbin
2140: 64 41 6c 6c 46 75 6e 63 74 69 6f 6e 73 28 74 68  dAllFunctions(th
2150: 69 73 2c 20 5f 66 6c 61 67 73 2c 20 66 61 6c 73  is, _flags, fals
2160: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2170: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
2180: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
2190: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
21a0: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
21d0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
21e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
2200: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
2210: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
2220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2230: 20 20 20 20 20 20 20 20 20 20 22 55 6e 62 69 6e            "Unbin
2240: 64 46 75 6e 63 74 69 6f 6e 73 20 28 50 6f 6f 6c  dFunctions (Pool
2250: 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c  ) Success: {0}",
2260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2280: 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29  HandleToString()
2290: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
22d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22e0: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
22f0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2300: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2310: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
2320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2330: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
2340: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2360: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
2370: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
2380: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
2390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a0: 20 20 20 20 20 20 20 22 55 6e 62 69 6e 64 46 75         "UnbindFu
23b0: 6e 63 74 69 6f 6e 73 20 28 50 6f 6f 6c 29 20 46  nctions (Pool) F
23c0: 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20  ailure: {0}",.. 
23d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e               Han
23f0: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
2400: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2420: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2430: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e       }....#if IN
2440: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
2450: 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20  BLE..           
2460: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 4d 6f         DisposeMo
2470: 64 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66  dules();..#endif
2480: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2490: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
24a0: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f  ectionPool.Add(_
24b0: 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20  fileName, _sql, 
24c0: 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a  _poolVersion);..
24d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24e0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
24f0: 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e  tion.OnChanged(n
2500: 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74  ull, new Connect
2510: 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  ionEventArgs(.. 
2520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2530: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
2540: 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43  ctionEventType.C
2550: 6c 6f 73 65 64 54 6f 50 6f 6f 6c 2c 20 6e 75 6c  losedToPool, nul
2560: 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  l, null,..      
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2580: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c  null, null, _sql
2590: 2c 20 5f 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77  , _fileName, new
25a0: 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20   object[] {..   
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c0: 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
25d0: 33 29 2c 20 63 61 6e 54 68 72 6f 77 2c 20 5f 66  3), canThrow, _f
25e0: 69 6c 65 4e 61 6d 65 2c 20 5f 70 6f 6f 6c 56 65  ileName, _poolVe
25f0: 72 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23 69  rsion }));....#i
2600: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
2610: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
2620: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
2630: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
2640: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
2650: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
2670: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
2680: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
2690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a0: 20 20 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20    "Close (Pool) 
26b0: 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a  Success: {0}",..
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d0: 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74        HandleToSt
26e0: 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69  ring()));..#endi
26f0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
2700: 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d   }..#if !NET_COM
2710: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
2720: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
2730: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
2740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
2750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2760: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
2770: 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ine(String.Forma
2780: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2790: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
27a0: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
27b0: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6c               "Cl
27d0: 6f 73 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75  ose (Pool) Failu
27e0: 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  re: {0}",..     
27f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2800: 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28   HandleToString(
2810: 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  )));..          
2820: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
2830: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2840: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
2850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2860: 20 20 20 20 20 20 20 69 66 20 28 75 6e 62 69 6e         if (unbin
2870: 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20  dFunctions)..   
2880: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74 69  if (SQLiteFuncti
28b0: 6f 6e 2e 55 6e 62 69 6e 64 41 6c 6c 46 75 6e 63  on.UnbindAllFunc
28c0: 74 69 6f 6e 73 28 74 68 69 73 2c 20 5f 66 6c 61  tions(this, _fla
28d0: 67 73 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  gs, false))..   
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28f0: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
2900: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
2910: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
2920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2930: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
2940: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
2950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2960: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
2970: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
2980: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f    "UnbindFunctio
29b0: 6e 73 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22  ns Success: {0}"
29c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e               Han
29e0: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
29f0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a20: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
2a30: 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20           {..#if 
2a40: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
2a50: 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
2a60: 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ION..           
2a70: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2a80: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
2a90: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab0: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
2ac0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
2ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 62              "Unb
2af0: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 46 61 69  indFunctions Fai
2b00: 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  lure: {0}",..   
2b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b20: 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53         HandleToS
2b30: 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64  tring()));..#end
2b40: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
2b50: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2b60: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b70: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2e 44            _sql.D
2b80: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
2b90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ba0: 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a    _sql = null;..
2bb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2bc0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
2bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 21 4e 45  /////....#if !NE
2c30: 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
2c40: 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
2c50: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
2c60: 73 74 72 69 6e 67 20 48 61 6e 64 6c 65 54 6f 53  string HandleToS
2c70: 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 7b 0d 0a  tring()..    {..
2c80: 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
2c90: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2ca0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c         return "<
2cb0: 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20  null>";....     
2cc0: 20 20 20 72 65 74 75 72 6e 20 5f 73 71 6c 2e 54     return _sql.T
2cd0: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
2ce0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
2cf0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d50: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2d60: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
2d70: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
2d80: 72 20 6f 66 20 74 69 6d 65 73 20 74 68 65 20 3c  r of times the <
2d90: 73 65 65 20 63 72 65 66 3d 22 43 61 6e 63 65 6c  see cref="Cancel
2da0: 22 20 2f 3e 20 6d 65 74 68 6f 64 20 68 61 73 20  " /> method has 
2db0: 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 63 61  been..    /// ca
2dc0: 6c 6c 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  lled...    /// <
2dd0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
2de0: 72 69 76 61 74 65 20 69 6e 74 20 47 65 74 43 61  rivate int GetCa
2df0: 6e 63 65 6c 43 6f 75 6e 74 28 29 0d 0a 20 20 20  ncelCount()..   
2e00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
2e10: 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 43  rn Interlocked.C
2e20: 6f 6d 70 61 72 65 45 78 63 68 61 6e 67 65 28 72  ompareExchange(r
2e30: 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 2c  ef _cancelCount,
2e40: 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 7d 0d 0a   0, 0);..    }..
2e50: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
2e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
2ec0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2ed0: 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
2ee0: 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68  determines wheth
2ef0: 65 72 20 6f 72 20 6e 6f 74 20 61 20 3c 73 65 65  er or not a <see
2f00: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45 78 63   cref="SQLiteExc
2f10: 65 70 74 69 6f 6e 22 20 2f 3e 0d 0a 20 20 20 20  eption" />..    
2f20: 2f 2f 2f 20 77 69 74 68 20 61 20 72 65 74 75 72  /// with a retur
2f30: 6e 20 63 6f 64 65 20 6f 66 20 3c 73 65 65 20 63  n code of <see c
2f40: 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72  ref="SQLiteError
2f50: 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 22 20  Code.Interrupt" 
2f60: 2f 3e 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 2f  /> should..    /
2f70: 2f 2f 20 62 65 20 74 68 72 6f 77 6e 20 61 66 74  // be thrown aft
2f80: 65 72 20 6d 61 6b 69 6e 67 20 61 20 63 61 6c 6c  er making a call
2f90: 20 69 6e 74 6f 20 74 68 65 20 53 51 4c 69 74 65   into the SQLite
2fa0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
2fb0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2fc0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
2fd0: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
2fe0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 3c 73 65  on-zero if a <se
2ff0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45 78  e cref="SQLiteEx
3000: 63 65 70 74 69 6f 6e 22 20 2f 3e 20 74 6f 20 62  ception" /> to b
3010: 65 20 74 68 72 6f 77 6e 2e 20 20 54 68 69 73 20  e thrown.  This 
3020: 6d 65 74 68 6f 64 0d 0a 20 20 20 20 2f 2f 2f 20  method..    /// 
3030: 77 69 6c 6c 20 6f 6e 6c 79 20 72 65 74 75 72 6e  will only return
3040: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
3050: 20 3c 73 65 65 20 63 72 65 66 3d 22 43 61 6e 63   <see cref="Canc
3060: 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 20 77 61  el" /> method wa
3070: 73 20 63 61 6c 6c 65 64 0d 0a 20 20 20 20 2f 2f  s called..    //
3080: 2f 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 69  / one or more ti
3090: 6d 65 73 20 64 75 72 69 6e 67 20 61 20 63 61 6c  mes during a cal
30a0: 6c 20 69 6e 74 6f 20 74 68 65 20 53 51 4c 69 74  l into the SQLit
30b0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 28  e core library (
30c0: 65 2e 67 2e 20 77 68 65 6e 0d 0a 20 20 20 20 2f  e.g. when..    /
30d0: 2f 2f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 70  // the sqlite3_p
30e0: 72 65 70 61 72 65 2a 28 29 20 6f 72 20 73 71 6c  repare*() or sql
30f0: 69 74 65 33 5f 73 74 65 70 28 29 20 41 50 49 73  ite3_step() APIs
3100: 20 61 72 65 20 75 73 65 64 29 2e 0d 0a 20 20 20   are used)...   
3110: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
3120: 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f  .    private boo
3130: 6c 20 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72  l ShouldThrowFor
3140: 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d  Cancel()..    {.
3150: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3160: 47 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29  GetCancelCount()
3170: 20 3e 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   > 0;..    }....
3180: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
31f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
3200: 2f 20 52 65 73 65 74 73 20 74 68 65 20 76 61 6c  / Resets the val
3210: 75 65 20 6f 66 20 74 68 65 20 3c 73 65 65 20 63  ue of the <see c
3220: 72 65 66 3d 22 5f 63 61 6e 63 65 6c 43 6f 75 6e  ref="_cancelCoun
3230: 74 22 20 2f 3e 20 66 69 65 6c 64 2e 0d 0a 20 20  t" /> field...  
3240: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3250: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e  ..    private in
3260: 74 20 52 65 73 65 74 43 61 6e 63 65 6c 43 6f 75  t ResetCancelCou
3270: 6e 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nt()..    {..   
3280: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65       return Inte
3290: 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70 61 72 65 45  rlocked.CompareE
32a0: 78 63 68 61 6e 67 65 28 72 65 66 20 5f 63 61 6e  xchange(ref _can
32b0: 63 65 6c 43 6f 75 6e 74 2c 20 30 2c 20 5f 63 61  celCount, 0, _ca
32c0: 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a 20 20 20  ncelCount);..   
32d0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
32e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3340: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3350: 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73      /// Attempts
3360: 20 74 6f 20 69 6e 74 65 72 72 75 70 74 20 74 68   to interrupt th
3370: 65 20 71 75 65 72 79 20 63 75 72 72 65 6e 74 6c  e query currentl
3380: 79 20 65 78 65 63 75 74 69 6e 67 20 6f 6e 20 74  y executing on t
3390: 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  he associated.. 
33a0: 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 64 61     /// native da
33b0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
33c0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
33d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
33e0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
33f0: 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  id Cancel()..   
3400: 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20   {..      try.. 
3410: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3420: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
3430: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 66        }..      f
3440: 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20  inally /* NOTE: 
3450: 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70  Thread.Abort() p
3460: 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20  rotection. */.. 
3470: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3480: 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72  Interlocked.Incr
3490: 65 6d 65 6e 74 28 72 65 66 20 5f 63 61 6e 63 65  ement(ref _cance
34a0: 6c 43 6f 75 6e 74 29 3b 0d 0a 20 20 20 20 20 20  lCount);..      
34b0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
34c0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
34d0: 74 65 72 72 75 70 74 28 5f 73 71 6c 29 3b 0d 0a  terrupt(_sql);..
34e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
34f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3500: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
3510: 73 20 66 75 6e 63 74 69 6f 6e 20 62 69 6e 64 73  s function binds
3520: 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20   a user-defined 
3530: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20  function to the 
3540: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
3550: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
3560: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
3570: 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 41 74  name="functionAt
3580: 74 72 69 62 75 74 65 22 3e 0d 0a 20 20 20 20 2f  tribute">..    /
3590: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
35a0: 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  ="SQLiteFunction
35b0: 41 74 74 72 69 62 75 74 65 22 2f 3e 20 6f 62 6a  Attribute"/> obj
35c0: 65 63 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e  ect instance con
35d0: 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f  taining..    ///
35e0: 20 74 68 65 20 6d 65 74 61 64 61 74 61 20 66 6f   the metadata fo
35f0: 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  r the function t
3600: 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20 20 20  o be bound...   
3610: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
3620: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3630: 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22 3e 0d 0a  me="function">..
3640: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
3650: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e   cref="SQLiteFun
3660: 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65 63 74 20  ction"/> object 
3670: 69 6e 73 74 61 6e 63 65 20 74 68 61 74 20 69 6d  instance that im
3680: 70 6c 65 6d 65 6e 74 73 20 74 68 65 0d 0a 20 20  plements the..  
3690: 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 74    /// function t
36a0: 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20 20 20  o be bound...   
36b0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
36c0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
36d0: 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20  me="flags">..   
36e0: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 61   /// The flags a
36f0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
3700: 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63  he parent connec
3710: 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  tion object...  
3720: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
3730: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3740: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 46  rride void BindF
3750: 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
3760: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
3770: 41 74 74 72 69 62 75 74 65 20 66 75 6e 63 74 69  Attribute functi
3780: 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d 0a 20 20  onAttribute,..  
3790: 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63        SQLiteFunc
37a0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a  tion function,..
37b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
37c0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
37d0: 61 67 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ags..        )..
37e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
37f0: 66 20 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  f (functionAttri
3800: 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bute == null).. 
3810: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
3820: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
3830: 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63  lException("func
3840: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 29 3b  tionAttribute");
3850: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
3860: 66 75 6e 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  function == null
3870: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
3880: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
3890: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
38a0: 66 75 6e 63 74 69 6f 6e 22 29 3b 0d 0a 0d 0a 20  function");.... 
38b0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e         SQLiteFun
38c0: 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69  ction.BindFuncti
38d0: 6f 6e 28 74 68 69 73 2c 20 66 75 6e 63 74 69 6f  on(this, functio
38e0: 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e 63  nAttribute, func
38f0: 74 69 6f 6e 2c 20 66 6c 61 67 73 29 3b 0d 0a 0d  tion, flags);...
3900: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 66 75  .        if (_fu
3910: 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  nctions == null)
3920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66  ..            _f
3930: 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 44  unctions = new D
3940: 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65  ictionary<SQLite
3950: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
3960: 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  e, SQLiteFunctio
3970: 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n>();....       
3980: 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 66 75 6e 63   _functions[func
3990: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 5d 20 3d  tionAttribute] =
39a0: 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a 20 20 20 20   function;..    
39b0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
39c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
39d0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62 69  This function bi
39e0: 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e  nds a user-defin
39f0: 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74  ed function to t
3a00: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  he connection...
3a10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
3a20: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
3a30: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f  am name="functio
3a40: 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20  nAttribute">..  
3a50: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
3a60: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
3a70: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20  ionAttribute"/> 
3a80: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
3a90: 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20  containing..    
3aa0: 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61  /// the metadata
3ab0: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
3ac0: 6e 20 74 6f 20 62 65 20 75 6e 62 6f 75 6e 64 2e  n to be unbound.
3ad0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
3ae0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
3af0: 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e  am name="flags">
3b00: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c  ..    /// The fl
3b10: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
3b20: 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63  ith the parent c
3b30: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
3b40: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
3b50: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
3b60: 74 75 72 6e 73 3e 4e 6f 6e 2d 7a 65 72 6f 20 69  turns>Non-zero i
3b70: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77  f the function w
3b80: 61 73 20 75 6e 62 6f 75 6e 64 20 61 6e 64 20 72  as unbound and r
3b90: 65 6d 6f 76 65 64 2e 3c 2f 72 65 74 75 72 6e 73  emoved.</returns
3ba0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
3bb0: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 55 6e  override bool Un
3bc0: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  bindFunction(.. 
3bd0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e         SQLiteFun
3be0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66  ctionAttribute f
3bf0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3c00: 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ,..        SQLit
3c10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
3c20: 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20   flags..        
3c30: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3c40: 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41 74    if (functionAt
3c50: 74 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29  tribute == null)
3c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
3c70: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
3c80: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66  NullException("f
3c90: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3ca0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
3cb0: 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d  f (_functions ==
3cc0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
3cd0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
3ce0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
3cf0: 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63  iteFunction func
3d00: 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tion;....       
3d10: 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73 2e   if (_functions.
3d20: 54 72 79 47 65 74 56 61 6c 75 65 28 66 75 6e 63  TryGetValue(func
3d30: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 6f  tionAttribute, o
3d40: 75 74 20 66 75 6e 63 74 69 6f 6e 29 29 0d 0a 20  ut function)).. 
3d50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3d60: 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65        if (SQLite
3d70: 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69 6e 64 46  Function.UnbindF
3d80: 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
3da0: 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  is, functionAttr
3db0: 69 62 75 74 65 2c 20 66 75 6e 63 74 69 6f 6e 2c  ibute, function,
3dc0: 20 66 6c 61 67 73 29 20 26 26 0d 0a 20 20 20 20   flags) &&..    
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 75 6e              _fun
3de0: 63 74 69 6f 6e 73 2e 52 65 6d 6f 76 65 28 66 75  ctions.Remove(fu
3df0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29  nctionAttribute)
3e00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3e20: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
3e30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
3e40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3e50: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
3e60: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
3e70: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3e80: 65 20 73 74 72 69 6e 67 20 56 65 72 73 69 6f 6e  e string Version
3e90: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
3ea0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
3eb0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
3ec0: 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  teVersion;..    
3ed0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
3ee0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3ef0: 69 64 65 20 69 6e 74 20 56 65 72 73 69 6f 6e 4e  ide int VersionN
3f00: 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  umber..    {..  
3f10: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
3f20: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3f30: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75   SQLiteVersionNu
3f40: 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  mber;..      }..
3f50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
3f60: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72  ernal static str
3f70: 69 6e 67 20 44 65 66 69 6e 65 43 6f 6e 73 74 61  ing DefineConsta
3f80: 6e 74 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nts..    {..    
3f90: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
3fa0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3fb0: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65  StringBuilder re
3fc0: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
3fd0: 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20  gBuilder();..   
3fe0: 20 20 20 20 20 20 20 20 20 49 4c 69 73 74 3c 73           IList<s
3ff0: 74 72 69 6e 67 3e 20 6c 69 73 74 20 3d 20 53 51  tring> list = SQ
4000: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61  LiteDefineConsta
4010: 6e 74 73 2e 4f 70 74 69 6f 6e 4c 69 73 74 3b 0d  nts.OptionList;.
4020: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
4030: 66 20 28 6c 69 73 74 20 21 3d 20 6e 75 6c 6c 29  f (list != null)
4040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
4050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4060: 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67   foreach (string
4070: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 73 74   element in list
4080: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4090: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
40a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c            if (el
40b0: 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40d0: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
40e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
40f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
4100: 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  ult.Length > 0).
4110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4120: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
4130: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a  Append(' ');....
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4150: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
4160: 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  d(element);..   
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4180: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
4190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
41a0: 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72  urn result.ToStr
41b0: 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ing();..        
41c0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
41d0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
41e0: 73 74 72 69 6e 67 20 53 51 4c 69 74 65 56 65 72  string SQLiteVer
41f0: 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  sion..    {..   
4200: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
4210: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4220: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
4230: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4240: 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73  .sqlite3_libvers
4250: 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20  ion(), -1);..   
4260: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4270: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
4280: 69 63 20 69 6e 74 20 53 51 4c 69 74 65 56 65 72  ic int SQLiteVer
4290: 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20  sionNumber..    
42a0: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
42b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
42c0: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
42d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
42e0: 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d  3_libversion_num
42f0: 62 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ber();..      }.
4300: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
4310: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74  ternal static st
4320: 72 69 6e 67 20 53 51 4c 69 74 65 53 6f 75 72 63  ring SQLiteSourc
4330: 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  eId..    {..    
4340: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
4350: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
4360: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
4370: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4380: 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64  sqlite3_sourceid
4390: 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20  (), -1);..      
43a0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
43b0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
43c0: 73 74 72 69 6e 67 20 53 51 4c 69 74 65 43 6f 6d  string SQLiteCom
43d0: 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20  pileOptions..   
43e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
43f0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4400: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
4410: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
4420: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
4430: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4440: 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 0d   int index = 0;.
4450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
4460: 50 74 72 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73  Ptr zValue = Uns
4470: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4480: 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65  .sqlite3_compile
4490: 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78  option_get(index
44a0: 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ++);....        
44b0: 20 20 20 20 77 68 69 6c 65 20 28 7a 56 61 6c 75      while (zValu
44c0: 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e != IntPtr.Zero
44d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
44e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
44f0: 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e    if (result.Len
4500: 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
4510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4520: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
4530: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4540: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
4550: 6e 64 28 55 54 46 38 54 6f 53 74 72 69 6e 67 28  nd(UTF8ToString(
4560: 7a 56 61 6c 75 65 2c 20 2d 31 29 29 3b 0d 0a 20  zValue, -1));.. 
4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
4580: 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  Value = UnsafeNa
4590: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
45a0: 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
45b0: 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b 0d  n_get(index++);.
45c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
45d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
45e0: 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74  turn result.ToSt
45f0: 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20  ring();..       
4600: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
4610: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
4620: 20 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 56   string InteropV
4630: 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20  ersion..    {.. 
4640: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
4650: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
4660: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
4670: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4680: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
4690: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
46a0: 2e 69 6e 74 65 72 6f 70 5f 6c 69 62 76 65 72 73  .interop_libvers
46b0: 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 23 65 6c  ion(), -1);..#el
46c0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
46d0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65  return null;..#e
46e0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
46f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
4700: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74  ternal static st
4710: 72 69 6e 67 20 49 6e 74 65 72 6f 70 53 6f 75 72  ring InteropSour
4720: 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ceId..    {..   
4730: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
4740: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
4750: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
4760: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54         return UT
4770: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
4780: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 69  eNativeMethods.i
4790: 6e 74 65 72 6f 70 5f 73 6f 75 72 63 65 69 64 28  nterop_sourceid(
47a0: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ), -1);..#else..
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
47c0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66  rn null;..#endif
47d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
47e0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
47f0: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
4800: 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f   InteropCompileO
4810: 70 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20  ptions..    {.. 
4820: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
4830: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
4840: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
4850: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42           StringB
4860: 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20  uilder result = 
4870: 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65  new StringBuilde
4880: 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  r();..          
4890: 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b    int index = 0;
48a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
48b0: 74 50 74 72 20 7a 56 61 6c 75 65 20 3d 20 55 6e  tPtr zValue = Un
48c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
48d0: 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69 6c  s.interop_compil
48e0: 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65  eoption_get(inde
48f0: 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  x++);....       
4900: 20 20 20 20 20 77 68 69 6c 65 20 28 7a 56 61 6c       while (zVal
4910: 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue != IntPtr.Zer
4920: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
4930: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4940: 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65     if (result.Le
4950: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
4960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4970: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
4980: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4990: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
49a0: 65 6e 64 28 55 54 46 38 54 6f 53 74 72 69 6e 67  end(UTF8ToString
49b0: 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29 3b 0d 0a  (zValue, -1));..
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49d0: 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e  zValue = UnsafeN
49e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74  ativeMethods.int
49f0: 65 72 6f 70 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  erop_compileopti
4a00: 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b  on_get(index++);
4a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4a20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
4a30: 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53  eturn result.ToS
4a40: 74 72 69 6e 67 28 29 3b 0d 0a 23 65 6c 73 65 0d  tring();..#else.
4a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4a60: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69  urn null;..#endi
4a70: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  f..        }..  
4a80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4a90: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
4aa0: 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20  l AutoCommit..  
4ab0: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
4ac0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4ad0: 20 72 65 74 75 72 6e 20 49 73 41 75 74 6f 63 6f   return IsAutoco
4ae0: 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f 73 71 6c 29  mmit(_sql, _sql)
4af0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
4b00: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4b10: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
4b20: 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 0d  LastInsertRowId.
4b30: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
4b40: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  t..      {..#if 
4b50: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
4b60: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
4b70: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
4b80: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4b90: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
4ba0: 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c 29 3b 0d  rt_rowid(_sql);.
4bb0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
4bc0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
4bd0: 20 6c 6f 6e 67 20 72 6f 77 49 64 20 3d 20 30 3b   long rowId = 0;
4be0: 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
4bf0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4c00: 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
4c10: 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28  t_rowid_interop(
4c20: 5f 73 71 6c 2c 20 72 65 66 20 72 6f 77 49 64 29  _sql, ref rowId)
4c30: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
4c40: 6e 20 72 6f 77 49 64 3b 0d 0a 23 65 6c 73 65 0d  n rowId;..#else.
4c50: 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e  .        throw n
4c60: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
4c70: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
4c80: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a  endif..      }..
4c90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4ca0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
4cb0: 6e 74 20 43 68 61 6e 67 65 73 0d 0a 20 20 20 20  nt Changes..    
4cc0: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
4cd0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
4ce0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
4cf0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
4d00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4d10: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 5f  sqlite3_changes_
4d20: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 29 3b 0d 0a  interop(_sql);..
4d30: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 72  #else..        r
4d40: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
4d50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4d60: 33 5f 63 68 61 6e 67 65 73 28 5f 73 71 6c 29 3b  3_changes(_sql);
4d70: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
4d80: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
4d90: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
4da0: 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 55 73 65  e long MemoryUse
4db0: 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  d..    {..      
4dc0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
4dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4de0: 74 75 72 6e 20 53 74 61 74 69 63 4d 65 6d 6f 72  turn StaticMemor
4df0: 79 55 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  yUsed;..        
4e00: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
4e10: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
4e20: 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65 6d 6f 72  long StaticMemor
4e30: 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  yUsed..    {..  
4e40: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
4e50: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
4e60: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
4e70: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
4e80: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
4e90: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4ea0: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64  ite3_memory_used
4eb0: 28 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ();..#elif !SQLI
4ec0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
4ed0: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79           long by
4ee0: 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  tes = 0;..      
4ef0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
4f00: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4f10: 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 5f 69 6e  3_memory_used_in
4f20: 74 65 72 6f 70 28 72 65 66 20 62 79 74 65 73 29  terop(ref bytes)
4f30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
4f40: 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65  eturn bytes;..#e
4f50: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
4f60: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
4f70: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
4f80: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
4f90: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
4fa0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4fb0: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65  override long Me
4fc0: 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20  moryHighwater.. 
4fd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
4fe0: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
4ff0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5000: 20 53 74 61 74 69 63 4d 65 6d 6f 72 79 48 69 67   StaticMemoryHig
5010: 68 77 61 74 65 72 3b 0d 0a 20 20 20 20 20 20 20  hwater;..       
5020: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
5030: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
5040: 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65 6d 6f   long StaticMemo
5050: 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20 20 20  ryHighwater..   
5060: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
5070: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
5080: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
5090: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
50a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
50b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
50c0: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
50d0: 79 5f 68 69 67 68 77 61 74 65 72 28 30 29 3b 0d  y_highwater(0);.
50e0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
50f0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
5100: 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65 73 20       long bytes 
5110: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
5120: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
5130: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65  thods.sqlite3_me
5140: 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 5f 69  mory_highwater_i
5150: 6e 74 65 72 6f 70 28 30 2c 20 72 65 66 20 62 79  nterop(0, ref by
5160: 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tes);..         
5170: 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b     return bytes;
5180: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
5190: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
51a0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
51b0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
51c0: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  f..        }..  
51d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
51e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
51f0: 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  / Returns non-ze
5200: 72 6f 20 69 66 20 74 68 65 20 75 6e 64 65 72 6c  ro if the underl
5210: 79 69 6e 67 20 6e 61 74 69 76 65 20 63 6f 6e 6e  ying native conn
5220: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73  ection handle is
5230: 20 6f 77 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f 20   owned..    /// 
5240: 62 79 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65  by this instance
5250: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
5260: 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72  mary>..    inter
5270: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
5280: 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20  l OwnHandle..   
5290: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
52a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
52b0: 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
52c0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
52d0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
52e0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
52f0: 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63 74  tion("no connect
5300: 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76 61 69 6c  ion handle avail
5310: 61 62 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  able");....     
5320: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73         return _s
5330: 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 3b 0d 0a 20  ql.OwnHandle;.. 
5340: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
5350: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
5360: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
5370: 74 75 72 6e 73 20 74 68 65 20 6c 6f 67 69 63 61  turns the logica
5380: 6c 20 6c 69 73 74 20 6f 66 20 66 75 6e 63 74 69  l list of functi
5390: 6f 6e 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ons associated w
53a0: 69 74 68 20 74 68 69 73 20 63 6f 6e 6e 65 63 74  ith this connect
53b0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
53c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
53d0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
53e0: 49 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69  IDictionary<SQLi
53f0: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
5400: 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74  ute, SQLiteFunct
5410: 69 6f 6e 3e 20 46 75 6e 63 74 69 6f 6e 73 0d 0a  ion> Functions..
5420: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
5430: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 66 75 6e  et { return _fun
5440: 63 74 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 7d  ctions; }..    }
5450: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5460: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
5470: 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4d 65 6d  ErrorCode SetMem
5480: 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c 20 76  oryStatus(bool v
5490: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
54a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61        return Sta
54b0: 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61 74  ticSetMemoryStat
54c0: 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  us(value);..    
54d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
54e0: 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 45  l static SQLiteE
54f0: 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69 63 53  rrorCode StaticS
5500: 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62  etMemoryStatus(b
5510: 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ool value)..    
5520: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
5530: 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
5540: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5550: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66  ods.sqlite3_conf
5560: 69 67 5f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20  ig_int(..       
5570: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
5580: 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  gOpsEnum.SQLITE_
5590: 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53  CONFIG_MEMSTATUS
55a0: 2c 20 76 61 6c 75 65 20 3f 20 31 20 3a 20 30 29  , value ? 1 : 0)
55b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
55c0: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
55d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
55e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74  ry>..    /// Att
55f0: 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 61 73  empts to free as
5600: 20 6d 75 63 68 20 68 65 61 70 20 6d 65 6d 6f 72   much heap memor
5610: 79 20 61 73 20 70 6f 73 73 69 62 6c 65 20 66 6f  y as possible fo
5620: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  r the database c
5630: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
5640: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5650: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
5660: 3e 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69  >A standard SQLi
5670: 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 28  te return code (
5680: 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75  i.e. zero for su
5690: 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65  ccess and non-ze
56a0: 72 6f 20 66 6f 72 20 66 61 69 6c 75 72 65 29 2e  ro for failure).
56b0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
56c0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
56d0: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
56e0: 65 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28  e ReleaseMemory(
56f0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5700: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
5710: 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
5720: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5730: 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65  e3_db_release_me
5740: 6d 6f 72 79 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  mory(_sql);..   
5750: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d       return rc;.
5760: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
5770: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5780: 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f   /// Attempts to
5790: 20 66 72 65 65 20 4e 20 62 79 74 65 73 20 6f 66   free N bytes of
57a0: 20 68 65 61 70 20 6d 65 6d 6f 72 79 20 62 79 20   heap memory by 
57b0: 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 6e 6f 6e  deallocating non
57c0: 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f 72  -essential memor
57d0: 79 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63  y..    /// alloc
57e0: 61 74 69 6f 6e 73 20 68 65 6c 64 20 62 79 20 74  ations held by t
57f0: 68 65 20 64 61 74 61 62 61 73 65 20 6c 69 62 72  he database libr
5800: 61 72 79 2e 20 4d 65 6d 6f 72 79 20 75 73 65 64  ary. Memory used
5810: 20 74 6f 20 63 61 63 68 65 20 64 61 74 61 62 61   to cache databa
5820: 73 65 20 70 61 67 65 73 0d 0a 20 20 20 20 2f 2f  se pages..    //
5830: 2f 20 74 6f 20 69 6d 70 72 6f 76 65 20 70 65 72  / to improve per
5840: 66 6f 72 6d 61 6e 63 65 20 69 73 20 61 6e 20 65  formance is an e
5850: 78 61 6d 70 6c 65 20 6f 66 20 6e 6f 6e 2d 65 73  xample of non-es
5860: 73 65 6e 74 69 61 6c 20 6d 65 6d 6f 72 79 2e 20  sential memory. 
5870: 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70   This is a no-op
5880: 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e  ..    /// return
5890: 69 6e 67 20 7a 65 72 6f 20 69 66 20 74 68 65 20  ing zero if the 
58a0: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
58b0: 61 72 79 20 77 61 73 20 6e 6f 74 20 63 6f 6d 70  ary was not comp
58c0: 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 63 6f  iled with the co
58d0: 6d 70 69 6c 65 2d 74 69 6d 65 0d 0a 20 20 20 20  mpile-time..    
58e0: 2f 2f 2f 20 6f 70 74 69 6f 6e 20 53 51 4c 49 54  /// option SQLIT
58f0: 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  E_ENABLE_MEMORY_
5900: 4d 41 4e 41 47 45 4d 45 4e 54 2e 20 20 4f 70 74  MANAGEMENT.  Opt
5910: 69 6f 6e 61 6c 6c 79 2c 20 61 74 74 65 6d 70 74  ionally, attempt
5920: 73 20 74 6f 20 72 65 73 65 74 20 61 6e 64 2f 6f  s to reset and/o
5930: 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6d 70 61  r..    /// compa
5940: 63 74 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74  ct the Win32 nat
5950: 69 76 65 20 68 65 61 70 2c 20 69 66 20 61 70 70  ive heap, if app
5960: 6c 69 63 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  licable...    //
5970: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
5980: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5990: 65 3d 22 6e 42 79 74 65 73 22 3e 0d 0a 20 20 20  e="nBytes">..   
59a0: 20 2f 2f 2f 20 54 68 65 20 72 65 71 75 65 73 74   /// The request
59b0: 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  ed number of byt
59c0: 65 73 20 74 6f 20 66 72 65 65 2e 0d 0a 20 20 20  es to free...   
59d0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
59e0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
59f0: 6d 65 3d 22 72 65 73 65 74 22 3e 0d 0a 20 20 20  me="reset">..   
5a00: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f   /// Non-zero to
5a10: 20 61 74 74 65 6d 70 74 20 61 20 68 65 61 70 20   attempt a heap 
5a20: 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  reset...    /// 
5a30: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
5a40: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
5a50: 6f 6d 70 61 63 74 22 3e 0d 0a 20 20 20 20 2f 2f  ompact">..    //
5a60: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 61 74  / Non-zero to at
5a70: 74 65 6d 70 74 20 68 65 61 70 20 63 6f 6d 70 61  tempt heap compa
5a80: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
5a90: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
5aa0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
5ab0: 46 72 65 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Free">..    /// 
5ac0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  The number of by
5ad0: 74 65 73 20 61 63 74 75 61 6c 6c 79 20 66 72 65  tes actually fre
5ae0: 65 64 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  ed.  This value 
5af0: 6d 61 79 20 62 65 20 7a 65 72 6f 2e 0d 0a 20 20  may be zero...  
5b00: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
5b10: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5b20: 61 6d 65 3d 22 72 65 73 65 74 4f 6b 22 3e 0d 0a  ame="resetOk">..
5b30: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c      /// This val
5b40: 75 65 20 77 69 6c 6c 20 62 65 20 6e 6f 6e 2d 7a  ue will be non-z
5b50: 65 72 6f 20 69 66 20 74 68 65 20 68 65 61 70 20  ero if the heap 
5b60: 72 65 73 65 74 20 77 61 73 20 73 75 63 63 65 73  reset was succes
5b70: 73 66 75 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sful...    /// <
5b80: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
5b90: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 4c   <param name="nL
5ba0: 61 72 67 65 73 74 22 3e 0d 0a 20 20 20 20 2f 2f  argest">..    //
5bb0: 2f 20 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  / The size of th
5bc0: 65 20 6c 61 72 67 65 73 74 20 63 6f 6d 6d 69 74  e largest commit
5bd0: 74 65 64 20 66 72 65 65 20 62 6c 6f 63 6b 20 69  ted free block i
5be0: 6e 20 74 68 65 20 68 65 61 70 2c 20 69 6e 20 62  n the heap, in b
5bf0: 79 74 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ytes...    /// T
5c00: 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  his value will b
5c10: 65 20 7a 65 72 6f 20 75 6e 6c 65 73 73 20 68 65  e zero unless he
5c20: 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 20 69 73  ap compaction is
5c30: 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20 20 20 2f   enabled...    /
5c40: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
5c50: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
5c60: 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
5c70: 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
5c80: 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72 6f   code (i.e. zero
5c90: 20 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e 64   for success and
5ca0: 20 6e 6f 6e 2d 7a 65 72 6f 0d 0a 20 20 20 20 2f   non-zero..    /
5cb0: 2f 2f 20 66 6f 72 20 66 61 69 6c 75 72 65 29 2e  // for failure).
5cc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
5cd0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
5ce0: 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65  al static SQLite
5cf0: 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69 63  ErrorCode Static
5d00: 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28 0d 0a  ReleaseMemory(..
5d10: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 42 79 74          int nByt
5d20: 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  es,..        boo
5d30: 6c 20 72 65 73 65 74 2c 0d 0a 20 20 20 20 20 20  l reset,..      
5d40: 20 20 62 6f 6f 6c 20 63 6f 6d 70 61 63 74 2c 0d    bool compact,.
5d50: 0a 20 20 20 20 20 20 20 20 72 65 66 20 69 6e 74  .        ref int
5d60: 20 6e 46 72 65 65 2c 0d 0a 20 20 20 20 20 20 20   nFree,..       
5d70: 20 72 65 66 20 62 6f 6f 6c 20 72 65 73 65 74 4f   ref bool resetO
5d80: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  k,..        ref 
5d90: 75 69 6e 74 20 6e 4c 61 72 67 65 73 74 0d 0a 20  uint nLargest.. 
5da0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
5db0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
5dc0: 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 53 51  rrorCode rc = SQ
5dd0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
5de0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ;....        int
5df0: 20 6e 46 72 65 65 4c 6f 63 61 6c 20 3d 20 55 6e   nFreeLocal = Un
5e00: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5e10: 73 2e 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  s.sqlite3_releas
5e20: 65 5f 6d 65 6d 6f 72 79 28 6e 42 79 74 65 73 29  e_memory(nBytes)
5e30: 3b 0d 0a 20 20 20 20 20 20 20 20 75 69 6e 74 20  ;..        uint 
5e40: 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 20 3d 20  nLargestLocal = 
5e50: 30 3b 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  0;..        bool
5e60: 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 20 3d 20   resetOkLocal = 
5e70: 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 44  false;....#if !D
5e80: 45 42 55 47 20 26 26 20 57 49 4e 44 4f 57 53 20  EBUG && WINDOWS 
5e90: 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 75 6c 64 20  // NOTE: Should 
5ea0: 62 65 20 22 57 49 4e 33 32 48 45 41 50 20 26 26  be "WIN32HEAP &&
5eb0: 20 21 4d 45 4d 44 45 42 55 47 20 26 26 20 57 49   !MEMDEBUG && WI
5ec0: 4e 44 4f 57 53 22 0d 0a 20 20 20 20 20 20 20 20  NDOWS"..        
5ed0: 69 66 20 28 28 72 63 20 3d 3d 20 53 51 4c 69 74  if ((rc == SQLit
5ee0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26  eErrorCode.Ok) &
5ef0: 26 20 72 65 73 65 74 29 0d 0a 20 20 20 20 20 20  & reset)..      
5f00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5f10: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
5f20: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5f30: 33 5f 77 69 6e 33 32 5f 72 65 73 65 74 5f 68 65  3_win32_reset_he
5f40: 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ap();....       
5f50: 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53       if (rc == S
5f60: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
5f70: 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
5f80: 20 20 20 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c      resetOkLocal
5f90: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5fa0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
5fb0: 66 20 28 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  f ((rc == SQLite
5fc0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26  ErrorCode.Ok) &&
5fd0: 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20   compact)..     
5fe0: 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61         rc = Unsa
5ff0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6000: 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 63 6f  sqlite3_win32_co
6010: 6d 70 61 63 74 5f 68 65 61 70 28 72 65 66 20 6e  mpact_heap(ref n
6020: 4c 61 72 67 65 73 74 4c 6f 63 61 6c 29 3b 0d 0a  LargestLocal);..
6030: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 69  #else..        i
6040: 66 20 28 72 65 73 65 74 20 7c 7c 20 63 6f 6d 70  f (reset || comp
6050: 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  act)..          
6060: 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72    rc = SQLiteErr
6070: 6f 72 43 6f 64 65 2e 4e 6f 74 46 6f 75 6e 64 3b  orCode.NotFound;
6080: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
6090: 20 20 20 20 6e 46 72 65 65 20 3d 20 6e 46 72 65      nFree = nFre
60a0: 65 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20 20 20 20  eLocal;..       
60b0: 20 6e 4c 61 72 67 65 73 74 20 3d 20 6e 4c 61 72   nLargest = nLar
60c0: 67 65 73 74 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20  gestLocal;..    
60d0: 20 20 20 20 72 65 73 65 74 4f 6b 20 3d 20 72 65      resetOk = re
60e0: 73 65 74 4f 6b 4c 6f 63 61 6c 3b 0d 0a 0d 0a 20  setOkLocal;.... 
60f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
6100: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6110: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6120: 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e 20     /// Shutdown 
6130: 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e  the SQLite engin
6140: 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
6150: 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77 69   be restarted wi
6160: 74 68 20 64 69 66 66 65 72 65 6e 74 0d 0a 20 20  th different..  
6170: 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61 74    /// configurat
6180: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 20 57 65  ion options.  We
6190: 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f 20   depend on auto 
61a0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 74  initialization t
61b0: 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20 20  o recover...    
61c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
61d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
61e0: 3e 52 65 74 75 72 6e 73 20 61 20 73 74 61 6e 64  >Returns a stand
61f0: 61 72 64 20 53 51 4c 69 74 65 20 72 65 73 75 6c  ard SQLite resul
6200: 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75 72 6e 73  t code.</returns
6210: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
6220: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
6230: 72 72 6f 72 43 6f 64 65 20 53 68 75 74 64 6f 77  rrorCode Shutdow
6240: 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  n()..    {..    
6250: 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
6260: 63 53 68 75 74 64 6f 77 6e 28 66 61 6c 73 65 29  cShutdown(false)
6270: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6280: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6290: 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e 20     /// Shutdown 
62a0: 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e  the SQLite engin
62b0: 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
62c0: 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77 69   be restarted wi
62d0: 74 68 20 64 69 66 66 65 72 65 6e 74 0d 0a 20 20  th different..  
62e0: 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61 74    /// configurat
62f0: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 20 57 65  ion options.  We
6300: 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f 20   depend on auto 
6310: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 74  initialization t
6320: 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20 20  o recover...    
6330: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
6340: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
6350: 61 6d 65 3d 22 64 69 72 65 63 74 6f 72 69 65 73  ame="directories
6360: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  ">..    /// Non-
6370: 7a 65 72 6f 20 74 6f 20 72 65 73 65 74 20 74 68  zero to reset th
6380: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  e database and t
6390: 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
63a0: 72 69 65 73 20 74 6f 20 74 68 65 69 72 0d 0a 20  ries to their.. 
63b0: 20 20 20 2f 2f 2f 20 64 65 66 61 75 6c 74 20 76     /// default v
63c0: 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f  alues, which sho
63d0: 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20  uld be null for 
63e0: 62 6f 74 68 2e 20 20 54 68 69 73 20 70 61 72 61  both.  This para
63f0: 6d 65 74 65 72 20 68 61 73 20 6e 6f 0d 0a 20 20  meter has no..  
6400: 20 20 2f 2f 2f 20 65 66 66 65 63 74 20 6f 6e 20    /// effect on 
6410: 6e 6f 6e 2d 57 69 6e 64 6f 77 73 20 6f 70 65 72  non-Windows oper
6420: 61 74 69 6e 67 20 73 79 73 74 65 6d 73 2e 0d 0a  ating systems...
6430: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
6440: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
6450: 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 73 74 61  ns>Returns a sta
6460: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 73  ndard SQLite res
6470: 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75 72  ult code.</retur
6480: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
6490: 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 45  l static SQLiteE
64a0: 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69 63 53  rrorCode StaticS
64b0: 68 75 74 64 6f 77 6e 28 0d 0a 20 20 20 20 20 20  hutdown(..      
64c0: 20 20 62 6f 6f 6c 20 64 69 72 65 63 74 6f 72 69    bool directori
64d0: 65 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  es..        ).. 
64e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
64f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
6500: 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
6510: 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20  de.Ok;....      
6520: 20 20 69 66 20 28 64 69 72 65 63 74 6f 72 69 65    if (directorie
6530: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  s)..        {..#
6540: 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20  if WINDOWS..    
6550: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
6560: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6570: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
6580: 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61         rc = Unsa
6590: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
65a0: 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
65b0: 74 5f 64 69 72 65 63 74 6f 72 79 28 31 2c 20 6e  t_directory(1, n
65c0: 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ull);....       
65d0: 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53       if (rc == S
65e0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
65f0: 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
6600: 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e      rc = UnsafeN
6610: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6620: 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
6630: 69 72 65 63 74 6f 72 79 28 32 2c 20 6e 75 6c 6c  irectory(2, null
6640: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23 69 66 20 21  );..#else..#if !
6650: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
6660: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
6670: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
6680: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
6690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
66a0: 20 20 22 53 68 75 74 64 6f 77 6e 3a 20 43 61 6e    "Shutdown: Can
66b0: 6e 6f 74 20 72 65 73 65 74 20 64 69 72 65 63 74  not reset direct
66c0: 6f 72 69 65 73 20 6f 6e 20 74 68 69 73 20 70 6c  ories on this pl
66d0: 61 74 66 6f 72 6d 2e 22 29 3b 0d 0a 23 65 6e 64  atform.");..#end
66e0: 69 66 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  if..#endif..    
66f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6700: 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74   if (rc == SQLit
6710: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
6720: 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
6730: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6740: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 68 75  hods.sqlite3_shu
6750: 74 64 6f 77 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  tdown();....    
6760: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
6770: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
6780: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
6790: 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
67a0: 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
67b0: 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69   native connecti
67c0: 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f 70 65  on handle is ope
67d0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
67e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
67f0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
6800: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
6810: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 6e 61  he associated na
6820: 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tive connection 
6830: 68 61 6e 64 6c 65 20 69 73 20 6f 70 65 6e 2e 0d  handle is open..
6840: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
6850: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
6860: 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
6870: 49 73 4f 70 65 6e 28 29 0d 0a 20 20 20 20 7b 0d  IsOpen()..    {.
6880: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6890: 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 26  (_sql != null) &
68a0: 26 20 21 5f 73 71 6c 2e 49 73 49 6e 76 61 6c 69  & !_sql.IsInvali
68b0: 64 20 26 26 20 21 5f 73 71 6c 2e 49 73 43 6c 6f  d && !_sql.IsClo
68c0: 73 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  sed;..    }.... 
68d0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
68e0: 72 69 64 65 20 76 6f 69 64 20 4f 70 65 6e 28 73  ride void Open(s
68f0: 74 72 69 6e 67 20 73 74 72 46 69 6c 65 6e 61 6d  tring strFilenam
6900: 65 2c 20 73 74 72 69 6e 67 20 76 66 73 4e 61 6d  e, string vfsNam
6910: 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  e, SQLiteConnect
6920: 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65 63 74  ionFlags connect
6930: 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69 74 65  ionFlags, SQLite
6940: 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20 6f 70  OpenFlagsEnum op
6950: 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d 61 78  enFlags, int max
6960: 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20 75  PoolSize, bool u
6970: 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d 0a  sePool)..    {..
6980: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
6990: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
69a0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
69b0: 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
69c0: 20 6f 70 65 6e 2c 20 61 74 74 65 6d 70 74 20 74   open, attempt t
69d0: 6f 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20  o..      //     
69e0: 20 20 63 6c 6f 73 65 20 69 74 20 6e 6f 77 2e 20    close it now. 
69f0: 20 54 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f   This must be do
6a00: 6e 65 20 62 65 63 61 75 73 65 20 74 68 65 20 66  ne because the f
6a10: 69 6c 65 20 6e 61 6d 65 20 6f 72 0d 0a 20 20 20  ile name or..   
6a20: 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68 65     //       othe
6a30: 72 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61  r parameters tha
6a40: 74 20 6d 61 79 20 69 6d 70 61 63 74 20 74 68 65  t may impact the
6a50: 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61   underlying data
6a60: 62 61 73 65 0d 0a 20 20 20 20 20 20 2f 2f 20 20  base..      //  
6a70: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20       connection 
6a80: 6d 61 79 20 68 61 76 65 20 63 68 61 6e 67 65 64  may have changed
6a90: 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
6aa0: 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e     if (_sql != n
6ab0: 75 6c 6c 29 20 43 6c 6f 73 65 28 74 72 75 65 29  ull) Close(true)
6ac0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20  ;....      //.. 
6ad0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
6ae0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
6af0: 77 61 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 73  was not closed s
6b00: 75 63 63 65 73 73 66 75 6c 6c 79 2c 20 74 68 72  uccessfully, thr
6b10: 6f 77 20 61 6e 0d 0a 20 20 20 20 20 20 2f 2f 20  ow an..      // 
6b20: 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 20        exception 
6b30: 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  now...      //..
6b40: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21        if (_sql !
6b50: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6b60: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
6b70: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 63 6f  iteException("co
6b80: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
6b90: 69 73 20 73 74 69 6c 6c 20 61 63 74 69 76 65 22  is still active"
6ba0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 75 73 65  );....      _use
6bb0: 50 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d  Pool = usePool;.
6bc0: 0a 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65  .      _fileName
6bd0: 20 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65 3b 0d   = strFilename;.
6be0: 0a 20 20 20 20 20 20 5f 66 6c 61 67 73 20 3d 20  .      _flags = 
6bf0: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 3b  connectionFlags;
6c00: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 75 73  ....      if (us
6c10: 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d  ePool)..      {.
6c20: 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20  .        _sql = 
6c30: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6c40: 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73 74 72 46  Pool.Remove(strF
6c50: 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c  ilename, maxPool
6c60: 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56  Size, out _poolV
6c70: 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ersion);....    
6c80: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
6c90: 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e  tion.OnChanged(n
6ca0: 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74  ull, new Connect
6cb0: 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  ionEventArgs(.. 
6cc0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
6cd0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74  eConnectionEvent
6ce0: 54 79 70 65 2e 4f 70 65 6e 65 64 46 72 6f 6d 50  Type.OpenedFromP
6cf0: 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ool, null, null,
6d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 75  ..            nu
6d10: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20  ll, null, _sql, 
6d20: 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65 77  strFilename, new
6d30: 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20   object[] {..   
6d40: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
6d50: 53 51 4c 69 74 65 33 29 2c 20 73 74 72 46 69 6c  SQLite3), strFil
6d60: 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20  ename, vfsName, 
6d70: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c  connectionFlags,
6d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 70  ..            op
6d90: 65 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c  enFlags, maxPool
6da0: 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 2c 20 5f  Size, usePool, _
6db0: 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29 29 3b  poolVersion }));
6dc0: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
6dd0: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
6de0: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
6df0: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
6e00: 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Line(String.Form
6e10: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
6e20: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
6e30: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
6e40: 20 20 20 20 20 20 20 20 20 20 22 4f 70 65 6e 20            "Open 
6e50: 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 48 61  (Pool): {0}", Ha
6e60: 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29  ndleToString()))
6e70: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
6e80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28   }....      if (
6e90: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
6ea0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6eb0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
6ec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
6ed0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
6ee0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
6ef0: 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20  inally /* NOTE: 
6f00: 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70  Thread.Abort() p
6f10: 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20  rotection. */.. 
6f20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6f30: 20 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20      IntPtr db = 
6f40: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
6f50: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
6f60: 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69  rorCode n;....#i
6f70: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
6f80: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e  RD..          in
6f90: 74 20 65 78 74 46 75 6e 63 73 20 3d 20 28 28 63  t extFuncs = ((c
6fa0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26  onnectionFlags &
6fb0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
6fc0: 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69  nFlags.NoExtensi
6fd0: 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20  onFunctions) != 
6fe0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
6ff0: 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f  Flags.NoExtensio
7000: 6e 46 75 6e 63 74 69 6f 6e 73 29 20 3f 20 31 20  nFunctions) ? 1 
7010: 3a 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  : 0;....        
7020: 20 20 69 66 20 28 65 78 74 46 75 6e 63 73 20 21    if (extFuncs !
7030: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
7040: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
7050: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7060: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f  ethods.sqlite3_o
7070: 70 65 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54  pen_interop(ToUT
7080: 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c  F8(strFilename),
7090: 20 54 6f 55 54 46 38 28 76 66 73 4e 61 6d 65 29   ToUTF8(vfsName)
70a0: 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 65 78 74  , openFlags, ext
70b0: 46 75 6e 63 73 2c 20 72 65 66 20 64 62 29 3b 0d  Funcs, ref db);.
70c0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
70d0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65          else..#e
70e0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
70f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
7100: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7110: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f  ethods.sqlite3_o
7120: 70 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74  pen_v2(ToUTF8(st
7130: 72 46 69 6c 65 6e 61 6d 65 29 2c 20 72 65 66 20  rFilename), ref 
7140: 64 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 54  db, openFlags, T
7150: 6f 55 54 46 38 28 76 66 73 4e 61 6d 65 29 29 3b  oUTF8(vfsName));
7160: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
7170: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
7180: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
7190: 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
71a0: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
71b0: 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ine(String.Forma
71c0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
71d0: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
71e0: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4f 70               "Op
7200: 65 6e 3a 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d  en: {0}", db));.
7210: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
7220: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
7230: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
7240: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
7250: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e  teException(n, n
7260: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ull);..         
7270: 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69   _sql = new SQLi
7280: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
7290: 6c 65 28 64 62 2c 20 74 72 75 65 29 3b 0d 0a 20  le(db, true);.. 
72a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
72b0: 20 20 6c 6f 63 6b 20 28 5f 73 71 6c 29 20 7b 20    lock (_sql) { 
72c0: 2f 2a 20 48 41 43 4b 3a 20 46 6f 72 63 65 20 74  /* HACK: Force t
72d0: 68 65 20 53 79 6e 63 42 6c 6f 63 6b 20 74 6f 20  he SyncBlock to 
72e0: 62 65 20 22 63 72 65 61 74 65 64 22 20 6e 6f 77  be "created" now
72f0: 2e 20 2a 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20 20  . */ }....      
7300: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
7310: 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c  on.OnChanged(nul
7320: 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f  l, new Connectio
7330: 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  nEventArgs(..   
7340: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
7350: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79  onnectionEventTy
7360: 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61  pe.NewCriticalHa
7370: 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  ndle, null,..   
7380: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e           null, n
7390: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c  ull, null, _sql,
73a0: 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65   strFilename, ne
73b0: 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20  w object[] {..  
73c0: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
73d0: 28 53 51 4c 69 74 65 33 29 2c 20 73 74 72 46 69  (SQLite3), strFi
73e0: 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c  lename, vfsName,
73f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73   connectionFlags
7400: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
7410: 70 65 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f 6f  penFlags, maxPoo
7420: 6c 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 20 7d  lSize, usePool }
7430: 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ));..      }....
7440: 20 20 20 20 20 20 2f 2f 20 42 69 6e 64 20 66 75        // Bind fu
7450: 6e 63 74 69 6f 6e 73 20 74 6f 20 74 68 69 73 20  nctions to this 
7460: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20  connection.  If 
7470: 61 6e 79 20 70 72 65 76 69 6f 75 73 20 66 75 6e  any previous fun
7480: 63 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 61  ctions of the sa
7490: 6d 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f  me name..      /
74a0: 2f 20 77 65 72 65 20 61 6c 72 65 61 64 79 20 62  / were already b
74b0: 6f 75 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 6e  ound, then the n
74c0: 65 77 20 62 69 6e 64 69 6e 67 73 20 72 65 70 6c  ew bindings repl
74d0: 61 63 65 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20  ace the old...  
74e0: 20 20 20 20 69 66 20 28 28 63 6f 6e 6e 65 63 74      if ((connect
74f0: 69 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74  ionFlags & SQLit
7500: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7510: 2e 4e 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  .NoBindFunctions
7520: 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) != SQLiteConne
7530: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e  ctionFlags.NoBin
7540: 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20  dFunctions)..   
7550: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7560: 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d  if (_functions =
7570: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7580: 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e         _function
7590: 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
75a0: 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ry<SQLiteFunctio
75b0: 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69  nAttribute, SQLi
75c0: 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a  teFunction>();..
75d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
75e0: 61 63 68 20 28 4b 65 79 56 61 6c 75 65 50 61 69  ach (KeyValuePai
75f0: 72 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  r<SQLiteFunction
7600: 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74  Attribute, SQLit
7610: 65 46 75 6e 63 74 69 6f 6e 3e 20 70 61 69 72 0d  eFunction> pair.
7620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7630: 20 20 20 69 6e 20 53 51 4c 69 74 65 46 75 6e 63     in SQLiteFunc
7640: 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f  tion.BindFunctio
7650: 6e 73 28 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74  ns(this, connect
7660: 69 6f 6e 46 6c 61 67 73 29 29 0d 0a 20 20 20 20  ionFlags))..    
7670: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7680: 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e         _function
7690: 73 5b 70 61 69 72 2e 4b 65 79 5d 20 3d 20 70 61  s[pair.Key] = pa
76a0: 69 72 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ir.Value;..     
76b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
76c0: 0a 0d 0a 20 20 20 20 20 20 53 65 74 54 69 6d 65  ...      SetTime
76d0: 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20 20 20 47  out(0);..      G
76e0: 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f 73 71 6c  C.KeepAlive(_sql
76f0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
7700: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
7710: 64 65 20 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f  de void ClearPoo
7720: 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  l()..    {..    
7730: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
7740: 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c  onPool.ClearPool
7750: 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20  (_fileName);..  
7760: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
7770: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
7780: 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20   CountPool()..  
7790: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69 63    {..        Dic
77a0: 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20  tionary<string, 
77b0: 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75  int> counts = nu
77c0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ll;..        int
77d0: 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d   openCount = 0;.
77e0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6c 6f  .        int clo
77f0: 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20  seCount = 0;..  
7800: 20 20 20 20 20 20 69 6e 74 20 74 6f 74 61 6c 43        int totalC
7810: 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  ount = 0;....   
7820: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
7830: 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75  ctionPool.GetCou
7840: 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a  nts(_fileName,..
7850: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
7860: 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e  counts, ref open
7870: 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65  Count, ref close
7880: 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  Count,..        
7890: 20 20 20 20 72 65 66 20 74 6f 74 61 6c 43 6f 75      ref totalCou
78a0: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
78b0: 72 65 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e  return totalCoun
78c0: 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
78d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
78e0: 64 65 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f  de void SetTimeo
78f0: 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d  ut(int nTimeoutM
7900: 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  S)..    {..     
7910: 20 49 6e 74 50 74 72 20 64 62 20 3d 20 5f 73 71   IntPtr db = _sq
7920: 6c 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 64 62  l;..      if (db
7930: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
7940: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
7950: 65 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63  eException("no c
7960: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
7970: 20 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 20   available");.. 
7980: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
7990: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
79a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
79b0: 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
79c0: 74 28 64 62 2c 20 6e 54 69 6d 65 6f 75 74 4d 53  t(db, nTimeoutMS
79d0: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
79e0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
79f0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
7a00: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
7a10: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
7a20: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
7a30: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
7a40: 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53  ride bool Step(S
7a50: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
7a60: 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tmt)..    {..   
7a70: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
7a80: 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e  de n;..      Ran
7a90: 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d  dom rnd = null;.
7aa0: 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61 72  .      uint star
7ab0: 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e  ttick = (uint)En
7ac0: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
7ad0: 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74  unt;..      uint
7ae0: 20 74 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74   timeout = (uint
7af0: 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e  )(stmt._command.
7b00: 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20  _commandTimeout 
7b10: 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20  * 1000);....    
7b20: 20 20 52 65 73 65 74 43 61 6e 63 65 6c 43 6f 75    ResetCancelCou
7b30: 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77  nt();....      w
7b40: 68 69 6c 65 20 28 74 72 75 65 29 0d 0a 20 20 20  hile (true)..   
7b50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72     {..        tr
7b60: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
7b70: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
7b80: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
7b90: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
7ba0: 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
7bb0: 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
7bc0: 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
7bd0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7be0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
7bf0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7c00: 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c  3_step(stmt._sql
7c10: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20  ite_stmt);..    
7c20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7c30: 20 69 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77   if (ShouldThrow
7c40: 46 6f 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20  ForCancel())..  
7c50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7c60: 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53       if ((n == S
7c70: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
7c80: 6b 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  k) ||..         
7c90: 20 20 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c         (n == SQL
7ca0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77  iteErrorCode.Row
7cb0: 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
7cc0: 20 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69        (n == SQLi
7cd0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65  teErrorCode.Done
7ce0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
7cf0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7d00: 20 20 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72     n = SQLiteErr
7d10: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
7d20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
7d30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7d40: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
7d50: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c  Exception(n, nul
7d60: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  l);..        }..
7d70: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
7d80: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
7d90: 64 65 2e 49 6e 74 65 72 72 75 70 74 29 20 72 65  de.Interrupt) re
7da0: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
7db0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
7dc0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f  LiteErrorCode.Ro
7dd0: 77 29 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d  w) return true;.
7de0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
7df0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
7e00: 65 2e 44 6f 6e 65 29 20 72 65 74 75 72 6e 20 66  e.Done) return f
7e10: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
7e20: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
7e30: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
7e40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7e50: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
7e60: 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode r;....      
7e70: 20 20 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20      // An error 
7e80: 6f 63 63 75 72 72 65 64 2c 20 61 74 74 65 6d 70  occurred, attemp
7e90: 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73  t to reset the s
7ea0: 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20 74 68  tatement.  If th
7eb0: 65 20 72 65 73 65 74 20 77 6f 72 6b 65 64 20 62  e reset worked b
7ec0: 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20  ecause the..    
7ed0: 20 20 20 20 20 20 2f 2f 20 73 63 68 65 6d 61 20        // schema 
7ee0: 68 61 73 20 63 68 61 6e 67 65 64 2c 20 72 65 2d  has changed, re-
7ef0: 74 72 79 20 74 68 65 20 73 74 65 70 20 61 67 61  try the step aga
7f00: 69 6e 2e 20 20 49 66 20 69 74 20 65 72 72 6f 72  in.  If it error
7f10: 65 64 20 6f 75 72 20 62 65 63 61 75 73 65 20 74  ed our because t
7f20: 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  he database..   
7f30: 20 20 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63         // is loc
7f40: 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65 70 20 72  ked, then keep r
7f50: 65 74 72 79 69 6e 67 20 75 6e 74 69 6c 20 74 68  etrying until th
7f60: 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75  e command timeou
7f70: 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20  t occurs...     
7f80: 20 20 20 20 20 72 20 3d 20 52 65 73 65 74 28 73       r = Reset(s
7f90: 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tmt);....       
7fa0: 20 20 20 69 66 20 28 72 20 3d 3d 20 53 51 4c 69     if (r == SQLi
7fb0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
7fc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
7fd0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
7fe0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
7ff0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
8000: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
8010: 28 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((r == SQLiteErr
8020: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
8030: 20 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   r == SQLiteErro
8040: 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 73  rCode.Busy) && s
8050: 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20  tmt._command != 
8060: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8070: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8080: 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a  // Keep trying..
8090: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
80a0: 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20  rnd == null) // 
80b0: 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65  First time we've
80c0: 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65   encountered the
80d0: 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20   lock..         
80e0: 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52       rnd = new R
80f0: 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  andom();....    
8100: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
8110: 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65  've exceeded the
8120: 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f   command's timeo
8130: 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20  ut, give up and 
8140: 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a  throw an error..
8150: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8160: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
8170: 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74  t.TickCount - st
8180: 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75  arttick > timeou
8190: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
81a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
81b0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
81c0: 65 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 47 65  eException(r, Ge
81d0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
81f0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
8200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8220: 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65 70   Otherwise sleep
8230: 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d   for a random am
8240: 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20  ount of time up 
8250: 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20  to 150ms..      
8260: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54          System.T
8270: 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e  hreading.Thread.
8280: 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31  Sleep(rnd.Next(1
8290: 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20  , 150));..      
82a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
82b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
82c0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
82d0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
82e0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61  ary>..    /// Ha
82f0: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 72  s the sqlite3_er
8300: 72 73 74 72 28 29 20 63 6f 72 65 20 6c 69 62 72  rstr() core libr
8310: 61 72 79 20 41 50 49 20 62 65 65 6e 20 63 68 65  ary API been che
8320: 63 6b 65 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20  cked for yet?.. 
8330: 20 20 20 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73     /// If so, is
8340: 20 69 74 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20   it present?..  
8350: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8360: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
8370: 61 74 69 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f  atic bool? have_
8380: 65 72 72 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a  errstr = null;..
8390: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
83a0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
83b0: 75 72 6e 73 20 74 68 65 20 65 72 72 6f 72 20 6d  urns the error m
83c0: 65 73 73 61 67 65 20 66 6f 72 20 74 68 65 20 73  essage for the s
83d0: 70 65 63 69 66 69 65 64 20 53 51 4c 69 74 65 20  pecified SQLite 
83e0: 72 65 74 75 72 6e 20 63 6f 64 65 20 75 73 69 6e  return code usin
83f0: 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 73  g..    /// the s
8400: 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28 29 20  qlite3_errstr() 
8410: 66 75 6e 63 74 69 6f 6e 2c 20 66 61 6c 6c 69 6e  function, fallin
8420: 67 20 62 61 63 6b 20 74 6f 20 74 68 65 20 69 6e  g back to the in
8430: 74 65 72 6e 61 6c 20 6c 6f 6f 6b 75 70 0d 0a 20  ternal lookup.. 
8440: 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 69 66 20     /// table if 
8450: 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20  necessary...    
8460: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
8470: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
8480: 61 6d 65 3d 22 72 63 22 3e 54 68 65 20 53 51 4c  ame="rc">The SQL
8490: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
84a0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
84b0: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 65  / <returns>The e
84c0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 72 20  rror message or 
84d0: 6e 75 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f  null if it canno
84e0: 74 20 62 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74  t be found.</ret
84f0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
8500: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
8510: 67 20 47 65 74 45 72 72 6f 72 53 74 72 69 6e 67  g GetErrorString
8520: 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
8530: 20 72 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20   rc)..    {..   
8540: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
8550: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8560: 20 69 66 20 28 68 61 76 65 5f 65 72 72 73 74 72   if (have_errstr
8570: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
8580: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8590: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 76 65            int ve
85a0: 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3d 20 53 51  rsionNumber = SQ
85b0: 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65  LiteVersionNumbe
85c0: 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
85d0: 20 20 20 20 68 61 76 65 5f 65 72 72 73 74 72 20      have_errstr 
85e0: 3d 20 28 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72  = (versionNumber
85f0: 20 3e 3d 20 33 30 30 37 30 31 35 29 3b 0d 0a 20   >= 3007015);.. 
8600: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8610: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8620: 28 62 6f 6f 6c 29 68 61 76 65 5f 65 72 72 73 74  (bool)have_errst
8630: 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r)..            
8640: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8650: 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20     IntPtr ptr = 
8660: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8670: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 73  ods.sqlite3_errs
8680: 74 72 28 72 63 29 3b 0d 0a 0d 0a 20 20 20 20 20  tr(rc);....     
8690: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
86a0: 74 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr != IntPtr.Zer
86b0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
86c0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
86d0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
86e0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
86f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8700: 6e 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53  n Marshal.PtrToS
8710: 74 72 69 6e 67 41 6e 73 69 28 70 74 72 29 3b 0d  tringAnsi(ptr);.
8720: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
8730: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8740: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
8750: 70 74 72 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  ptr, -1);..#endi
8760: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
8770: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8780: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
8790: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
87a0: 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e  ntryPointNotFoun
87b0: 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20  dException)..   
87c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
87d0: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
87e0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
87f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8800: 46 61 6c 6c 62 61 63 6b 47 65 74 45 72 72 6f 72  FallbackGetError
8810: 53 74 72 69 6e 67 28 72 63 29 3b 0d 0a 20 20 20  String(rc);..   
8820: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
8830: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
8840: 20 48 61 73 20 74 68 65 20 73 71 6c 69 74 65 33   Has the sqlite3
8850: 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 29  _stmt_readonly()
8860: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 41 50   core library AP
8870: 49 20 62 65 65 6e 20 63 68 65 63 6b 65 64 20 66  I been checked f
8880: 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f  or yet?..    ///
8890: 20 49 66 20 73 6f 2c 20 69 73 20 69 74 20 70 72   If so, is it pr
88a0: 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20  esent?..    /// 
88b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
88c0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
88d0: 6f 6f 6c 3f 20 68 61 76 65 5f 73 74 6d 74 5f 72  ool? have_stmt_r
88e0: 65 61 64 6f 6e 6c 79 20 3d 20 6e 75 6c 6c 3b 0d  eadonly = null;.
88f0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
8900: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
8910: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69  turns non-zero i
8920: 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  f the specified 
8930: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 72 65 61  statement is rea
8940: 64 2d 6f 6e 6c 79 20 69 6e 20 6e 61 74 75 72 65  d-only in nature
8950: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
8960: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
8970: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74  param name="stmt
8980: 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  ">The statement 
8990: 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d  to check.</param
89a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
89b0: 72 6e 73 3e 54 72 75 65 20 69 66 20 74 68 65 20  rns>True if the 
89c0: 6f 75 74 65 72 20 71 75 65 72 79 20 69 73 20 72  outer query is r
89d0: 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 72 65 74 75 72  ead-only.</retur
89e0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
89f0: 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
8a00: 49 73 52 65 61 64 4f 6e 6c 79 28 0d 0a 20 20 20  IsReadOnly(..   
8a10: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
8a20: 6d 65 6e 74 20 73 74 6d 74 0d 0a 20 20 20 20 20  ment stmt..     
8a30: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
8a40: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
8a50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8a60: 20 69 66 20 28 68 61 76 65 5f 73 74 6d 74 5f 72   if (have_stmt_r
8a70: 65 61 64 6f 6e 6c 79 20 3d 3d 20 6e 75 6c 6c 29  eadonly == null)
8a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8aa0: 20 69 6e 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62   int versionNumb
8ab0: 65 72 20 3d 20 53 51 4c 69 74 65 56 65 72 73 69  er = SQLiteVersi
8ac0: 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20  onNumber;..     
8ad0: 20 20 20 20 20 20 20 20 20 20 20 68 61 76 65 5f             have_
8ae0: 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20  stmt_readonly = 
8af0: 28 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e  (versionNumber >
8b00: 3d 20 33 30 30 37 30 30 34 29 3b 0d 0a 20 20 20  = 3007004);..   
8b10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8b20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 62            if ((b
8b30: 6f 6f 6c 29 68 61 76 65 5f 73 74 6d 74 5f 72 65  ool)have_stmt_re
8b40: 61 64 6f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20  adonly)..       
8b50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8b60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
8b70: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8b80: 64 73 2e 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  ds.sqlite3_stmt_
8b90: 72 65 61 64 6f 6e 6c 79 28 0d 0a 20 20 20 20 20  readonly(..     
8ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8bb0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8bc0: 29 20 21 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ) != 0;..       
8bd0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8be0: 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  }..        catch
8bf0: 20 28 45 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46   (EntryPointNotF
8c00: 6f 75 6e 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a  oundException)..
8c10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8c20: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
8c30: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
8c40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
8c50: 72 6e 20 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54  rn false; /* NOT
8c60: 45 3a 20 55 6e 6b 6e 6f 77 6e 2c 20 61 73 73 75  E: Unknown, assu
8c70: 6d 65 20 66 61 6c 73 65 2e 20 2a 2f 0d 0a 20 20  me false. */..  
8c80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
8c90: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
8ca0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73  iteErrorCode Res
8cb0: 65 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  et(SQLiteStateme
8cc0: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
8cd0: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
8ce0: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
8cf0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
8d00: 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  D..      n = Uns
8d10: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8d20: 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69  .sqlite3_reset_i
8d30: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
8d40: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73  ite_stmt);..#els
8d50: 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  e..      n = Uns
8d60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8d70: 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73  .sqlite3_reset(s
8d80: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8d90: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
8da0: 20 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73 63      // If the sc
8db0: 68 65 6d 61 20 63 68 61 6e 67 65 64 2c 20 74 72  hema changed, tr
8dc0: 79 20 61 6e 64 20 72 65 2d 70 72 65 70 61 72 65  y and re-prepare
8dd0: 20 69 74 0d 0a 20 20 20 20 20 20 69 66 20 28 6e   it..      if (n
8de0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
8df0: 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20  ode.Schema)..   
8e00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
8e10: 20 52 65 63 72 65 61 74 65 20 61 20 64 75 6d 6d   Recreate a dumm
8e20: 79 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20  y statement..   
8e30: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20       string str 
8e40: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
8e50: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 53 74   using (SQLiteSt
8e60: 61 74 65 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72  atement tmp = Pr
8e70: 65 70 61 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74  epare(null, stmt
8e80: 2e 5f 73 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20  ._sqlStatement, 
8e90: 6e 75 6c 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d  null, (uint)(stm
8ea0: 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d  t._command._comm
8eb0: 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30  andTimeout * 100
8ec0: 30 29 2c 20 72 65 66 20 73 74 72 29 29 0d 0a 20  0), ref str)).. 
8ed0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8ee0: 20 20 20 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20      // Finalize 
8ef0: 74 68 65 20 65 78 69 73 74 69 6e 67 20 73 74 61  the existing sta
8f00: 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
8f10: 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73    stmt._sqlite_s
8f20: 74 6d 74 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  tmt.Dispose();..
8f30: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61            // Rea
8f40: 73 73 69 67 6e 20 61 20 6e 65 77 20 73 74 61 74  ssign a new stat
8f50: 65 6d 65 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f  ement pointer to
8f60: 20 74 68 65 20 6f 6c 64 20 73 74 61 74 65 6d 65   the old stateme
8f70: 6e 74 20 61 6e 64 20 63 6c 65 61 72 20 74 68 65  nt and clear the
8f80: 20 74 65 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a   temporary one..
8f90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 6d            if (tm
8fa0: 70 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p != null)..    
8fb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8fc0: 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74       stmt._sqlit
8fd0: 65 5f 73 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71  e_stmt = tmp._sq
8fe0: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20  lite_stmt;..    
8ff0: 20 20 20 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c          tmp._sql
9000: 69 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b  ite_stmt = null;
9010: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
9020: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65  .          // Re
9030: 61 70 70 6c 79 20 70 61 72 61 6d 65 74 65 72 73  apply parameters
9040: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74  ..          stmt
9050: 2e 42 69 6e 64 50 61 72 61 6d 65 74 65 72 73 28  .BindParameters(
9060: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
9070: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
9080: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 55 6e  LiteErrorCode.Un
9090: 6b 6e 6f 77 6e 3b 20 2f 2f 20 52 65 73 65 74 20  known; // Reset 
90a0: 77 61 73 20 4f 4b 2c 20 77 69 74 68 20 73 63 68  was OK, with sch
90b0: 65 6d 61 20 63 68 61 6e 67 65 0d 0a 20 20 20 20  ema change..    
90c0: 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20    }..      else 
90d0: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
90e0: 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20  rrorCode.Locked 
90f0: 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  || n == SQLiteEr
9100: 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20  rorCode.Busy).. 
9110: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b         return n;
9120: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  ....      if (n 
9130: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
9140: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
9150: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
9160: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
9170: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
9180: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b  .      return n;
9190: 20 2f 2f 20 57 65 20 72 65 73 65 74 20 4f 4b 2c   // We reset OK,
91a0: 20 6e 6f 20 73 63 68 65 6d 61 20 63 68 61 6e 67   no schema chang
91b0: 65 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  es..    }....   
91c0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
91d0: 64 65 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73  de string GetLas
91e0: 74 45 72 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d  tError()..    {.
91f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
9200: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 6e 75 6c  GetLastError(nul
9210: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
9220: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
9230: 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 4c 61  ide string GetLa
9240: 73 74 45 72 72 6f 72 28 73 74 72 69 6e 67 20 64  stError(string d
9250: 65 66 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  efValue)..    {.
9260: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
9270: 72 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65 42  result = SQLiteB
9280: 61 73 65 2e 47 65 74 4c 61 73 74 45 72 72 6f 72  ase.GetLastError
9290: 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20  (_sql, _sql);.. 
92a0: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
92b0: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
92c0: 72 65 73 75 6c 74 29 29 20 72 65 73 75 6c 74 20  result)) result 
92d0: 3d 20 64 65 66 56 61 6c 75 65 3b 0d 0a 20 20 20  = defValue;..   
92e0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
92f0: 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  lt;..    }....  
9300: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9360: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
9370: 20 51 75 65 72 79 20 44 69 61 67 6e 6f 73 74 69   Query Diagnosti
9380: 63 73 20 53 75 70 70 6f 72 74 0d 0a 23 69 66 20  cs Support..#if 
9390: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
93a0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
93b0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
93c0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c     /// This fiel
93d0: 64 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65 65  d is used to kee
93e0: 70 20 74 72 61 63 6b 20 6f 66 20 77 68 65 74 68  p track of wheth
93f0: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20  er or not the.. 
9400: 20 20 20 2f 2f 2f 20 22 53 51 4c 69 74 65 5f 46     /// "SQLite_F
9410: 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 22 20  orceLogPrepare" 
9420: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
9430: 61 62 6c 65 20 68 61 73 20 62 65 65 6e 20 71 75  able has been qu
9440: 65 72 69 65 64 2e 20 20 49 66 20 73 6f 2c 0d 0a  eried.  If so,..
9450: 20 20 20 20 2f 2f 2f 20 69 74 20 77 69 6c 6c 20      /// it will 
9460: 6f 6e 6c 79 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f  only be non-zero
9470: 20 69 66 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d   if the environm
9480: 65 6e 74 20 76 61 72 69 61 62 6c 65 20 77 61 73  ent variable was
9490: 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 2f   present...    /
94a0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
94b0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
94c0: 63 20 62 6f 6f 6c 3f 20 66 6f 72 63 65 4c 6f 67  c bool? forceLog
94d0: 50 72 65 70 61 72 65 20 3d 20 6e 75 6c 6c 3b 0d  Prepare = null;.
94e0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
94f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9540: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
9550: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9560: 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
9570: 69 66 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20  if all calls to 
9580: 70 72 65 70 61 72 65 20 61 20 53 51 4c 20 71 75  prepare a SQL qu
9590: 65 72 79 20 77 69 6c 6c 20 62 65 20 6c 6f 67 67  ery will be logg
95a0: 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 67  ed,..    /// reg
95b0: 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 66  ardless of the f
95c0: 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73  lags for the ass
95d0: 6f 63 69 61 74 65 64 20 63 6f 6e 6e 65 63 74 69  ociated connecti
95e0: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
95f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
9600: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
9610: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20  /// Non-zero to 
9620: 6c 6f 67 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f  log all calls to
9630: 20 70 72 65 70 61 72 65 20 61 20 53 51 4c 20 71   prepare a SQL q
9640: 75 65 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  uery...    /// <
9650: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
9660: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
9670: 6f 6c 20 46 6f 72 63 65 4c 6f 67 50 72 65 70 61  ol ForceLogPrepa
9680: 72 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  re()..    {..   
9690: 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52       lock (syncR
96a0: 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  oot)..        {.
96b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
96c0: 28 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65  (forceLogPrepare
96d0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
96e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
96f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 55 6e            if (Un
9700: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9710: 73 2e 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75  s.GetSettingValu
9720: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
9730: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
9740: 69 74 65 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70  ite_ForceLogPrep
9750: 61 72 65 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e  are", null) != n
9760: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9770: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9780: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
9790: 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 20 74  ceLogPrepare = t
97a0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
97b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
97c0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
97d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
97e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
97f0: 20 20 20 20 20 20 66 6f 72 63 65 4c 6f 67 50 72        forceLogPr
9800: 65 70 61 72 65 20 3d 20 66 61 6c 73 65 3b 0d 0a  epare = false;..
9810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9820: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
9830: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9840: 72 65 74 75 72 6e 20 28 62 6f 6f 6c 29 66 6f 72  return (bool)for
9850: 63 65 4c 6f 67 50 72 65 70 61 72 65 3b 0d 0a 20  ceLogPrepare;.. 
9860: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
9870: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 23 65 6e  .#endif..    #en
9880: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
98f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9900: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 53 74  verride SQLiteSt
9910: 61 74 65 6d 65 6e 74 20 50 72 65 70 61 72 65 28  atement Prepare(
9920: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9930: 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73 74 72   cnn, string str
9940: 53 71 6c 2c 20 53 51 4c 69 74 65 53 74 61 74 65  Sql, SQLiteState
9950: 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 2c 20 75  ment previous, u
9960: 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72  int timeoutMS, r
9970: 65 66 20 73 74 72 69 6e 67 20 73 74 72 52 65 6d  ef string strRem
9980: 61 69 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ain)..    {..   
9990: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
99a0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72  sNullOrEmpty(str
99b0: 53 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  Sql))..      {..
99c0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
99d0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c      // NOTE: SQL
99e0: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  ite does not sup
99f0: 70 6f 72 74 20 74 68 65 20 63 6f 6e 63 65 70 74  port the concept
9a00: 20 6f 66 20 73 65 70 61 72 61 74 65 20 73 63 68   of separate sch
9a10: 65 6d 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  emas..        //
9a20: 20 20 20 20 20 20 20 69 6e 20 6f 6e 65 20 64 61         in one da
9a30: 74 61 62 61 73 65 3b 20 74 68 65 72 65 66 6f 72  tabase; therefor
9a40: 65 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 62 61  e, remove the ba
9a50: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a  se schema name..
9a60: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
9a70: 20 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20   used to smooth 
9a80: 69 6e 74 65 67 72 61 74 69 6f 6e 20 77 69 74 68  integration with
9a90: 20 74 68 65 20 62 61 73 65 20 2e 4e 45 54 20 46   the base .NET F
9aa0: 72 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20  ramework..      
9ab0: 20 20 2f 2f 20 20 20 20 20 20 20 64 61 74 61 20    //       data 
9ac0: 63 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20 20 20  classes...      
9ad0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 73 74    //..        st
9ae0: 72 69 6e 67 20 62 61 73 65 53 63 68 65 6d 61 4e  ring baseSchemaN
9af0: 61 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75  ame = (cnn != nu
9b00: 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53  ll) ? cnn._baseS
9b10: 63 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c  chemaName : null
9b20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
9b30: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
9b40: 72 45 6d 70 74 79 28 62 61 73 65 53 63 68 65 6d  rEmpty(baseSchem
9b50: 61 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  aName))..       
9b60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74   {..          st
9b70: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65  rSql = strSql.Re
9b80: 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  place(..        
9b90: 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
9ba0: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
9bb0: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
9bc0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9bd0: 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62 61 73 65 53   "[{0}].", baseS
9be0: 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69  chemaName), Stri
9bf0: 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
9c00: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
9c10: 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28   strSql.Replace(
9c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9c30: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75  String.Format(Cu
9c40: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
9c50: 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  antCulture,..   
9c60: 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2e             "{0}.
9c70: 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d  ", baseSchemaNam
9c80: 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e), String.Empty
9c90: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
9ca0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9cb0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9cc0: 46 6c 61 67 73 20 66 6c 61 67 73 20 3d 0d 0a 20  Flags flags =.. 
9cd0: 20 20 20 20 20 20 20 20 20 28 63 6e 6e 20 21 3d           (cnn !=
9ce0: 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 46 6c 61   null) ? cnn.Fla
9cf0: 67 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs : SQLiteConne
9d00: 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 66 61 75  ctionFlags.Defau
9d10: 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  lt;....      if 
9d20: 28 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  (..#if !PLATFORM
9d30: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
9d40: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 46 6f 72  K..          For
9d50: 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c  ceLogPrepare() |
9d60: 7c 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  |..#endif..     
9d70: 20 20 20 20 20 28 28 66 6c 61 67 73 20 26 20 53       ((flags & S
9d80: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9d90: 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29  lags.LogPrepare)
9da0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
9db0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65  tionFlags.LogPre
9dc0: 70 61 72 65 29 29 0d 0a 20 20 20 20 20 20 7b 0d  pare))..      {.
9dd0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28  .          if ((
9de0: 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20  strSql == null) 
9df0: 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67 74  || (strSql.Lengt
9e00: 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72 53  h == 0) || (strS
9e10: 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74 68  ql.Trim().Length
9e20: 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20   == 0))..       
9e30: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
9e40: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22 50 72 65  .LogMessage("Pre
9e50: 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67  paring {<nothing
9e60: 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20 20  >}...");..      
9e70: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
9e80: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
9e90: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72  g.LogMessage(Str
9ea0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9ec0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
9ed0: 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 72 65 70  ntCulture, "Prep
9ee0: 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e  aring {{{0}}}...
9ef0: 22 2c 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20 20  ", strSql));..  
9f00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 49      }....      I
9f10: 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e 74  ntPtr stmt = Int
9f20: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
9f30: 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 49 6e   IntPtr ptr = In
9f40: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
9f50: 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
9f60: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
9f70: 72 43 6f 64 65 20 6e 20 3d 20 53 51 4c 69 74 65  rCode n = SQLite
9f80: 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61  ErrorCode.Schema
9f90: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 65 74  ;..      int ret
9fa0: 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ries = 0;..     
9fb0: 20 69 6e 74 20 6d 61 78 69 6d 75 6d 52 65 74 72   int maximumRetr
9fc0: 69 65 73 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75  ies = (cnn != nu
9fd0: 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 70 72 65 70 61  ll) ? cnn._prepa
9fe0: 72 65 52 65 74 72 69 65 73 20 3a 20 53 51 4c 69  reRetries : SQLi
9ff0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 44 65 66  teConnection.Def
a000: 61 75 6c 74 50 72 65 70 61 72 65 52 65 74 72 69  aultPrepareRetri
a010: 65 73 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  es;..      byte[
a020: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 73 74 72  ] b = ToUTF8(str
a030: 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 73 74 72  Sql);..      str
a040: 69 6e 67 20 74 79 70 65 64 65 66 73 20 3d 20 6e  ing typedefs = n
a050: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  ull;..      SQLi
a060: 74 65 53 74 61 74 65 6d 65 6e 74 20 63 6d 64 20  teStatement cmd 
a070: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 52  = null;..      R
a080: 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c  andom rnd = null
a090: 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74  ;..      uint st
a0a0: 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29  arttick = (uint)
a0b0: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
a0c0: 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  Count;....      
a0d0: 52 65 73 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74  ResetCancelCount
a0e0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 43 48  ();....      GCH
a0f0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 47  andle handle = G
a100: 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c  CHandle.Alloc(b,
a110: 20 47 43 48 61 6e 64 6c 65 54 79 70 65 2e 50 69   GCHandleType.Pi
a120: 6e 6e 65 64 29 3b 0d 0a 20 20 20 20 20 20 49 6e  nned);..      In
a130: 74 50 74 72 20 70 73 71 6c 20 3d 20 68 61 6e 64  tPtr psql = hand
a140: 6c 65 2e 41 64 64 72 4f 66 50 69 6e 6e 65 64 4f  le.AddrOfPinnedO
a150: 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20  bject();..      
a160: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
a170: 61 6e 64 6c 65 20 73 74 61 74 65 6d 65 6e 74 48  andle statementH
a180: 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  andle = null;.. 
a190: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
a1a0: 7b 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  {..        while
a1b0: 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((n == SQLiteEr
a1c0: 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 20 7c  rorCode.Schema |
a1d0: 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | n == SQLiteErr
a1e0: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
a1f0: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
a200: 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 72  rCode.Busy) && r
a210: 65 74 72 69 65 73 20 3c 20 6d 61 78 69 6d 75 6d  etries < maximum
a220: 52 65 74 72 69 65 73 29 0d 0a 20 20 20 20 20 20  Retries)..      
a230: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74    {..          t
a240: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ry..          {.
a250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
a260: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
a270: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a280: 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e      finally /* N
a290: 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72  OTE: Thread.Abor
a2a0: 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20  t() protection. 
a2b0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  */..          {.
a2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d  .            stm
a2d0: 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  t = IntPtr.Zero;
a2e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 74  ..            pt
a2f0: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
a300: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
a310: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
a320: 20 20 20 20 20 20 6c 65 6e 20 3d 20 30 3b 0d 0a        len = 0;..
a330: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
a340: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a350: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70  ods.sqlite3_prep
a360: 61 72 65 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  are_interop(_sql
a370: 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68  , psql, b.Length
a380: 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20   - 1, ref stmt, 
a390: 72 65 66 20 70 74 72 2c 20 72 65 66 20 6c 65 6e  ref ptr, ref len
a3a0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23 69 66 20 55  );..#else..#if U
a3b0: 53 45 5f 50 52 45 50 41 52 45 5f 56 32 0d 0a 20  SE_PREPARE_V2.. 
a3c0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
a3d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
a3e0: 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ds.sqlite3_prepa
a3f0: 72 65 5f 76 32 28 5f 73 71 6c 2c 20 70 73 71 6c  re_v2(_sql, psql
a400: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
a410: 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74  ref stmt, ref pt
a420: 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  r);..#else..    
a430: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
a440: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a450: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
a460: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
a470: 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20 73 74  ngth - 1, ref st
a480: 6d 74 2c 20 72 65 66 20 70 74 72 29 3b 0d 0a 23  mt, ref ptr);..#
a490: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
a4a0: 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65     len = -1;..#e
a4b0: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21 4e 45 54  ndif....#if !NET
a4c0: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
a4d0: 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 0d 0a  RACE_STATEMENT..
a4e0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
a4f0: 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69  e.WriteLine(Stri
a500: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
a510: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
a520: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
a530: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
a540: 20 20 20 20 20 20 20 20 20 22 50 72 65 70 61 72           "Prepar
a550: 65 20 28 7b 30 7d 29 3a 20 7b 31 7d 22 2c 20 6e  e ({0}): {1}", n
a560: 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65 6e 64 69  , stmt));..#endi
a570: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
a580: 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74   if ((n == SQLit
a590: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26  eErrorCode.Ok) &
a5a0: 26 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74  & (stmt != IntPt
a5b0: 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20  r.Zero))..      
a5c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a5d0: 20 20 20 20 20 20 20 69 66 20 28 73 74 61 74 65         if (state
a5e0: 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75  mentHandle != nu
a5f0: 6c 6c 29 20 73 74 61 74 65 6d 65 6e 74 48 61 6e  ll) statementHan
a600: 64 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  dle.Dispose();..
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
a620: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20  atementHandle = 
a630: 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d  new SQLiteStatem
a640: 65 6e 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20  entHandle(_sql, 
a650: 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  stmt);..        
a660: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
a670: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
a680: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e  if (statementHan
a690: 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle != null)..  
a6a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a6b0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
a6c0: 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
a6d0: 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e  d(null, new Conn
a6e0: 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28  ectionEventArgs(
a6f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a700: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
a710: 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69  EventType.NewCri
a720: 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c  ticalHandle, nul
a730: 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  l, null,..      
a740: 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75          null, nu
a750: 6c 6c 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e  ll, statementHan
a760: 64 6c 65 2c 20 73 74 72 53 71 6c 2c 20 6e 65 77  dle, strSql, new
a770: 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20   object[] {..   
a780: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
a790: 66 28 53 51 4c 69 74 65 33 29 2c 20 63 6e 6e 2c  f(SQLite3), cnn,
a7a0: 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75   strSql, previou
a7b0: 73 2c 20 74 69 6d 65 6f 75 74 4d 53 20 7d 29 29  s, timeoutMS }))
a7c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
a7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
a7e0: 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72 43 61  ShouldThrowForCa
a7f0: 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20 20 20  ncel())..       
a800: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a810: 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51      if ((n == SQ
a820: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
a830: 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
a840: 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20 53 51          (n == SQ
a850: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f  LiteErrorCode.Ro
a860: 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  w) ||..         
a870: 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20 53           (n == S
a880: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44  QLiteErrorCode.D
a890: 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  one))..         
a8a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a8b0: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 53 51            n = SQ
a8c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e  LiteErrorCode.In
a8d0: 74 65 72 72 75 70 74 3b 0d 0a 20 20 20 20 20 20  terrupt;..      
a8e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a8f0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
a900: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
a910: 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a  tion(n, null);..
a920: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a930: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d           if (n =
a940: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
a950: 65 2e 49 6e 74 65 72 72 75 70 74 29 0d 0a 20 20  e.Interrupt)..  
a960: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
a970: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
a980: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
a990: 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61  ErrorCode.Schema
a9a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
a9b0: 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20  etries++;..     
a9c0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
a9d0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
a9e0: 64 65 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20 20  de.Error)..     
a9f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
aa00: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43      if (String.C
aa10: 6f 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72  ompare(GetLastEr
aa20: 72 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c 22 54  ror(), "near \"T
aa30: 59 50 45 53 5c 22 3a 20 73 79 6e 74 61 78 20 65  YPES\": syntax e
aa40: 72 72 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d  rror", StringCom
aa50: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
aa60: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
aa70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
aa80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
aa90: 6e 74 20 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e  nt pos = strSql.
aaa0: 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20  IndexOf(';');.. 
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
aac0: 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20  (pos == -1) pos 
aad0: 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20  = strSql.Length 
aae0: 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  - 1;....        
aaf0: 20 20 20 20 20 20 74 79 70 65 64 65 66 73 20 3d        typedefs =
ab00: 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e   strSql.Substrin
ab10: 67 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a  g(0, pos + 1);..
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
ab30: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75  rSql = strSql.Su
ab40: 62 73 74 72 69 6e 67 28 70 6f 73 20 2b 20 31 29  bstring(pos + 1)
ab50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ab60: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22     strRemain = "
ab70: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
ab80: 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d      while (cmd =
ab90: 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c  = null && strSql
aba0: 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20  .Length > 0)..  
abb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
abd0: 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e  md = Prepare(cnn
abe0: 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f  , strSql, previo
abf0: 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72  us, timeoutMS, r
ac00: 65 66 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a  ef strRemain);..
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac20: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
ac30: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
ac40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ac50: 20 20 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d        if (cmd !=
ac60: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
ac70: 20 20 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54          cmd.SetT
ac80: 79 70 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d  ypes(typedefs);.
ac90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
aca0: 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20   return cmd;..  
acb0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66            }..#if
acc0: 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f   (NET_35 || NET_
acd0: 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20  40 || NET_45 || 
ace0: 4e 45 54 5f 34 35 31 29 20 26 26 20 21 50 4c 41  NET_451) && !PLA
acf0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
ad00: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
ad10: 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 62 75      else if (_bu
ad20: 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20  ildingSchema == 
ad30: 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e 67 2e  false && String.
ad40: 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45  Compare(GetLastE
ad50: 72 72 6f 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73  rror(), 0, "no s
ad60: 75 63 68 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e  uch table: TEMP.
ad70: 53 43 48 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20  SCHEMA", 0, 26, 
ad80: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
ad90: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
ada0: 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  se) == 0)..     
adb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
adc0: 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69          strRemai
add0: 6e 20 3d 20 22 22 3b 0d 0a 20 20 20 20 20 20 20  n = "";..       
ade0: 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67         _building
adf0: 53 63 68 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a  Schema = true;..
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
ae10: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
ae20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ae30: 20 20 20 20 49 53 51 4c 69 74 65 53 63 68 65 6d      ISQLiteSchem
ae40: 61 45 78 74 65 6e 73 69 6f 6e 73 20 65 78 74 20  aExtensions ext 
ae50: 3d 20 28 28 49 53 65 72 76 69 63 65 50 72 6f 76  = ((IServiceProv
ae60: 69 64 65 72 29 53 51 4c 69 74 65 46 61 63 74 6f  ider)SQLiteFacto
ae70: 72 79 2e 49 6e 73 74 61 6e 63 65 29 2e 47 65 74  ry.Instance).Get
ae80: 53 65 72 76 69 63 65 28 74 79 70 65 6f 66 28 49  Service(typeof(I
ae90: 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65  SQLiteSchemaExte
aea0: 6e 73 69 6f 6e 73 29 29 20 61 73 20 49 53 51 4c  nsions)) as ISQL
aeb0: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
aec0: 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ons;....        
aed0: 20 20 20 20 20 20 20 20 69 66 20 28 65 78 74 20          if (ext 
aee0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 74 2e              ext.
af00: 42 75 69 6c 64 54 65 6d 70 53 63 68 65 6d 61 28  BuildTempSchema(
af10: 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  cnn);....       
af20: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
af30: 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73  cmd == null && s
af40: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30  trSql.Length > 0
af50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
af60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
af70: 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72          cmd = Pr
af80: 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71  epare(cnn, strSq
af90: 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d  l, previous, tim
afa0: 65 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72 52  eoutMS, ref strR
afb0: 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20  emain);..       
afc0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71             strSq
afd0: 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a  l = strRemain;..
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aff0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b000: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b       return cmd;
b010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b020: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
b030: 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
b040: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b050: 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c             _buil
b060: 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 66 61 6c  dingSchema = fal
b070: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
b080: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b090: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
b0a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b0b0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
b0c0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b0d0: 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d  e.Locked || n ==
b0e0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
b0f0: 2e 42 75 73 79 29 20 2f 2f 20 4c 6f 63 6b 65 64  .Busy) // Locked
b100: 20 2d 2d 20 64 65 6c 61 79 20 61 20 73 6d 61 6c   -- delay a smal
b110: 6c 20 61 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20  l amount before 
b120: 72 65 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20  retrying..      
b130: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b140: 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e     // Keep tryin
b150: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  g..            i
b160: 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20  f (rnd == null) 
b170: 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77 65  // First time we
b180: 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  've encountered 
b190: 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20  the lock..      
b1a0: 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65          rnd = ne
b1b0: 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20  w Random();.... 
b1c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66             // If
b1d0: 20 77 65 27 76 65 20 65 78 63 65 65 64 65 64 20   we've exceeded 
b1e0: 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69  the command's ti
b1f0: 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61  meout, give up a
b200: 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f  nd throw an erro
b210: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  r..            i
b220: 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e  f ((uint)Environ
b230: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d  ment.TickCount -
b240: 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d   starttick > tim
b250: 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 20 20 20  eoutMS)..       
b260: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b270: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b280: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
b290: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
b2a0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
b2b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
b2c0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
b2d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b2e0: 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20     // Otherwise 
b2f0: 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64  sleep for a rand
b300: 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  om amount of tim
b310: 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20  e up to 150ms.. 
b320: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
b330: 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68  tem.Threading.Th
b340: 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e  read.Sleep(rnd.N
b350: 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20  ext(1, 150));.. 
b360: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b370: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b380: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b390: 69 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46  if (ShouldThrowF
b3a0: 6f 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20  orCancel())..   
b3b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b3c0: 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51      if ((n == SQ
b3d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
b3e0: 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
b3f0: 20 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69        (n == SQLi
b400: 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29  teErrorCode.Row)
b410: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
b420: 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74       (n == SQLit
b430: 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29  eErrorCode.Done)
b440: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b460: 20 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f    n = SQLiteErro
b470: 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 3b  rCode.Interrupt;
b480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b490: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
b4a0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
b4b0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c  xception(n, null
b4c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
b4d0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
b4e0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b4f0: 65 2e 49 6e 74 65 72 72 75 70 74 29 20 72 65 74  e.Interrupt) ret
b500: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
b510: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
b520: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
b530: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
b540: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
b550: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
b560: 0a 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61  .        strRema
b570: 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  in = UTF8ToStrin
b580: 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a  g(ptr, len);....
b590: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 74          if (stat
b5a0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e  ementHandle != n
b5b0: 75 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77 20 53  ull) cmd = new S
b5c0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28 74  QLiteStatement(t
b5d0: 68 69 73 2c 20 66 6c 61 67 73 2c 20 73 74 61 74  his, flags, stat
b5e0: 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72  ementHandle, str
b5f0: 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c  Sql.Substring(0,
b600: 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d   strSql.Length -
b610: 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74   strRemain.Lengt
b620: 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a  h), previous);..
b630: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
b640: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   cmd;..      }..
b650: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
b660: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b670: 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a  handle.Free();..
b680: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
b690: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
b6a0: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
b6b0: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
b6c0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
b6d0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
b6e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
b6f0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
b700: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
b710: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
b720: 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e  LogMessage(Strin
b730: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
b740: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
b750: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
b760: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
b770: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
b780: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
b790: 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e 2e 22  #{1} as NULL..."
b7a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
b7b0: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
b7c0: 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ex));..    }....
b7d0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
b7e0: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
b7f0: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
b800: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
b810: 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c 75 65  int index, Value
b820: 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Type value)..   
b830: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
b840: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
b850: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
b860: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
b870: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
b880: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
b890: 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73        "Binding s
b8a0: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
b8b0: 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79  amter #{1} as ty
b8c0: 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75  pe {2} with valu
b8d0: 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a  e {{{3}}}...",..
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
b8f0: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
b900: 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29   value.GetType()
b910: 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  , value));..    
b920: 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65  }....    private
b930: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46   static string F
b940: 6f 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44 61  ormatDateTime(Da
b950: 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20  teTime value).. 
b960: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74     {..        St
b970: 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75  ringBuilder resu
b980: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  lt = new StringB
b990: 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20  uilder();....   
b9a0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
b9b0: 6e 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e  nd(value.ToStrin
b9c0: 67 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48  g("yyyy-MM-ddTHH
b9d0: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22  :mm:ss.FFFFFFFK"
b9e0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  ));..        res
b9f0: 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b  ult.Append(' ');
ba00: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
ba10: 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b 69  .Append(value.Ki
ba20: 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  nd);..        re
ba30: 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29  sult.Append(' ')
ba40: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c  ;..        resul
ba50: 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54  t.Append(value.T
ba60: 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  icks);....      
ba70: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
ba80: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
ba90: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
baa0: 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20  ted static void 
bab0: 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74  LogBind(SQLiteSt
bac0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
bad0: 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c  ndle, int index,
bae0: 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29   DateTime value)
baf0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
bb00: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
bb10: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
bb20: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
bb30: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
bb40: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
bb50: 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64             "Bind
bb60: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30  ing statement {0
bb70: 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20  } paramter #{1} 
bb80: 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68  as type {2} with
bb90: 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e   value {{{3}}}..
bba0: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
bbb0: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
bbc0: 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61 74  ndex, typeof(Dat
bbd0: 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61  eTime), FormatDa
bbe0: 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29 3b  teTime(value)));
bbf0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
bc00: 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20  rotected static 
bc10: 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c  void LogBind(SQL
bc20: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
bc30: 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69  le handle, int i
bc40: 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c  ndex, string val
bc50: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
bc60: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
bc70: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
bc80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
bc90: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
bca0: 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
bcb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
bcc0: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
bcd0: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
bce0: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
bcf0: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
bd00: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
bd10: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
bd20: 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28  , index, typeof(
bd30: 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65 20  String), (value 
bd40: 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75 65  != null) ? value
bd50: 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a   : "<null>"));..
bd60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
bd70: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
bd80: 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c  ng ToHexadecimal
bd90: 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
bda0: 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a 20   byte[] array.. 
bdb0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
bdc0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72  .        if (arr
bdd0: 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ay == null)..   
bde0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
bdf0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
be00: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72   StringBuilder r
be10: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
be20: 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79 2e  ngBuilder(array.
be30: 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d 0a  Length * 2);....
be40: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67          int leng
be50: 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74  th = array.Lengt
be60: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f  h;....        fo
be70: 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
be80: 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68  ; index < length
be90: 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
bea0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
beb0: 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64 65  ppend(array[inde
bec0: 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32 22  x].ToString("x2"
bed0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ));....        r
bee0: 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53  eturn result.ToS
bef0: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d  tring();..    }.
bf00: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
bf10: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
bf20: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
bf30: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
bf40: 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79  e, int index, by
bf50: 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
bf60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
bf70: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
bf80: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
bf90: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
bfa0: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
bfb0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
bfc0: 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73        "Binding s
bfd0: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
bfe0: 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79  amter #{1} as ty
bff0: 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75  pe {2} with valu
c000: 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a  e {{{3}}}...",..
c010: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
c020: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
c030: 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29 2c   typeof(Byte[]),
c040: 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29   (value != null)
c050: 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c   ? ToHexadecimal
c060: 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a 20  String(value) : 
c070: 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20  "<null>"));..   
c080: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
c090: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
c0a0: 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c   Bind_Double(SQL
c0b0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
c0c0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
c0d0: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
c0e0: 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c  int index, doubl
c0f0: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
c100: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
c110: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
c120: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
c130: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20  lite_stmt;....  
c140: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
c150: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
c160: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
c170: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
c180: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
c190: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
c1b0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
c1c0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
c1d0: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c      }....#if !PL
c1e0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
c1f0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
c200: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c210: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c220: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c230: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e  _bind_double(han
c240: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
c250: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
c260: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
c270: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
c280: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
c290: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c2a0: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
c2b0: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
c2c0: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
c2d0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
c2e0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
c2f0: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
c300: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
c310: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
c320: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
c330: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
c340: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
c350: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
c360: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
c370: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c380: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49  ride void Bind_I
c390: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
c3a0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
c3b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
c3c0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
c3d0: 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  x, int value).. 
c3e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
c3f0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
c400: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
c410: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
c420: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
c430: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
c440: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
c450: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
c460: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
c470: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
c480: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c490: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
c4a0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
c4b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
c4c0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
c4d0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
c4e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c4f0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68  lite3_bind_int(h
c500: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
c510: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
c520: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
c530: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
c540: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
c550: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
c560: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
c570: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
c580: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
c590: 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74  ind_UInt32(SQLit
c5a0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
c5b0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
c5c0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
c5d0: 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61  t index, uint va
c5e0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
c5f0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
c600: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
c610: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
c620: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
c630: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
c640: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
c650: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
c660: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
c670: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
c680: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
c690: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
c6a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
c6b0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
c6c0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
c6d0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
c6e0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
c6f0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
c700: 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20  Code n;....     
c710: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
c720: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
c730: 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32  Flags.BindUInt32
c740: 41 73 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c 69  AsInt64) == SQLi
c750: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
c760: 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e  s.BindUInt32AsIn
c770: 74 36 34 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  t64)..        {.
c780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e  .            lon
c790: 67 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75 65  g value2 = value
c7a0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
c7b0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
c7c0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
c7d0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
c7e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
c7f0: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
c800: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
c810: 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  2);..#elif !SQLI
c820: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
c830: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
c840: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c850: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
c860: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
c870: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
c880: 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a  alue2);..#else..
c890: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
c8a0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
c8b0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
c8c0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
c8d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
c8e0: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
c8f0: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
c900: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c910: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
c920: 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  int(handle, inde
c930: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
c940: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69      }..        i
c950: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
c960: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
c970: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
c980: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
c990: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
c9a0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
c9b0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
c9c0: 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65  ind_Int64(SQLite
c9d0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
c9e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
c9f0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
ca00: 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c   index, long val
ca10: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
ca20: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
ca30: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
ca40: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
ca50: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
ca60: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
ca70: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
ca80: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
ca90: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
caa0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
cab0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cac0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
cad0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
cae0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
caf0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
cb00: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
cb10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
cb20: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
cb30: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
cb40: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
cb50: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
cb60: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
cb70: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
cb80: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53  NDARD..        S
cb90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
cba0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
cbb0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
cbc0: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
cbd0: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
cbe0: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
cbf0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72  lse..        thr
cc00: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
cc10: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
cc20: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
cc30: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
cc40: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
cc50: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
cc60: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
cc70: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
cc80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
cc90: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
cca0: 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34 28 53  id Bind_UInt64(S
ccb0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
ccc0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
ccd0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
cce0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 6c 6f  , int index, ulo
ccf0: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
cd00: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
cd10: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
cd20: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
cd30: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
cd40: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
cd50: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
cd60: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
cd70: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
cd80: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
cd90: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
cda0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
cdb0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
cdc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
cdd0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
cde0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
cdf0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ce00: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
ce10: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
ce20: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ce30: 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28 68 61  3_bind_uint64(ha
ce40: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
ce50: 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
ce60: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
ce70: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
ce80: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
ce90: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
cea0: 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36  lite3_bind_uint6
ceb0: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
cec0: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
ced0: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
cee0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
cef0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
cf00: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
cf10: 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  f..        if (n
cf20: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
cf30: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
cf40: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
cf50: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
cf60: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
cf70: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
cf80: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
cf90: 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65  Text(SQLiteState
cfa0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
cfb0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
cfc0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
cfd0: 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  x, string value)
cfe0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
cff0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
d000: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
d010: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
d020: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
d030: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
d040: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
d050: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
d060: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
d070: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
d080: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
d090: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
d0a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d0b0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
d0c0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
d0d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
d0e0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
d0f0: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
d100: 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23 69  F8(value);....#i
d110: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
d120: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
d130: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
d140: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
d150: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
d160: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
d170: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
d180: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
d190: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
d1a0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
d1b0: 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  x, b);..        
d1c0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
d1d0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
d1e0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
d1f0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d200: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68  ite3_bind_text(h
d210: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c  andle, index, b,
d220: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
d230: 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
d240: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
d250: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
d260: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
d270: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
d280: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
d290: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
d2a0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
d2b0: 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65  e void Bind_Date
d2c0: 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Time(SQLiteState
d2d0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
d2e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
d2f0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
d300: 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d  x, DateTime dt).
d310: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
d320: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
d330: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
d340: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
d350: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
d360: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
d370: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
d380: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
d390: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
d3a0: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
d3b0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
d3c0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
d3d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d3e0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
d3f0: 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a  e, index, dt);..
d400: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
d410: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  f....        if 
d420: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
d430: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
d440: 42 69 6e 64 44 61 74 65 54 69 6d 65 57 69 74 68  BindDateTimeWith
d450: 4b 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Kind) == SQLiteC
d460: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42  onnectionFlags.B
d470: 69 6e 64 44 61 74 65 54 69 6d 65 57 69 74 68 4b  indDateTimeWithK
d480: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
d490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
d4a0: 28 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20  ((_datetimeKind 
d4b0: 21 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  != DateTimeKind.
d4c0: 55 6e 73 70 65 63 69 66 69 65 64 29 20 26 26 0d  Unspecified) &&.
d4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d4e0: 20 28 64 74 2e 4b 69 6e 64 20 21 3d 20 44 61 74   (dt.Kind != Dat
d4f0: 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63  eTimeKind.Unspec
d500: 69 66 69 65 64 29 20 26 26 0d 0a 20 20 20 20 20  ified) &&..     
d510: 20 20 20 20 20 20 20 20 20 20 20 28 64 74 2e 4b             (dt.K
d520: 69 6e 64 20 21 3d 20 5f 64 61 74 65 74 69 6d 65  ind != _datetime
d530: 4b 69 6e 64 29 29 0d 0a 20 20 20 20 20 20 20 20  Kind))..        
d540: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d550: 20 20 20 20 20 20 20 69 66 20 28 5f 64 61 74 65         if (_date
d560: 74 69 6d 65 4b 69 6e 64 20 3d 3d 20 44 61 74 65  timeKind == Date
d570: 54 69 6d 65 4b 69 6e 64 2e 55 74 63 29 0d 0a 20  TimeKind.Utc).. 
d580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d590: 20 20 20 64 74 20 3d 20 64 74 2e 54 6f 55 6e 69     dt = dt.ToUni
d5a0: 76 65 72 73 61 6c 54 69 6d 65 28 29 3b 0d 0a 20  versalTime();.. 
d5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
d5c0: 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d  lse if (_datetim
d5d0: 65 4b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d  eKind == DateTim
d5e0: 65 4b 69 6e 64 2e 4c 6f 63 61 6c 29 0d 0a 20 20  eKind.Local)..  
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 20 20 64 74 20 3d 20 64 74 2e 54 6f 4c 6f 63 61    dt = dt.ToLoca
d610: 6c 54 69 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20  lTime();..      
d620: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
d630: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77   }....        sw
d640: 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46  itch (_datetimeF
d650: 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20  ormat)..        
d660: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
d670: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
d680: 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20  rmats.Ticks:..  
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
d6a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d6b0: 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20       long value 
d6c0: 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23  = dt.Ticks;....#
d6d0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
d6e0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
d6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d700: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
d710: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d720: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
d730: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
d740: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
d750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d760: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d780: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
d790: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
d7a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d7b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
d7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
d7d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
d7e0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
d7f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
d800: 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  nd_int64(handle,
d810: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
d820: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
d830: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
d840: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
d850: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
d860: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d870: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
d880: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
d890: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
d8a0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
d8b0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
d8c0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
d8d0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
d8e0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
d8f0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
d900: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
d910: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
d920: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
d930: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
d940: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
d950: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
d960: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
d970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d980: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
d990: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
d9a0: 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79  ormats.JulianDay
d9b0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
d9c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d9d0: 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
d9e0: 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61   value = ToJulia
d9f0: 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23 69 66  nDay(dt);....#if
da00: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
da10: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da30: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
da40: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
da50: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
da60: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
da70: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
da80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
daa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
dab0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
dac0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
dad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dae0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
daf0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
db00: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
db10: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
db20: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
db30: 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20  _double(handle, 
db40: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
db50: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
db60: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
db70: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
db80: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
db90: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
dba0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
dbb0: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
dbc0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
dbd0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
dbe0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
dbf0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
dc00: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
dc10: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
dc20: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
dc30: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
dc40: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
dc50: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
dc60: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
dc70: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
dc80: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
dc90: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
dca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dcb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
dcc0: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
dcd0: 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68  ormats.UnixEpoch
dce0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
dcf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
dd00: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
dd10: 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54  alue = Convert.T
dd20: 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61  oInt64(dt.Subtra
dd30: 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f  ct(UnixEpoch).To
dd40: 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a  talSeconds);....
dd50: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
dd60: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
dd90: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
dda0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
ddb0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
ddc0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
ddd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dde0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de00: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
de10: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
de20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
de30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
de40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
de50: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
de60: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
de70: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
de80: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
de90: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
dea0: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
deb0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
ded0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
dee0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
def0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
df00: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
df10: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
df20: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
df30: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
df40: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
df50: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
df60: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
df70: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
df80: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
df90: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
dfa0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
dfb0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
dfc0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
dfd0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
dfe0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
dff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e000: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
e010: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
e020: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e040: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
e050: 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20  TF8(dt);....#if 
e060: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
e070: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e090: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
e0a0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
e0b0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
e0c0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e0d0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
e110: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
e120: 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20  dex, b);..      
e130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
e140: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
e160: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
e170: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
e180: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
e190: 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c  ind_text(handle,
e1a0: 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e   index, b, b.Len
e1b0: 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
e1c0: 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  )(-1));..       
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e1e0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
e1f0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
e200: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e210: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
e220: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
e240: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
e250: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e260: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
e270: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
e280: 65 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62  e void Bind_Blob
e290: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
e2a0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
e2b0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
e2c0: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  gs, int index, b
e2d0: 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d  yte[] blobData).
e2e0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
e2f0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
e300: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
e310: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
e320: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
e330: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
e340: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
e350: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
e360: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
e370: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
e380: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e390: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
e3a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e3b0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
e3c0: 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61  e, index, blobDa
e3d0: 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ta);..        }.
e3e0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
e3f0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
e400: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
e410: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
e420: 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e  e3_bind_blob(han
e430: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62  dle, index, blob
e440: 44 61 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c  Data, blobData.L
e450: 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28  ength, (IntPtr)(
e460: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  -1));..        i
e470: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
e480: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
e490: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
e4a0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
e4b0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
e4c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
e4d0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
e4e0: 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53  ind_Null(SQLiteS
e4f0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
e500: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e510: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
e520: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
e530: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
e540: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
e550: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
e560: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
e570: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
e580: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
e590: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
e5a0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e5b0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
e5c0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
e5d0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
e5e0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
e5f0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
e600: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  d(handle, index)
e610: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
e620: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
e630: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
e640: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
e650: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e660: 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65  bind_null(handle
e670: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
e680: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
e690: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
e6a0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
e6b0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
e6c0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
e6d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
e6e0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
e6f0: 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e  t Bind_ParamCoun
e700: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
e710: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
e720: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
e730: 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ags)..    {..   
e740: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
e750: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
e760: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
e770: 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20  _stmt;..        
e780: 69 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61  int value = Unsa
e790: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e7a0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
e7b0: 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e  ameter_count(han
e7c0: 64 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dle);....       
e7d0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
e7e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e7f0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
e800: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e810: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
e820: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e830: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
e840: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
e850: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
e860: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
e870: 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e  gMessage(String.
e880: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
e890: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
e8a0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
e8b0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
e8c0: 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
e8d0: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f   {0} paramter co
e8e0: 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20  unt is {1}.",.. 
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
e900: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c  andleIntPtr, val
e910: 75 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ue));..        }
e920: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
e930: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
e940: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
e950: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
e960: 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28   Bind_ParamName(
e970: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
e980: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
e990: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
e9a0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  s, int index).. 
e9b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
e9c0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
e9d0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
e9e0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
e9f0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
ea00: 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  name;....#if !SQ
ea10: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
ea20: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d         int len =
ea30: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d   0;..        nam
ea40: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
ea50: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
ea60: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
ea70: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
ea80: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
ea90: 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29   index, ref len)
eaa0: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
eab0: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55          name = U
eac0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
ead0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
eae0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
eaf0: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64  ameter_name(hand
eb00: 6c 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  le, index), -1);
eb10: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
eb20: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
eb30: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
eb40: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
eb50: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
eb60: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
eb70: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
eb80: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
eb90: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
eba0: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
ebb0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
ebc0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69  .LogMessage(Stri
ebd0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
ebe0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
ebf0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
ec00: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
ec10: 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d           "Statem
ec20: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
ec30: 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b   #{1} name is {{
ec40: 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20  {2}}}.",..      
ec50: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
ec60: 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e  IntPtr, index, n
ec70: 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame));..        
ec80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
ec90: 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d  urn name;..    }
eca0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ecb0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69   override int Bi
ecc0: 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53 51  nd_ParamIndex(SQ
ecd0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
ece0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
ecf0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
ed00: 20 73 74 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d   string paramNam
ed10: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
ed20: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
ed30: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
ed40: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
ed50: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e  tmt;..        in
ed60: 74 20 69 6e 64 65 78 20 3d 20 55 6e 73 61 66 65  t index = Unsafe
ed70: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ed80: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
ed90: 65 74 65 72 5f 69 6e 64 65 78 28 68 61 6e 64 6c  eter_index(handl
eda0: 65 2c 20 54 6f 55 54 46 38 28 70 61 72 61 6d 4e  e, ToUTF8(paramN
edb0: 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame));....      
edc0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
edd0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
ede0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
edf0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
ee00: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
ee10: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
ee20: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
ee30: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
ee40: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
ee50: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
ee60: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
ee70: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
ee80: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
ee90: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
eea0: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
eeb0: 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e         "Statemen
eec0: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 69  t {0} paramter i
eed0: 6e 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b  ndex of name {{{
eee0: 31 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d  1}}} is #{2}.",.
eef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ef00: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70   handleIntPtr, p
ef10: 61 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29  aramName, index)
ef20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
ef30: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
ef40: 69 6e 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  index;..    }...
ef50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
ef60: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d  erride int Colum
ef70: 6e 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61  nCount(SQLiteSta
ef80: 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20  tement stmt)..  
ef90: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
efa0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
efb0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
efc0: 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e  lumn_count(stmt.
efd0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a  _sqlite_stmt);..
efe0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
eff0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
f000: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65  tring ColumnName
f010: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
f020: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
f030: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
f040: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
f050: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
f060: 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  0;..      IntPtr
f070: 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
f080: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f090: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74  _column_name_int
f0a0: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
f0b0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
f0c0: 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ef len);..#else.
f0d0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
f0e0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
f0f0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
f100: 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  lumn_name(stmt._
f110: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
f120: 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ex);..#endif..  
f130: 20 20 20 20 69 66 20 28 70 20 3d 3d 20 49 6e 74      if (p == Int
f140: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
f150: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
f160: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 53 51 4c  iteException(SQL
f170: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 4d  iteErrorCode.NoM
f180: 65 6d 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  em, GetLastError
f190: 28 29 29 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54  ());..#if !SQLIT
f1a0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
f1b0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
f1c0: 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a  tring(p, len);..
f1d0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
f1e0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
f1f0: 28 70 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  (p, -1);..#endif
f200: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
f210: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
f220: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f   TypeAffinity Co
f230: 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c  lumnAffinity(SQL
f240: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
f250: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
f260: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
f270: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
f280: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
f290: 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e  olumn_type(stmt.
f2a0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
f2b0: 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  dex);..    }....
f2c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
f2d0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
f2e0: 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74  umnType(SQLiteSt
f2f0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
f300: 74 20 69 6e 64 65 78 2c 20 72 65 66 20 54 79 70  t index, ref Typ
f310: 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e  eAffinity nAffin
f320: 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ity)..    {..   
f330: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66     int len;..#if
f340: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
f350: 44 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 30  D..      len = 0
f360: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
f370: 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
f380: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f390: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f  column_decltype_
f3a0: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
f3b0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
f3c0: 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c  , ref len);..#el
f3d0: 73 65 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20  se..      len = 
f3e0: 2d 31 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  -1;..      IntPt
f3f0: 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
f400: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
f410: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
f420: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
f430: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
f440: 6e 64 69 66 0d 0a 20 20 20 20 20 20 6e 41 66 66  ndif..      nAff
f450: 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66  inity = ColumnAf
f460: 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
f470: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ex);....      if
f480: 20 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65   (p != IntPtr.Ze
f490: 72 6f 29 20 72 65 74 75 72 6e 20 55 54 46 38 54  ro) return UTF8T
f4a0: 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b  oString(p, len);
f4b0: 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
f4c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73      {..        s
f4d0: 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d  tring[] ar = stm
f4e0: 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e  t.TypeDefinition
f4f0: 73 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  s;..        if (
f500: 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ar != null)..   
f510: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f520: 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61 72    if (index < ar
f530: 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69 6e  .Length && ar[in
f540: 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  dex] != null).. 
f550: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
f560: 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  n ar[index];..  
f570: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f580: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45   return String.E
f590: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
f5a0: 20 2f 2f 73 77 69 74 63 68 20 28 6e 41 66 66 69   //switch (nAffi
f5b0: 6e 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 2f  nity)..        /
f5c0: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  /{..        //  
f5d0: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
f5e0: 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20  y.Int64:..      
f5f0: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
f600: 42 49 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20 20  BIGINT";..      
f610: 20 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41    //  case TypeA
f620: 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d  ffinity.Double:.
f630: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72  .        //    r
f640: 65 74 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b 0d  eturn "DOUBLE";.
f650: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73  .        //  cas
f660: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  e TypeAffinity.B
f670: 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lob:..        //
f680: 20 20 20 20 72 65 74 75 72 6e 20 22 42 4c 4f 42      return "BLOB
f690: 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ";..        //  
f6a0: 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20  default:..      
f6b0: 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22    //    return "
f6c0: 54 45 58 54 22 3b 0d 0a 20 20 20 20 20 20 20 20  TEXT";..        
f6d0: 2f 2f 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  //}..      }..  
f6e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f6f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
f700: 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c   ColumnIndex(SQL
f710: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
f720: 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e  t, string column
f730: 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
f740: 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75      int x = Colu
f750: 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a  mnCount(stmt);..
f760: 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74  ..      for (int
f770: 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e   n = 0; n < x; n
f780: 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ++)..      {..  
f790: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
f7a0: 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e  .Compare(columnN
f7b0: 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28  ame, ColumnName(
f7c0: 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67  stmt, n), String
f7d0: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
f7e0: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
f7f0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72   0)..          r
f800: 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20  eturn n;..      
f810: 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  }..      return 
f820: 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  -1;..    }....  
f830: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f840: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
f850: 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51  nOriginalName(SQ
f860: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
f870: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
f880: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
f890: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
f8a0: 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
f8b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
f8c0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
f8d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f8e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
f8f0: 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  igin_name_intero
f900: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
f910: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
f920: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
f930: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
f940: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
f950: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f960: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
f970: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d  _origin_name(stm
f980: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
f990: 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
f9a0: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
f9b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
f9c0: 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
f9d0: 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28 53  mnDatabaseName(S
f9e0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
f9f0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
fa00: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
fa10: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
fa20: 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
fa30: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
fa40: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
fa50: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
fa60: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
fa70: 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e 74  atabase_name_int
fa80: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
fa90: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
faa0: 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
fab0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
fac0: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
fad0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
fae0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
faf0: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
fb00: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
fb10: 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
fb20: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
fb30: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
fb40: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
fb50: 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65   ColumnTableName
fb60: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
fb70: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
fb80: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
fb90: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
fba0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
fbb0: 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  0;..      return
fbc0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
fbd0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
fbe0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
fbf0: 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65  _table_name_inte
fc00: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
fc10: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65  _stmt, index, re
fc20: 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  f len), len);..#
fc30: 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
fc40: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
fc50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
fc60: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
fc70: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74  mn_table_name(st
fc80: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
fc90: 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
fca0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
fcb0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
fcc0: 72 72 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d  rride void Colum
fcd0: 6e 4d 65 74 61 44 61 74 61 28 73 74 72 69 6e 67  nMetaData(string
fce0: 20 64 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e   dataBase, strin
fcf0: 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20  g table, string 
fd00: 63 6f 6c 75 6d 6e 2c 20 72 65 66 20 73 74 72 69  column, ref stri
fd10: 6e 67 20 64 61 74 61 54 79 70 65 2c 20 72 65 66  ng dataType, ref
fd20: 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53   string collateS
fd30: 65 71 75 65 6e 63 65 2c 20 72 65 66 20 62 6f 6f  equence, ref boo
fd40: 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62  l notNull, ref b
fd50: 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20  ool primaryKey, 
fd60: 72 65 66 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63  ref bool autoInc
fd70: 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a  rement)..    {..
fd80: 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 61 74        IntPtr dat
fd90: 61 54 79 70 65 50 74 72 20 3d 20 49 6e 74 50 74  aTypePtr = IntPt
fda0: 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49  r.Zero;..      I
fdb0: 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72  ntPtr collSeqPtr
fdc0: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
fdd0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e  .      int nnotN
fde0: 75 6c 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ull = 0;..      
fdf0: 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 20  int nprimaryKey 
fe00: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  = 0;..      int 
fe10: 6e 61 75 74 6f 49 6e 63 20 3d 20 30 3b 0d 0a 20  nautoInc = 0;.. 
fe20: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
fe30: 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69  Code n;..      i
fe40: 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20  nt dtLen;..     
fe50: 20 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23   int csLen;....#
fe60: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
fe70: 41 52 44 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e  ARD..      dtLen
fe80: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 63 73 4c   = 0;..      csL
fe90: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6e  en = 0;..      n
fea0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
feb0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
fec0: 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
fed0: 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71  data_interop(_sq
fee0: 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61  l, ToUTF8(dataBa
fef0: 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c  se), ToUTF8(tabl
ff00: 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d  e), ToUTF8(colum
ff10: 6e 29 2c 20 72 65 66 20 64 61 74 61 54 79 70 65  n), ref dataType
ff20: 50 74 72 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71  Ptr, ref collSeq
ff30: 50 74 72 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c  Ptr, ref nnotNul
ff40: 6c 2c 20 72 65 66 20 6e 70 72 69 6d 61 72 79 4b  l, ref nprimaryK
ff50: 65 79 2c 20 72 65 66 20 6e 61 75 74 6f 49 6e 63  ey, ref nautoInc
ff60: 2c 20 72 65 66 20 64 74 4c 65 6e 2c 20 72 65 66  , ref dtLen, ref
ff70: 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d   csLen);..#else.
ff80: 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d  .      dtLen = -
ff90: 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20  1;..      csLen 
ffa0: 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e  = -1;....      n
ffb0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
ffc0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
ffd0: 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
ffe0: 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46  data(_sql, ToUTF
fff0: 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55  8(dataBase), ToU
10000 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54  TF8(table), ToUT
10010 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20  F8(column), ref 
10020 64 61 74 61 54 79 70 65 50 74 72 2c 20 72 65 66  dataTypePtr, ref
10030 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 72 65 66   collSeqPtr, ref
10040 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e   nnotNull, ref n
10050 70 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20  primaryKey, ref 
10060 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64  nautoInc);..#end
10070 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  if..      if (n 
10080 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
10090 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
100a0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
100b0 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
100c0 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61  ());....      da
100d0 74 61 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53  taType = UTF8ToS
100e0 74 72 69 6e 67 28 64 61 74 61 54 79 70 65 50 74  tring(dataTypePt
100f0 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20  r, dtLen);..    
10100 20 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63    collateSequenc
10110 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
10120 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c  (collSeqPtr, csL
10130 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f  en);....      no
10140 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c  tNull = (nnotNul
10150 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20  l == 1);..      
10160 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70  primaryKey = (np
10170 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b  rimaryKey == 1);
10180 0d 0a 20 20 20 20 20 20 61 75 74 6f 49 6e 63 72  ..      autoIncr
10190 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e  ement = (nautoIn
101a0 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d  c == 1);..    }.
101b0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
101c0 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20  override double 
101d0 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74 65  GetDouble(SQLite
101e0 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
101f0 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
10200 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20  {..      double 
10210 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41  value;..#if !PLA
10220 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
10230 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61  MEWORK..      va
10240 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  lue = UnsafeNati
10250 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10260 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28  3_column_double(
10270 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
10280 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69  t, index);..#eli
10290 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
102a0 52 44 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RD..      value 
102b0 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e  = 0.0;..      Un
102c0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
102d0 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
102e0 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
102f0 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
10300 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  t, index, ref va
10310 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
10320 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
10330 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
10340 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
10350 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
10360 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alue;..    }....
10370 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10380 72 72 69 64 65 20 73 62 79 74 65 20 47 65 74 53  rride sbyte GetS
10390 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74 65  Byte(SQLiteState
103a0 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
103b0 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
103c0 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
103d0 63 6b 65 64 28 28 73 62 79 74 65 29 28 47 65 74  cked((sbyte)(Get
103e0 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
103f0 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c  x) & byte.MaxVal
10400 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
10410 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10420 72 72 69 64 65 20 62 79 74 65 20 47 65 74 42 79  rride byte GetBy
10430 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  te(SQLiteStateme
10440 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
10450 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
10460 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
10470 65 64 28 28 62 79 74 65 29 28 47 65 74 49 6e 74  ed((byte)(GetInt
10480 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
10490 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29  & byte.MaxValue)
104a0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
104b0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
104c0 64 65 20 73 68 6f 72 74 20 47 65 74 49 6e 74 31  de short GetInt1
104d0 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  6(SQLiteStatemen
104e0 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
104f0 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
10500 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
10510 64 28 28 73 68 6f 72 74 29 28 47 65 74 49 6e 74  d((short)(GetInt
10520 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
10530 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75  & ushort.MaxValu
10540 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
10550 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10560 72 69 64 65 20 75 73 68 6f 72 74 20 47 65 74 55  ride ushort GetU
10570 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74  Int16(SQLiteStat
10580 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
10590 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
105a0 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
105b0 65 63 6b 65 64 28 28 75 73 68 6f 72 74 29 28 47  ecked((ushort)(G
105c0 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
105d0 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61  dex) & ushort.Ma
105e0 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d  xValue));..    }
105f0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10600 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
10610 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  tInt32(SQLiteSta
10620 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
10630 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
10640 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
10650 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10660 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
10670 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  int(stmt._sqlite
10680 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
10690 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
106a0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75  ernal override u
106b0 69 6e 74 20 47 65 74 55 49 6e 74 33 32 28 53 51  int GetUInt32(SQ
106c0 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
106d0 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
106e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
106f0 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75  urn unchecked((u
10700 69 6e 74 29 47 65 74 49 6e 74 33 32 28 73 74 6d  int)GetInt32(stm
10710 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20  t, index));..   
10720 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
10730 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
10740 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65   GetInt64(SQLite
10750 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
10760 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
10770 7b 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76 61  {..      long va
10780 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46  lue;..#if !PLATF
10790 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
107a0 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75  WORK..      valu
107b0 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
107c0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
107d0 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d  column_int64(stm
107e0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
107f0 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21  index);..#elif !
10800 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
10810 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 30  .      value = 0
10820 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  ;..      UnsafeN
10830 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10840 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
10850 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  4_interop(stmt._
10860 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
10870 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
10880 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
10890 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
108a0 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
108b0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
108c0 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
108d0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
108e0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
108f0 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36 34 28  ulong GetUInt64(
10900 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
10910 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
10920 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
10930 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28  eturn unchecked(
10940 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34 28  (ulong)GetInt64(
10950 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
10960 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
10970 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
10980 74 72 69 6e 67 20 47 65 74 54 65 78 74 28 53 51  tring GetText(SQ
10990 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
109a0 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
109b0 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
109c0 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
109d0 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
109e0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
109f0 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
10a00 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10a10 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
10a20 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  xt_interop(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 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c  dex, ref len), l
10a50 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
10a60 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
10a70 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
10a80 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10a90 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73  e3_column_text(s
10aa0 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
10ab0 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20  , index),..     
10ac0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
10ad0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
10ae0 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74  olumn_bytes(stmt
10af0 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
10b00 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ndex));..#endif.
10b10 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10b20 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10b30 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65  DateTime GetDate
10b40 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Time(SQLiteState
10b50 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
10b60 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
10b70 20 20 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d      if (_datetim
10b80 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74  eFormat == SQLit
10b90 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63  eDateFormats.Tic
10ba0 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ks)..        ret
10bb0 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47  urn ToDateTime(G
10bc0 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  etInt64(stmt, in
10bd0 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b  dex), _datetimeK
10be0 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73  ind);..      els
10bf0 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46  e if (_datetimeF
10c00 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44  ormat == SQLiteD
10c10 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61  ateFormats.Julia
10c20 6e 44 61 79 29 0d 0a 20 20 20 20 20 20 20 20 72  nDay)..        r
10c30 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
10c40 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c  (GetDouble(stmt,
10c50 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69   index), _dateti
10c60 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20  meKind);..      
10c70 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69  else if (_dateti
10c80 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69  meFormat == SQLi
10c90 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e  teDateFormats.Un
10ca0 69 78 45 70 6f 63 68 29 0d 0a 20 20 20 20 20 20  ixEpoch)..      
10cb0 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
10cc0 69 6d 65 28 47 65 74 49 6e 74 33 32 28 73 74 6d  ime(GetInt32(stm
10cd0 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65  t, index), _date
10ce0 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69  timeKind);....#i
10cf0 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
10d00 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
10d10 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65  n = 0;..      re
10d20 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
10d30 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10d40 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
10d50 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  mn_text_interop(
10d60 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
10d70 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  t, index, ref le
10d80 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
10d90 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ..      return T
10da0 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65  oDateTime(Unsafe
10db0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10dc0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
10dd0 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
10de0 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20  tmt, index),..  
10df0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
10e00 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10e10 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73  3_column_bytes(s
10e20 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
10e30 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64  , index));..#end
10e40 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
10e50 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
10e60 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73  de long GetBytes
10e70 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
10e80 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
10e90 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65  , int nDataOffse
10ea0 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c  t, byte[] bDest,
10eb0 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74   int nStart, int
10ec0 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b   nLength)..    {
10ed0 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e  ..      int nlen
10ee0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
10ef0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
10f00 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74  olumn_bytes(stmt
10f10 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
10f20 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
10f30 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61  // If no destina
10f40 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74  tion buffer, ret
10f50 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65  urn the size nee
10f60 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28  ded...      if (
10f70 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  bDest == null) r
10f80 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20  eturn nlen;.... 
10f90 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64       int nCopied
10fa0 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20   = nLength;.... 
10fb0 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
10fc0 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73   + nStart > bDes
10fd0 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65  t.Length) nCopie
10fe0 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  d = bDest.Length
10ff0 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20   - nStart;..    
11000 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
11010 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c  nDataOffset > nl
11020 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c  en) nCopied = nl
11030 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74  en - nDataOffset
11040 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
11050 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20  Copied > 0)..   
11060 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
11070 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66  tPtr ptr = Unsaf
11080 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11090 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
110a0 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  ob(stmt._sqlite_
110b0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
110c0 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c  .        Marshal
110d0 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70  .Copy((IntPtr)(p
110e0 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e  tr.ToInt64() + n
110f0 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65  DataOffset), bDe
11100 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70  st, nStart, nCop
11110 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ied);..      }..
11120 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
11130 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f    {..        nCo
11140 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  pied = 0;..     
11150 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
11160 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20  rn nCopied;..   
11170 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
11180 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
11190 20 47 65 74 43 68 61 72 73 28 53 51 4c 69 74 65   GetChars(SQLite
111a0 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
111b0 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e  int index, int n
111c0 44 61 74 61 4f 66 66 73 65 74 2c 20 63 68 61 72  DataOffset, char
111d0 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53  [] bDest, int nS
111e0 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74  tart, int nLengt
111f0 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  h)..    {..     
11200 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20   int nlen;..    
11210 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20    int nCopied = 
11220 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  nLength;....    
11230 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20 47    string str = G
11240 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
11250 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e  ex);..      nlen
11260 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a   = str.Length;..
11270 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73  ..      if (bDes
11280 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
11290 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20  n nlen;....     
112a0 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
112b0 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65  Start > bDest.Le
112c0 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20  ngth) nCopied = 
112d0 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e  bDest.Length - n
112e0 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66  Start;..      if
112f0 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74   (nCopied + nDat
11300 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20  aOffset > nlen) 
11310 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d  nCopied = nlen -
11320 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d   nDataOffset;...
11330 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
11340 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  ed > 0)..       
11350 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61 74   str.CopyTo(nDat
11360 61 4f 66 66 73 65 74 2c 20 62 44 65 73 74 2c 20  aOffset, bDest, 
11370 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29  nStart, nCopied)
11380 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 6e 43  ;..      else nC
11390 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20  opied = 0;....  
113a0 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69      return nCopi
113b0 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ed;..    }....  
113c0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
113d0 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28  ide bool IsNull(
113e0 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
113f0 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
11400 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
11410 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66 66  eturn (ColumnAff
11420 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65  inity(stmt, inde
11430 78 29 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69  x) == TypeAffini
11440 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d  ty.Null);..    }
11450 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
11460 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 41 67   override int Ag
11470 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49 6e 74  gregateCount(Int
11480 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20  Ptr context)..  
11490 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
114a0 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
114b0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67  thods.sqlite3_ag
114c0 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63 6f  gregate_count(co
114d0 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ntext);..    }..
114e0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
114f0 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
11500 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 46 75  rorCode CreateFu
11510 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74  nction(string st
11520 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e  rFunction, int n
11530 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43  Args, bool needC
11540 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61  ollSeq, SQLiteCa
11550 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c  llback func, SQL
11560 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  iteCallback func
11570 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61  step, SQLiteFina
11580 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69  lCallback funcfi
11590 6e 61 6c 2c 20 62 6f 6f 6c 20 63 61 6e 54 68 72  nal, bool canThr
115a0 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ow)..    {..    
115b0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
115c0 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
115d0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
115e0 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
115f0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11600 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
11610 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ion_interop(_sql
11620 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
11630 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c  tion), nArgs, 4,
11640 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
11650 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
11660 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f  ncfinal, (needCo
11670 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f  llSeq == true) ?
11680 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20   1 : 0);..      
11690 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
116a0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d  rrorCode.Ok) n =
116b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
116c0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
116d0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74  ate_function_int
116e0 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46  erop(_sql, ToUTF
116f0 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
11700 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72  nArgs, 1, IntPtr
11710 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
11720 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
11730 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d  , (needCollSeq =
11740 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29  = true) ? 1 : 0)
11750 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
11760 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
11770 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11780 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
11790 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
117a0 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
117b0 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 4, IntPtr.Zero
117c0 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
117d0 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20  , funcfinal);.. 
117e0 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
117f0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
11800 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ) n = UnsafeNati
11810 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
11820 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
11830 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
11840 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72  trFunction), nAr
11850 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65  gs, 1, IntPtr.Ze
11860 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74  ro, func, funcst
11870 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d  ep, funcfinal);.
11880 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
11890 66 20 28 63 61 6e 54 68 72 6f 77 20 26 26 20 28  f (canThrow && (
118a0 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
118b0 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72 6f 77 20  Code.Ok)) throw 
118c0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
118d0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
118e0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 72  ror());..      r
118f0 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d  eturn n;..    }.
11900 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11910 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
11920 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 43  rrorCode CreateC
11930 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20  ollation(string 
11940 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51  strCollation, SQ
11950 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75  LiteCollation fu
11960 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74  nc, SQLiteCollat
11970 69 6f 6e 20 66 75 6e 63 31 36 2c 20 62 6f 6f 6c  ion func16, bool
11980 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20   canThrow)..    
11990 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
119a0 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
119b0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
119c0 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
119d0 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20  collation(_sql, 
119e0 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74  ToUTF8(strCollat
119f0 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e  ion), 2, IntPtr.
11a00 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a  Zero, func16);..
11a10 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
11a20 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
11a30 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  k) n = UnsafeNat
11a40 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11a50 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
11a60 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
11a70 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20  (strCollation), 
11a80 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  1, IntPtr.Zero, 
11a90 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69 66  func);..      if
11aa0 20 28 63 61 6e 54 68 72 6f 77 20 26 26 20 28 6e   (canThrow && (n
11ab0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
11ac0 6f 64 65 2e 4f 6b 29 29 20 74 68 72 6f 77 20 6e  ode.Ok)) throw n
11ad0 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
11ae0 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
11af0 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 72 65  or());..      re
11b00 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d 0a  turn n;..    }..
11b10 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11b20 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74  verride int Cont
11b30 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72  extCollateCompar
11b40 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e(CollationEncod
11b50 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74  ingEnum enc, Int
11b60 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
11b70 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67 20 73  ing s1, string s
11b80 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  2)..    {..#if !
11b90 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
11ba0 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31  .      byte[] b1
11bb0 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  ;..      byte[] 
11bc0 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65  b2;..      Syste
11bd0 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20  m.Text.Encoding 
11be0 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c  converter = null
11bf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63  ;....      switc
11c00 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b  h (enc)..      {
11c10 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
11c20 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
11c30 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20  Enum.UTF8:..    
11c40 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
11c50 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
11c60 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20  coding.UTF8;..  
11c70 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
11c80 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
11c90 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
11ca0 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20  um.UTF16LE:..   
11cb0 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
11cc0 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
11cd0 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b  ncoding.Unicode;
11ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
11cf0 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
11d00 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
11d10 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d  ngEnum.UTF16BE:.
11d20 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
11d30 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
11d40 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45  xt.Encoding.BigE
11d50 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ndianUnicode;.. 
11d60 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
11d70 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
11d80 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72    b1 = converter
11d90 2e 47 65 74 42 79 74 65 73 28 73 31 29 3b 0d 0a  .GetBytes(s1);..
11da0 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65        b2 = conve
11db0 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73 32  rter.GetBytes(s2
11dc0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  );....      retu
11dd0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
11de0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
11df0 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61  ontext_collcompa
11e00 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  re_interop(conte
11e10 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74  xt, b1, b1.Lengt
11e20 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68  h, b2, b2.Length
11e30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
11e40 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
11e50 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
11e60 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
11e70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
11e80 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
11e90 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65  t ContextCollate
11ea0 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f  Compare(Collatio
11eb0 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e  nEncodingEnum en
11ec0 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
11ed0 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68  t, char[] c1, ch
11ee0 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d  ar[] c2)..    {.
11ef0 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
11f00 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74  NDARD..      byt
11f10 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62  e[] b1;..      b
11f20 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20  yte[] b2;..     
11f30 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
11f40 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20  oding converter 
11f50 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
11f60 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20   switch (enc).. 
11f70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11f80 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
11f90 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a  codingEnum.UTF8:
11fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
11fb0 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
11fc0 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46  ext.Encoding.UTF
11fd0 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  8;..          br
11fe0 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
11ff0 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
12000 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45  dingEnum.UTF16LE
12010 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
12020 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
12030 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e  Text.Encoding.Un
12040 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
12050 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
12060 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
12070 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
12080 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16BE:..         
12090 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
120a0 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
120b0 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f  g.BigEndianUnico
120c0 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
120d0 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  reak;..      }..
120e0 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e  ..      b1 = con
120f0 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
12100 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d  c1);..      b2 =
12110 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
12120 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20  tes(c2);....    
12130 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
12140 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12150 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
12160 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70  lcompare_interop
12170 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31  (context, b1, b1
12180 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e  .Length, b2, b2.
12190 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d  Length);..#else.
121a0 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
121b0 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
121c0 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
121d0 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
121e0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
121f0 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71  ide CollationSeq
12200 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74 69  uence GetCollati
12210 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c 69 74  onSequence(SQLit
12220 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20  eFunction func, 
12230 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
12240 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
12250 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
12260 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71      CollationSeq
12270 75 65 6e 63 65 20 73 65 71 20 3d 20 6e 65 77 20  uence seq = new 
12280 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
12290 65 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  e();..      int 
122a0 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
122b0 69 6e 74 20 74 79 70 65 20 3d 20 30 3b 0d 0a 20  int type = 0;.. 
122c0 20 20 20 20 20 69 6e 74 20 65 6e 63 20 3d 20 30       int enc = 0
122d0 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
122e0 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
122f0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12300 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f  context_collseq_
12310 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
12320 20 72 65 66 20 74 79 70 65 2c 20 72 65 66 20 65   ref type, ref e
12330 6e 63 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 0d  nc, ref len);...
12340 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d 20  .      if (p != 
12350 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d  null) seq.Name =
12360 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c   UTF8ToString(p,
12370 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65   len);..      se
12380 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74  q.Type = (Collat
12390 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79 70 65  ionTypeEnum)type
123a0 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f 66 75  ;..      seq._fu
123b0 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20  nc = func;..    
123c0 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d    seq.Encoding =
123d0 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64   (CollationEncod
123e0 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a  ingEnum)enc;....
123f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 65 71        return seq
12400 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
12410 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
12420 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
12430 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
12440 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
12450 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
12460 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 42  g GetParamValueB
12470 79 74 65 73 28 49 6e 74 50 74 72 20 70 2c 20 69  ytes(IntPtr p, i
12480 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20  nt nDataOffset, 
12490 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e  byte[] bDest, in
124a0 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c  t nStart, int nL
124b0 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20  ength)..    {.. 
124c0 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20       int nlen = 
124d0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
124e0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
124f0 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20  e_bytes(p);.... 
12500 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65       // If no de
12510 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72  stination buffer
12520 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a  , return the siz
12530 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20  e needed...     
12540 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75   if (bDest == nu
12550 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b  ll) return nlen;
12560 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43  ....      int nC
12570 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b  opied = nLength;
12580 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
12590 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e  opied + nStart >
125a0 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e   bDest.Length) n
125b0 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c  Copied = bDest.L
125c0 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d  ength - nStart;.
125d0 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
125e0 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  ed + nDataOffset
125f0 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64   > nlen) nCopied
12600 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f   = nlen - nDataO
12610 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ffset;....      
12620 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29  if (nCopied > 0)
12630 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
12640 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20     IntPtr ptr = 
12650 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12660 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
12670 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20  e_blob(p);....  
12680 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f        Marshal.Co
12690 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e  py((IntPtr)(ptr.
126a0 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74  ToInt64() + nDat
126b0 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c  aOffset), bDest,
126c0 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64   nStart, nCopied
126d0 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
126e0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b     else..      {
126f0 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65  ..        nCopie
12700 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d  d = 0;..      }.
12710 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
12720 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d  nCopied;..    }.
12730 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
12740 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20  override double 
12750 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44 6f 75  GetParamValueDou
12760 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d  ble(IntPtr ptr).
12770 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f  .    {..      do
12780 75 62 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66  uble value;..#if
12790 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
127a0 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
127b0 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66     value = Unsaf
127c0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
127d0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
127e0 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66  ble(ptr);..#elif
127f0 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
12800 44 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d  D..      value =
12810 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73   0.0;..      Uns
12820 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12830 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64  .sqlite3_value_d
12840 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74  ouble_interop(pt
12850 72 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  r, ref value);..
12860 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
12870 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
12880 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
12890 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
128a0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
128b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
128c0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
128d0 6e 74 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  nt GetParamValue
128e0 49 6e 74 33 32 28 49 6e 74 50 74 72 20 70 74 72  Int32(IntPtr ptr
128f0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12900 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
12910 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
12920 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74 72  e3_value_int(ptr
12930 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
12940 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
12950 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d  de long GetParam
12960 56 61 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74  ValueInt64(IntPt
12970 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
12980 20 20 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65       Int64 value
12990 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ;..#if !PLATFORM
129a0 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
129b0 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d  K..      value =
129c0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
129d0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
129e0 75 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a  ue_int64(ptr);..
129f0 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
12a00 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 76 61  ANDARD..      va
12a10 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  lue = 0;..      
12a20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12a30 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
12a40 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  e_int64_interop(
12a50 70 74 72 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  ptr, ref value);
12a60 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
12a70 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
12a80 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
12a90 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
12aa0 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
12ab0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12ac0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12ad0 20 73 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d   string GetParam
12ae0 56 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72  ValueText(IntPtr
12af0 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69   ptr)..    {..#i
12b00 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
12b10 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
12b20 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65  n = 0;..      re
12b30 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
12b40 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
12b50 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
12b60 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70  lue_text_interop
12b70 28 70 74 72 2c 20 72 65 66 20 6c 65 6e 29 2c 20  (ptr, ref len), 
12b80 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
12b90 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
12ba0 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
12bb0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12bc0 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
12bd0 74 72 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e  tr),..        Un
12be0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12bf0 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
12c00 62 79 74 65 73 28 70 74 72 29 29 3b 0d 0a 23 65  bytes(ptr));..#e
12c10 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
12c20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
12c30 72 69 64 65 20 54 79 70 65 41 66 66 69 6e 69 74  ride TypeAffinit
12c40 79 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54  y GetParamValueT
12c50 79 70 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d  ype(IntPtr ptr).
12c60 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
12c70 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
12c80 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12c90 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 74 72 29  _value_type(ptr)
12ca0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
12cb0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
12cc0 65 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f  e void ReturnBlo
12cd0 62 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  b(IntPtr context
12ce0 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d  , byte[] value).
12cf0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
12d00 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12d10 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
12d20 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76  _blob(context, v
12d30 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67  alue, value.Leng
12d40 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29  th, (IntPtr)(-1)
12d50 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
12d60 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
12d70 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 44 6f  de void ReturnDo
12d80 75 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e 74  uble(IntPtr cont
12d90 65 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75  ext, double valu
12da0 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
12db0 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
12dc0 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
12dd0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
12de0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
12df0 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65  ult_double(conte
12e00 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  xt, value);..#el
12e10 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
12e20 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ARD..      Unsaf
12e30 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12e40 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
12e50 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  uble_interop(con
12e60 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29  text, ref value)
12e70 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
12e80 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
12e90 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
12ea0 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
12eb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
12ec0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
12ed0 64 20 52 65 74 75 72 6e 45 72 72 6f 72 28 49 6e  d ReturnError(In
12ee0 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74  tPtr context, st
12ef0 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  ring value)..   
12f00 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
12f10 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12f20 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
12f30 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54  or(context, ToUT
12f40 46 38 28 76 61 6c 75 65 29 2c 20 76 61 6c 75 65  F8(value), value
12f50 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d  .Length);..    }
12f60 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12f70 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
12f80 65 74 75 72 6e 49 6e 74 33 32 28 49 6e 74 50 74  eturnInt32(IntPt
12f90 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 76  r context, int v
12fa0 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
12fb0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
12fc0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12fd0 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65  result_int(conte
12fe0 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  xt, value);..   
12ff0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
13000 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
13010 20 52 65 74 75 72 6e 49 6e 74 36 34 28 49 6e 74   ReturnInt64(Int
13020 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e  Ptr context, lon
13030 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
13040 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
13050 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
13060 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
13070 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13080 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28  e3_result_int64(
13090 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  context, value);
130a0 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
130b0 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
130c0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
130d0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
130e0 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  lt_int64_interop
130f0 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61  (context, ref va
13100 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lue);..#else..  
13110 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
13120 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
13130 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
13140 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
13150 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
13160 20 76 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c   void ReturnNull
13170 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29  (IntPtr context)
13180 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
13190 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
131a0 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
131b0 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b  t_null(context);
131c0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
131d0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
131e0 20 76 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74   void ReturnText
131f0 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
13200 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
13210 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 79 74      {..      byt
13220 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76  e[] b = ToUTF8(v
13230 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e  alue);..      Un
13240 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13250 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
13260 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 54  _text(context, T
13270 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 62 2e  oUTF8(value), b.
13280 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74  Length - 1, (Int
13290 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
132a0 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  }....#if INTEROP
132b0 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a  _VIRTUAL_TABLE..
132c0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
132d0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73  >..    /// Calls
132e0 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69   the native SQLi
132f0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
13300 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 72 65 61  in order to crea
13310 74 65 20 61 20 64 69 73 70 6f 73 61 62 6c 65 0d  te a disposable.
13320 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20  .    /// module 
13330 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69  containing the i
13340 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
13350 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
13360 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
13370 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
13380 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75  param name="modu
13390 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  le">..    /// Th
133a0 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20  e module object 
133b0 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
133c0 63 72 65 61 74 69 6e 67 20 74 68 65 20 6e 61 74  creating the nat
133d0 69 76 65 20 64 69 73 70 6f 73 61 62 6c 65 20 6d  ive disposable m
133e0 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  odule...    /// 
133f0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
13400 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
13410 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
13420 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68  The flags for th
13430 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65  e associated <se
13440 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
13450 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a  nnection" /> obj
13460 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
13470 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
13480 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
13490 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61  erride void Crea
134a0 74 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d  teModule(SQLiteM
134b0 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51  odule module, SQ
134c0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
134d0 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20  ags flags)..    
134e0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d  {..        if (m
134f0 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
13500 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
13510 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
13520 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64  llException("mod
13530 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ule");....      
13540 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
13550 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
13560 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65  lags.NoLogModule
13570 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) != SQLiteConne
13580 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67  ctionFlags.NoLog
13590 4d 6f 64 75 6c 65 29 0d 0a 20 20 20 20 20 20 20  Module)..       
135a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
135b0 6d 6f 64 75 6c 65 2e 4c 6f 67 45 72 72 6f 72 73  module.LogErrors
135c0 20 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c   = ((flags & SQL
135d0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
135e0 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f  gs.LogModuleErro
135f0 72 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  r) == SQLiteConn
13600 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d  ectionFlags.LogM
13610 6f 64 75 6c 65 45 72 72 6f 72 29 3b 0d 0a 20 20  oduleError);..  
13620 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
13630 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 20 3d  .LogExceptions =
13640 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
13650 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
13660 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74  .LogModuleExcept
13670 69 6f 6e 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ion) == SQLiteCo
13680 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
13690 67 4d 6f 64 75 6c 65 45 78 63 65 70 74 69 6f 6e  gModuleException
136a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
136b0 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71  .        if (_sq
136c0 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l == null)..    
136d0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
136e0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
136f0 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  n("connection ha
13700 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
13710 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dle");....      
13720 20 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69    SetLoadExtensi
13730 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20  on(true);..     
13740 20 20 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e     LoadExtension
13750 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
13760 68 6f 64 73 2e 53 51 4c 49 54 45 5f 44 4c 4c 2c  hods.SQLITE_DLL,
13770 20 22 73 71 6c 69 74 65 33 5f 76 74 73 68 69 6d   "sqlite3_vtshim
13780 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20 20 20 20  _init");....    
13790 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 2e 43      if (module.C
137a0 72 65 61 74 65 44 69 73 70 6f 73 61 62 6c 65 4d  reateDisposableM
137b0 6f 64 75 6c 65 28 5f 73 71 6c 29 29 0d 0a 20 20  odule(_sql))..  
137c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
137d0 20 20 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65       if (_module
137e0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
137f0 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64              _mod
13800 75 6c 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69  ules = new Dicti
13810 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51  onary<string, SQ
13820 4c 69 74 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a  LiteModule>();..
13830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d  ..            _m
13840 6f 64 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c  odules.Add(modul
13850 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b  e.Name, module);
13860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13870 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20  if (_usePool).. 
13880 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 75                _u
138a0 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d  sePool = false;.
138b0 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
138c0 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
138d0 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
138e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
138f0 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69  e.WriteLine(Stri
13900 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
13930 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 20 22 43 72 65 61 74 65 4d 6f 64 75 6c 65 20 28   "CreateModule (
13960 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65 64 3a 20  Pool) Disabled: 
13970 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
13980 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c             Handl
13990 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a  eToString()));..
139a0 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
139b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
139c0 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
139d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
139e0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
139f0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
13a00 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29  (GetLastError())
13a10 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
13a20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
13a30 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
13a40 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69  / Calls the nati
13a50 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  ve SQLite core l
13a60 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20  ibrary in order 
13a70 74 6f 20 63 6c 65 61 6e 75 70 20 74 68 65 20 72  to cleanup the r
13a80 65 73 6f 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f  esources..    //
13a90 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
13aa0 68 20 61 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61  h a module conta
13ab0 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d  ining the implem
13ac0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69  entation of a vi
13ad0 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
13ae0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
13af0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
13b00 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
13b10 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64  .    /// The mod
13b20 75 6c 65 20 6f 62 6a 65 63 74 20 70 72 65 76 69  ule object previ
13b30 6f 75 73 6c 79 20 70 61 73 73 65 64 20 74 6f 20  ously passed to 
13b40 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43  the <see cref="C
13b50 72 65 61 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d  reateModule" />.
13b60 0a 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e  .    /// method.
13b70 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
13b80 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
13b90 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e  am name="flags">
13ba0 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c  ..    /// The fl
13bb0 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f  ags for the asso
13bc0 63 69 61 74 65 64 20 3c 73 65 65 20 63 72 65 66  ciated <see cref
13bd0 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  ="SQLiteConnecti
13be0 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  on" /> object in
13bf0 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
13c00 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
13c10 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
13c20 20 76 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64   void DisposeMod
13c30 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ule(SQLiteModule
13c40 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43   module, SQLiteC
13c50 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
13c60 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lags)..    {..  
13c70 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
13c80 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
13c90 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
13ca0 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
13cb0 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29  eption("module")
13cc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6d 6f 64  ;....        mod
13cd0 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  ule.Dispose();..
13ce0 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
13cf0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
13d00 65 72 72 69 64 65 20 49 6e 74 50 74 72 20 41 67  erride IntPtr Ag
13d10 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74 28 49  gregateContext(I
13d20 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a  ntPtr context)..
13d30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
13d40 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
13d50 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13d60 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78  aggregate_contex
13d70 74 28 63 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a  t(context, 1);..
13d80 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54      }....#if INT
13d90 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
13da0 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  LE..    /// <sum
13db0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
13dc0 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
13dd0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
13de0 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
13df0 64 65 63 6c 61 72 65 20 61 20 76 69 72 74 75 61  declare a virtua
13e00 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f  l table..    ///
13e10 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
13e20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  a call into the 
13e30 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
13e40 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
13e50 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20  Create" />..    
13e60 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66  /// or <see cref
13e70 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
13e80 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20  odule.xConnect" 
13e90 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  /> virtual table
13ea0 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f   methods...    /
13eb0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
13ec0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
13ed0 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
13ee0 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61    /// The virtua
13ef0 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74  l table module t
13f00 68 61 74 20 69 73 20 74 6f 20 62 65 20 72 65 73  hat is to be res
13f10 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65  ponsible for the
13f20 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
13f30 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20 64 65      /// being de
13f40 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  clared...    ///
13f50 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
13f60 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
13f70 73 74 72 53 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f  strSql">..    //
13f80 2f 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6e  / The string con
13f90 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
13fa0 73 74 61 74 65 6d 65 6e 74 20 64 65 73 63 72 69  statement descri
13fb0 62 69 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c  bing the virtual
13fc0 20 74 61 62 6c 65 20 74 6f 0d 0a 20 20 20 20 2f   table to..    /
13fd0 2f 2f 20 62 65 20 64 65 63 6c 61 72 65 64 2e 0d  // be declared..
13fe0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
13ff0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
14000 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d  m name="error">.
14010 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75  .    /// Upon su
14020 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65  ccess, the conte
14030 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61 72 61  nts of this para
14040 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65 66 69  meter are undefi
14050 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75  ned.  Upon failu
14060 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20  re,..    /// it 
14070 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61  should contain a
14080 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72  n appropriate er
14090 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  ror message...  
140a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
140b0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
140c0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61  >..    /// A sta
140d0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
140e0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f  urn code...    /
140f0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
14100 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
14110 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
14120 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72 74  Code DeclareVirt
14130 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20  ualTable(..     
14140 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20     SQLiteModule 
14150 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20  module,..       
14160 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d   string strSql,.
14170 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72  .        ref str
14180 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
14190 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
141a0 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d       if (_sql ==
141b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
141c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  {..            e
141d0 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69  rror = "connecti
141e0 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
141f0 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20  d handle";..    
14200 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
14210 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
14220 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
14230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
14240 74 72 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72  tr pSql = IntPtr
14250 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
14260 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
14270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 53  ..            pS
14280 71 6c 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e  ql = SQLiteStrin
14290 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  g.Utf8IntPtrFrom
142a0 53 74 72 69 6e 67 28 73 74 72 53 71 6c 29 3b 0d  String(strSql);.
142b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
142c0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
142d0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
142e0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64  ethods.sqlite3_d
142f0 65 63 6c 61 72 65 5f 76 74 61 62 28 0d 0a 20 20  eclare_vtab(..  
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
14310 71 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20  ql, pSql);....  
14320 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
14330 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
14340 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6d 6f 64 75  ode.Ok) && (modu
14350 6c 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  le != null))..  
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
14370 64 75 6c 65 2e 44 65 63 6c 61 72 65 64 20 3d 20  dule.Declared = 
14380 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
14390 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
143a0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
143b0 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73  ) error = GetLas
143c0 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20  tError();....   
143d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
143e0 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n;..        }.. 
143f0 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
14400 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14410 20 20 20 20 20 20 20 69 66 20 28 70 53 71 6c 20         if (pSql 
14420 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
14430 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
14460 65 28 70 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20  e(pSql);..      
14470 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d            pSql =
14480 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
14490 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
144a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
144b0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
144c0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c  ry>..    /// Cal
144d0 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51  ls the native SQ
144e0 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
144f0 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65  y in order to de
14500 63 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c 20  clare a virtual 
14510 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66  table..    /// f
14520 75 6e 63 74 69 6f 6e 20 69 6e 20 72 65 73 70 6f  unction in respo
14530 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e  nse to a call in
14540 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
14550 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
14560 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f  odule.xCreate" /
14570 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73  >..    /// or <s
14580 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
14590 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
145a0 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61  nnect" /> virtua
145b0 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e  l table methods.
145c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
145d0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
145e0 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
145f0 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
14600 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
14610 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f  odule that is to
14620 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   be responsible 
14630 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
14640 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66  table..    /// f
14650 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65  unction being de
14660 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  clared...    ///
14670 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
14680 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
14690 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d  argumentCount">.
146a0 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d  .    /// The num
146b0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
146c0 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   to the function
146d0 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e   being declared.
146e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
146f0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
14700 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d  am name="name">.
14710 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d  .    /// The nam
14720 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
14730 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64  n being declared
14740 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
14750 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
14760 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22  ram name="error"
14770 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20  >..    /// Upon 
14780 73 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e  success, the con
14790 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61  tents of this pa
147a0 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65  rameter are unde
147b0 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69  fined.  Upon fai
147c0 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69  lure,..    /// i
147d0 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e  t should contain
147e0 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
147f0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a  error message...
14800 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
14810 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
14820 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73  ns>..    /// A s
14830 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
14840 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
14850 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
14860 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14870 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
14880 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69  orCode DeclareVi
14890 72 74 75 61 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a  rtualFunction(..
148a0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f          SQLiteMo
148b0 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20  dule module,..  
148c0 20 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65        int argume
148d0 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  ntCount,..      
148e0 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
148f0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
14900 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
14910 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
14920 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20      if (_sql == 
14930 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
14940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72  ..            er
14950 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f  ror = "connectio
14960 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
14970 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20   handle";..     
14980 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
14990 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
149a0 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
149b0 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
149c0 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72  r pName = IntPtr
149d0 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
149e0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
149f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 4e  ..            pN
14a00 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74 72 69  ame = SQLiteStri
14a10 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f  ng.Utf8IntPtrFro
14a20 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a  mString(name);..
14a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
14a40 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
14a50 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
14a60 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 76  thods.sqlite3_ov
14a70 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f 6e 28  erload_function(
14a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14a90 20 20 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 61    _sql, pName, a
14aa0 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a  rgumentCount);..
14ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
14ac0 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
14ad0 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72  orCode.Ok) error
14ae0 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28   = GetLastError(
14af0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14b00 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20    return n;..   
14b10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14b20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
14b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14b40 69 66 20 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74  if (pName != Int
14b50 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
14b60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14b70 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
14b80 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d  Memory.Free(pNam
14b90 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
14ba0 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74       pName = Int
14bb0 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
14bc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
14bd0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64    }..    }..#end
14be0 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  if....    /// <s
14bf0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
14c00 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61   Enables or disa
14c10 62 6c 65 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c  bled extension l
14c20 6f 61 64 69 6e 67 20 62 79 20 53 51 4c 69 74 65  oading by SQLite
14c30 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
14c40 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
14c50 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f  param name="bOnO
14c60 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72  ff">..    /// Tr
14c70 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61  ue to enable loa
14c80 64 69 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f  ding of extensio
14c90 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73  ns, false to dis
14ca0 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
14cb0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
14cc0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
14cd0 6f 69 64 20 53 65 74 4c 6f 61 64 45 78 74 65 6e  oid SetLoadExten
14ce0 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66  sion(bool bOnOff
14cf0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14d00 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
14d10 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
14d20 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
14d30 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78  3_enable_load_ex
14d40 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  tension(..      
14d50 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e        _sql, (bOn
14d60 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d  Off ? -1 : 0));.
14d70 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
14d80 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
14d90 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
14da0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
14db0 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
14dc0 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
14dd0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
14de0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73  >..    /// Loads
14df0 20 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73   a SQLite extens
14e00 69 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d  ion library from
14e10 20 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e   the named file.
14e20 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
14e30 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
14e40 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e  aram name="fileN
14e50 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
14e60 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
14e70 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72  ynamic link libr
14e80 61 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  ary file contain
14e90 69 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f  ing the extensio
14ea0 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  n...    /// </pa
14eb0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
14ec0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e  aram name="procN
14ed0 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
14ee0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65  he name of the e
14ef0 78 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e  xported function
14f00 20 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c   used to initial
14f10 69 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f  ize the extensio
14f20 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e  n...    /// If n
14f30 75 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74  ull, the default
14f40 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73   "sqlite3_extens
14f50 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62  ion_init" will b
14f60 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  e used...    ///
14f70 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
14f80 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
14f90 20 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73   void LoadExtens
14fa0 69 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e  ion(string fileN
14fb0 61 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63  ame, string proc
14fc0 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
14fd0 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61        if (fileNa
14fe0 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
14ff0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
15000 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
15010 78 63 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61  xception("fileNa
15020 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
15030 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d   IntPtr pError =
15040 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
15050 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
15060 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15070 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38       byte[] utf8
15080 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45  FileName = UTF8E
15090 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74  ncoding.UTF8.Get
150a0 42 79 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b  Bytes(fileName +
150b0 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20   '\0');..       
150c0 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38       byte[] utf8
150d0 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  ProcName = null;
150e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
150f0 69 66 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20  if (procName != 
15100 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15110 20 20 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e         utf8ProcN
15120 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69  ame = UTF8Encodi
15130 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73  ng.UTF8.GetBytes
15140 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27  (procName + '\0'
15150 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15160 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
15170 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
15180 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
15190 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  3_load_extension
151a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
151b0 20 20 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c     _sql, utf8Fil
151c0 65 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e  eName, utf8ProcN
151d0 61 6d 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29  ame, ref pError)
151e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
151f0 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
15200 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15220 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
15230 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38  xception(n, UTF8
15240 54 6f 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c  ToString(pError,
15250 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20   -1));..        
15260 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
15270 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
15280 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
15290 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e  Error != IntPtr.
152a0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
152b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
152c0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
152d0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
152e0 33 5f 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d  3_free(pError);.
152f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15300 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72   pError = IntPtr
15310 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
15320 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
15330 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
15340 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69  // Enables or di
15350 73 61 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20  sabled extended 
15360 72 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74  result codes ret
15370 75 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d  urned by SQLite.
15380 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
15390 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 45  erride void SetE
153a0 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64  xtendedResultCod
153b0 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d  es(bool bOnOff).
153c0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
153d0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
153e0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
153f0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
15400 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f  tended_result_co
15410 64 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  des(..          
15420 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20  _sql, (bOnOff ? 
15430 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20  -1 : 0));....   
15440 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
15450 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
15460 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
15470 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
15480 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
15490 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
154a0 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
154b0 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20  te error code.. 
154c0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
154d0 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
154e0 43 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28  Code ResultCode(
154f0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
15500 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
15510 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
15520 65 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29  e3_errcode(_sql)
15530 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f  ;..    }..    //
15540 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20  / Gets the last 
15550 53 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20  SQLite extended 
15560 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20  error code..    
15570 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
15580 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
15590 65 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74  e ExtendedResult
155a0 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Code()..    {.. 
155b0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
155c0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
155d0 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
155e0 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d  _errcode(_sql);.
155f0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
15600 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73  / Add a log mess
15610 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69  age via the SQLi
15620 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69  te sqlite3_log i
15630 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69  nterface...    i
15640 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
15650 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65   void LogMessage
15660 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
15670 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e   iErrCode, strin
15680 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20  g zMessage)..   
15690 20 7b 0d 0a 20 20 20 20 20 20 53 74 61 74 69 63   {..      Static
156a0 4c 6f 67 4d 65 73 73 61 67 65 28 69 45 72 72 43  LogMessage(iErrC
156b0 6f 64 65 2c 20 7a 4d 65 73 73 61 67 65 29 3b 0d  ode, zMessage);.
156c0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
156d0 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73  / Add a log mess
156e0 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69  age via the SQLi
156f0 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69  te sqlite3_log i
15700 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69  nterface...    i
15710 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76  nternal static v
15720 6f 69 64 20 53 74 61 74 69 63 4c 6f 67 4d 65 73  oid StaticLogMes
15730 73 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72  sage(SQLiteError
15740 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73  Code iErrCode, s
15750 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d  tring zMessage).
15760 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
15770 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
15780 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45  s.sqlite3_log(iE
15790 72 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a  rrCode, ToUTF8(z
157a0 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20  Message));..    
157b0 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  }....#if INTEROP
157c0 5f 43 4f 44 45 43 20 7c 7c 20 49 4e 54 45 52 4f  _CODEC || INTERO
157d0 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 0d 0a 20  P_INCLUDE_SEE.. 
157e0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
157f0 72 69 64 65 20 76 6f 69 64 20 53 65 74 50 61 73  ride void SetPas
15800 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73  sword(byte[] pas
15810 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20  swordBytes)..   
15820 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
15830 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
15840 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
15850 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73  s.sqlite3_key(_s
15860 71 6c 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65  ql, passwordByte
15870 73 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  s, passwordBytes
15880 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20  .Length);..     
15890 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
158a0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
158b0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
158c0 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
158d0 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
158e0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
158f0 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
15900 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64 28   ChangePassword(
15910 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f  byte[] newPasswo
15920 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d  rdBytes)..    {.
15930 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
15940 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
15950 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
15960 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71  qlite3_rekey(_sq
15970 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79  l, newPasswordBy
15980 74 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72  tes, (newPasswor
15990 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20  dBytes == null) 
159a0 3f 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72  ? 0 : newPasswor
159b0 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d  dBytes.Length);.
159c0 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
159d0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
159e0 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
159f0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
15a00 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
15a10 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66  ;..    }..#endif
15a20 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
15a30 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
15a40 65 74 50 72 6f 67 72 65 73 73 48 6f 6f 6b 28 69  etProgressHook(i
15a50 6e 74 20 6e 4f 70 73 2c 20 53 51 4c 69 74 65 50  nt nOps, SQLiteP
15a60 72 6f 67 72 65 73 73 43 61 6c 6c 62 61 63 6b 20  rogressCallback 
15a70 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
15a80 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
15a90 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
15aa0 33 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c  3_progress_handl
15ab0 65 72 28 5f 73 71 6c 2c 20 6e 4f 70 73 2c 20 66  er(_sql, nOps, f
15ac0 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
15ad0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
15ae0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
15af0 64 65 20 76 6f 69 64 20 53 65 74 41 75 74 68 6f  de void SetAutho
15b00 72 69 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65  rizerHook(SQLite
15b10 41 75 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61  AuthorizerCallba
15b20 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
15b30 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
15b40 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
15b50 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65  e3_set_authorize
15b60 72 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  r(_sql, func, In
15b70 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
15b80 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
15b90 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
15ba0 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53   SetUpdateHook(S
15bb0 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62  QLiteUpdateCallb
15bc0 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
15bd0 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
15be0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
15bf0 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28  te3_update_hook(
15c00 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
15c10 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
15c20 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
15c30 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
15c40 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c  etCommitHook(SQL
15c50 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  iteCommitCallbac
15c60 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
15c70 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
15c80 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
15c90 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73  3_commit_hook(_s
15ca0 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
15cb0 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
15cc0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
15cd0 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
15ce0 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51  TraceCallback(SQ
15cf0 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63  LiteTraceCallbac
15d00 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
15d10 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
15d20 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
15d30 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75  3_trace(_sql, fu
15d40 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
15d50 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
15d60 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
15d70 65 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61  e void SetRollba
15d80 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c  ckHook(SQLiteRol
15d90 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75  lbackCallback fu
15da0 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
15db0 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
15dc0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f  thods.sqlite3_ro
15dd0 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c  llback_hook(_sql
15de0 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
15df0 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
15e00 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
15e10 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77  >..    /// Allow
15e20 73 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66  s the setting of
15e30 20 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62   a logging callb
15e40 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53  ack invoked by S
15e50 51 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20  QLite when a..  
15e60 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20    /// log event 
15e70 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e  occurs.  Only on
15e80 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62  e callback may b
15e90 65 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20  e set.  If NULL 
15ea0 69 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20  is passed,..    
15eb0 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20  /// the logging 
15ec0 63 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65  callback is unre
15ed0 67 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f  gistered...    /
15ee0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
15ef0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
15f00 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61  me="func">The ca
15f10 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20  llback function 
15f20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61  to invoke.</para
15f30 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
15f40 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72  urns>Returns a r
15f50 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75  esult code</retu
15f60 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
15f70 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
15f80 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c  teErrorCode SetL
15f90 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74  ogCallback(SQLit
15fa0 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e  eLogCallback fun
15fb0 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
15fc0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
15fd0 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
15fe0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
15ff0 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d  te3_config_log(.
16000 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
16010 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d  iteConfigOpsEnum
16020 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c  .SQLITE_CONFIG_L
16030 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  OG, func, IntPtr
16040 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20  .Zero);....     
16050 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
16060 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
16070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
160d0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
160e0 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65  ..    /// Create
160f0 73 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62  s a new SQLite b
16100 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73  ackup object bas
16110 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64  ed on the provid
16120 65 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a  ed destination..
16130 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
16140 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68   connection.  Th
16150 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
16160 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
16170 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f  the one..    ///
16180 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
16190 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54   this object.  T
161a0 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65  he source and de
161b0 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
161c0 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e  se..    /// conn
161d0 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62  ections cannot b
161e0 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20  e the same...   
161f0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
16200 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
16210 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54  name="destCnn">T
16220 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
16230 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
16240 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  on.</param>..   
16250 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
16260 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20  ="destName">The 
16270 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
16280 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61  base name.</para
16290 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
162a0 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e  am name="sourceN
162b0 61 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20  ame">The source 
162c0 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f  database name.</
162d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
162e0 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77  <returns>The new
162f0 6c 79 20 63 72 65 61 74 65 64 20 62 61 63 6b 75  ly created backu
16300 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72  p object.</retur
16310 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
16320 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
16330 65 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69  eBackup Initiali
16340 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  zeBackup(..     
16350 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
16360 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20  ion destCnn,..  
16370 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
16380 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  tName,..        
16390 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d  string sourceNam
163a0 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  e..        )..  
163b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
163c0 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c  (destCnn == null
163d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
163e0 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
163f0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
16400 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
16410 20 20 20 20 20 20 69 66 20 28 64 65 73 74 4e 61        if (destNa
16420 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
16430 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
16440 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
16450 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61  xception("destNa
16460 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
16470 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20   if (sourceName 
16480 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16490 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
164a0 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
164b0 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d  ption("sourceNam
164c0 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
164d0 53 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69  SQLite3 destSqli
164e0 74 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73  te3 = destCnn._s
164f0 71 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a  ql as SQLite3;..
16500 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
16510 73 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c  stSqlite3 == nul
16520 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
16530 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
16540 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  ntException(..  
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
16560 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65  estination conne
16570 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61  ction has no wra
16580 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20  pper.",..       
16590 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e           "destCn
165a0 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
165b0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
165c0 48 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c  Handle destHandl
165d0 65 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e  e = destSqlite3.
165e0 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  _sql;....       
165f0 20 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20   if (destHandle 
16600 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16610 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
16620 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
16630 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
16640 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e      "Destination
16650 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
16660 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
16670 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
16680 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29        "destCnn")
16690 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
166a0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
166b0 64 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  dle sourceHandle
166c0 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20   = _sql;....    
166d0 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 48 61      if (sourceHa
166e0 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
166f0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
16700 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
16710 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
16720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16730 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74   "Source connect
16740 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
16750 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
16760 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20  .        byte[] 
16770 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54  zDestName = ToUT
16780 46 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20  F8(destName);.. 
16790 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53         byte[] zS
167a0 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54  ourceName = ToUT
167b0 46 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d  F8(sourceName);.
167c0 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
167d0 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61  eBackupHandle ba
167e0 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c  ckupHandle = nul
167f0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  l;....        tr
16800 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
16810 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
16820 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
16830 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
16840 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
16850 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
16860 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
16870 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16880 20 20 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75      IntPtr backu
16890 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
168a0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
168b0 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20  backup_init(..  
168c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
168d0 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e  stHandle, zDestN
168e0 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c  ame, sourceHandl
168f0 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b  e, zSourceName);
16900 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16910 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e  if (backup == In
16920 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
16930 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16940 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16950 65 45 72 72 6f 72 43 6f 64 65 20 72 65 73 75 6c  eErrorCode resul
16960 74 43 6f 64 65 20 3d 20 52 65 73 75 6c 74 43 6f  tCode = ResultCo
16970 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de();....       
16980 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
16990 75 6c 74 43 6f 64 65 20 21 3d 20 53 51 4c 69 74  ultCode != SQLit
169a0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169c0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
169d0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 65  LiteException(re
169e0 73 75 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61 73  sultCode, GetLas
169f0 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
16a00 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
16a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16a20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
16a30 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
16a40 22 66 61 69 6c 65 64 20 74 6f 20 69 6e 69 74 69  "failed to initi
16a50 61 6c 69 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d  alize backup");.
16a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61  ..            ba
16a80 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77  ckupHandle = new
16a90 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
16aa0 64 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20  dle(destHandle, 
16ab0 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20  backup);..      
16ac0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
16ad0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
16ae0 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20  OnChanged(null, 
16af0 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  new ConnectionEv
16b00 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
16b10 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
16b20 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
16b30 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  NewCriticalHandl
16b40 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  e, null,..      
16b50 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
16b60 2c 20 6e 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61  , null, backupHa
16b70 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20  ndle, null, new 
16b80 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20  object[] {..    
16b90 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53          typeof(S
16ba0 51 4c 69 74 65 33 29 2c 20 64 65 73 74 43 6e 6e  QLite3), destCnn
16bb0 2c 20 64 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72  , destName, sour
16bc0 63 65 4e 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20  ceName }));.... 
16bd0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
16be0 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 28 0d  w SQLiteBackup(.
16bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
16c00 73 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c  s, backupHandle,
16c10 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65   destHandle, zDe
16c20 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61  stName, sourceHa
16c30 6e 64 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ndle,..         
16c40 20 20 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b     zSourceName);
16c50 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
16c60 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
16c70 20 20 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20    /// Copies up 
16c80 74 6f 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20  to N pages from 
16c90 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
16ca0 61 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69  ase to the desti
16cb0 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  nation..    /// 
16cc0 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
16cd0 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
16ce0 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62  cified backup ob
16cf0 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
16d00 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
16d10 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
16d20 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
16d30 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65  up object to use
16d40 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
16d50 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
16d60 6e 50 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  nPage">..    ///
16d70 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   The number of p
16d80 61 67 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65  ages to copy, ne
16d90 67 61 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61  gative to copy a
16da0 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67  ll remaining pag
16db0 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  es...    /// </p
16dc0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
16dd0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72  param name="retr
16de0 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74  y">..    /// Set
16df0 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 20   to true if the 
16e00 6f 70 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20  operation needs 
16e10 74 6f 20 62 65 20 72 65 74 72 69 65 64 20 64 75  to be retried du
16e20 65 20 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20  e to database.. 
16e30 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69     /// locking i
16e40 73 73 75 65 73 3b 20 6f 74 68 65 72 77 69 73 65  ssues; otherwise
16e50 2c 20 73 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d  , set to false..
16e60 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
16e70 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
16e80 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72  rns>..    /// Tr
16e90 75 65 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ue if there are 
16ea0 6d 6f 72 65 20 70 61 67 65 73 20 74 6f 20 62 65  more pages to be
16eb0 20 63 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f   copied, false o
16ec0 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f  therwise...    /
16ed0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
16ee0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
16ef0 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 42 61  ride bool StepBa
16f00 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
16f10 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
16f20 75 70 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  up,..        int
16f30 20 6e 50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20   nPage,..       
16f40 20 72 65 66 20 62 6f 6f 6c 20 72 65 74 72 79 0d   ref bool retry.
16f50 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
16f60 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 72 79  {..        retry
16f70 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
16f80 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
16f90 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16fa0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
16fb0 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
16fc0 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
16fd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
16fe0 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
16ff0 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
17000 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
17010 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
17020 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
17030 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
17040 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
17050 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
17060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17070 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
17080 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
17090 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
170a0 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
170b0 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
170c0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
170d0 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
170e0 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
170f0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
17100 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
17110 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
17120 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
17130 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
17140 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
17150 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
17160 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
17170 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
17180 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
17190 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73  sqlite3_backup_s
171a0 74 65 70 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e  tep(handlePtr, n
171b0 50 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Page);..        
171c0 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75  backup._stepResu
171d0 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a  lt = n; /* NOTE:
171e0 20 53 61 76 65 20 66 6f 72 20 75 73 65 20 62 79   Save for use by
171f0 20 46 69 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a   FinishBackup. *
17200 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  /....        if 
17210 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
17220 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
17230 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17240 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
17250 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17260 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
17270 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
17280 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20  .Busy)..        
17290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
172a0 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  etry = true;..  
172b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
172c0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
172d0 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20  }..        else 
172e0 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
172f0 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29  rrorCode.Locked)
17300 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
17310 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d           retry =
17320 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
17330 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
17340 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
17350 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
17360 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
17370 64 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20  de.Done)..      
17380 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17390 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
173a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
173b0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
173c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
173d0 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
173e0 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
173f0 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
17400 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
17410 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
17420 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
17430 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
17440 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e   of pages remain
17450 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ing to be copied
17460 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65   from the source
17470 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
17480 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e  se to the destin
17490 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 61  ation database a
174a0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
174b0 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20  he specified..  
174c0 20 20 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a    /// backup obj
174d0 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
174e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
174f0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
17500 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75  ackup">The backu
17510 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63  p object to chec
17520 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  k.</param>..    
17530 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
17540 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
17550 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65   remaining to be
17560 20 63 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e   copied.</return
17570 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
17580 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65   override int Re
17590 6d 61 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a  mainingBackup(..
175a0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
175b0 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20  ckup backup..   
175c0 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
175d0 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
175e0 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
175f0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
17600 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
17610 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22  ception("backup"
17620 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
17630 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
17640 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70   handle = backup
17650 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b  ._sqlite_backup;
17660 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
17670 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  handle == null).
17680 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
17690 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
176a0 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
176b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
176c0 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
176d0 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
176e0 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
176f0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
17700 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65  ndlePtr = handle
17710 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
17720 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e  (handlePtr == In
17730 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
17740 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
17750 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
17760 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
17780 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
17790 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
177a0 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a  le pointer.");..
177b0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
177c0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
177d0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
177e0 6b 75 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61  kup_remaining(ha
177f0 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d  ndlePtr);..    }
17800 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
17810 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
17820 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
17830 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
17840 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64   in the source d
17850 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
17860 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68  ed..    /// with
17870 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62   the specified b
17880 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
17890 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
178a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
178b0 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
178c0 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
178d0 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
178e0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
178f0 74 75 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20  turns>The total 
17900 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
17910 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61  in the source da
17920 74 61 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73  tabase.</returns
17930 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
17940 6f 76 65 72 72 69 64 65 20 69 6e 74 20 50 61 67  override int Pag
17950 65 43 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20  eCountBackup(.. 
17960 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
17970 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20  kup backup..    
17980 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
17990 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
179a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
179b0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
179c0 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
179d0 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29  eption("backup")
179e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
179f0 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
17a00 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e  handle = backup.
17a10 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d  _sqlite_backup;.
17a20 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
17a30 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
17a40 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
17a50 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
17a60 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
17a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17a80 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
17a90 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
17aa0 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
17ab0 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
17ac0 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  dlePtr = handle;
17ad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
17ae0 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74  handlePtr == Int
17af0 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
17b00 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
17b10 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
17b20 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
17b40 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
17b50 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
17b60 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d  e pointer.");...
17b70 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
17b80 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
17b90 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
17ba0 75 70 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e  up_pagecount(han
17bb0 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  dlePtr);..    }.
17bc0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
17bd0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
17be0 73 74 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75  stroys the backu
17bf0 70 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e  p object, rollin
17c00 67 20 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75  g back any backu
17c10 70 20 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e  p that may be in
17c20 0d 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73  ..    /// proges
17c30 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
17c40 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
17c50 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
17c60 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
17c70 6f 62 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f  object to destro
17c80 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  y.</param>..    
17c90 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
17ca0 65 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63  e void FinishBac
17cb0 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
17cc0 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
17cd0 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  p..        )..  
17ce0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
17cf0 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
17d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
17d10 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
17d20 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
17d30 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
17d40 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
17d50 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
17d60 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
17d70 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
17d80 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
17d90 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17da0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
17db0 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
17dc0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
17dd0 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
17de0 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
17df0 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
17e00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
17e10 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
17e20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
17e30 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
17e40 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
17e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
17e60 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
17e70 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
17e80 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
17e90 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
17ea0 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
17eb0 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
17ec0 2e 22 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  .");....#if !SQL
17ed0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
17ee0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
17ef0 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
17f00 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
17f10 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
17f20 69 73 68 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  ish_interop(hand
17f30 6c 65 50 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a  lePtr);..#else..
17f40 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
17f50 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
17f60 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
17f70 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
17f80 69 6e 69 73 68 28 68 61 6e 64 6c 65 50 74 72 29  inish(handlePtr)
17f90 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
17fa0 20 20 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e     handle.SetHan
17fb0 64 6c 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d  dleAsInvalid();.
17fc0 0a 0d 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e  ...#if COUNT_HAN
17fd0 44 4c 45 0d 0a 20 20 20 20 20 20 20 20 69 66 20  DLE..        if 
17fe0 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
17ff0 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e  orCode.Ok) || (n
18000 20 3d 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70   == backup._step
18010 52 65 73 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e  Result)) handle.
18020 57 61 73 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b  WasReleasedOk();
18030 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
18040 20 20 20 20 69 66 20 28 28 6e 20 21 3d 20 53 51      if ((n != SQ
18050 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
18060 29 20 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75  ) && (n != backu
18070 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d  p._stepResult)).
18080 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
18090 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
180a0 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
180b0 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
180c0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
180d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
180e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
180f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18120 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18130 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
18140 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
18150 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  s if the SQLite 
18160 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
18170 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
18180 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  d for the..    /
18190 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  // current proce
181a0 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
181b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
181c0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
181d0 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e  /// A boolean in
181e0 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
181f0 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69   or not the SQLi
18200 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
18210 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
18220 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  / initialized fo
18230 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
18240 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
18250 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
18260 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
18270 65 20 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c  e bool IsInitial
18280 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ized()..    {.. 
18290 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
182a0 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65  aticIsInitialize
182b0 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  d();..    }.... 
182c0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
182d0 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
182e0 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c 69  ines if the SQLi
182f0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
18300 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  has been initial
18310 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20  ized for the..  
18320 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72    /// current pr
18330 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
18340 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
18350 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
18360 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e     /// A boolean
18370 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
18380 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53  her or not the S
18390 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
183a0 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20  ry has been..   
183b0 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64   /// initialized
183c0 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
183d0 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
183e0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
183f0 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
18400 69 63 20 62 6f 6f 6c 20 53 74 61 74 69 63 49 73  ic bool StaticIs
18410 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20  Initialized().. 
18420 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
18430 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47  ..        // BUG
18440 46 49 58 3a 20 50 72 65 76 65 6e 74 20 72 61 63  FIX: Prevent rac
18450 65 73 20 77 69 74 68 20 6f 74 68 65 72 20 74 68  es with other th
18460 72 65 61 64 73 20 66 6f 72 20 74 68 69 73 20 65  reads for this e
18470 6e 74 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65  ntire block, due
18480 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
18490 20 20 20 20 20 74 6f 20 74 68 65 20 74 72 79 2f       to the try/
184a0 66 69 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63  finally semantic
184b0 73 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b  s.  See ticket [
184c0 37 32 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20  72905c9a77]...  
184d0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
184e0 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
184f0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
18500 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
18510 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
18520 45 3a 20 53 61 76 65 20 74 68 65 20 73 74 61 74  E: Save the stat
18530 65 20 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e 67  e of the logging
18540 20 63 6c 61 73 73 20 61 6e 64 20 74 68 65 6e 20   class and then 
18550 72 65 73 74 6f 72 65 20 69 74 0d 0a 20 20 20 20  restore it..    
18560 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
18570 20 61 66 74 65 72 20 77 65 20 61 72 65 20 64 6f   after we are do
18580 6e 65 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67  ne to avoid logg
18590 69 6e 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c  ing too many fal
185a0 73 65 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20  se errors...    
185b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
185c0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 76          bool sav
185d0 65 64 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69  edEnabled = SQLi
185e0 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a  teLog.Enabled;..
185f0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
18600 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20  teLog.Enabled = 
18610 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
18620 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
18630 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18640 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18660 20 4e 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68   NOTE: This meth
18670 6f 64 20 5b 61 62 5d 75 73 65 73 20 74 68 65 20  od [ab]uses the 
18680 66 61 63 74 20 74 68 61 74 20 53 51 4c 69 74 65  fact that SQLite
18690 20 77 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20   will always..  
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
186b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
186c0 4c 49 54 45 5f 45 52 52 4f 52 20 66 6f 72 20 61  LITE_ERROR for a
186d0 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69  ny unknown confi
186e0 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d  guration option.
186f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18700 20 2f 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65 73   //       *unles
18710 73 2a 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  s* the SQLite li
18720 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 61 64  brary has alread
18730 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  y been initializ
18740 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
18750 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 6e       //       In
18760 20 74 68 61 74 20 63 61 73 65 20 69 74 20 77 69   that case it wi
18770 6c 6c 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e  ll always return
18780 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d   SQLITE_MISUSE..
18790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
187a0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
187b0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
187c0 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
187d0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
187e0 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e  lite3_config_non
187f0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
18800 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
18810 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  nfigOpsEnum.SQLI
18820 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b  TE_CONFIG_NONE);
18830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18840 20 20 20 20 72 65 74 75 72 6e 20 28 72 63 20 3d      return (rc =
18850 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
18860 65 2e 4d 69 73 75 73 65 29 3b 0d 0a 20 20 20 20  e.Misuse);..    
18870 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
18880 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
18890 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
188b0 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64  QLiteLog.Enabled
188c0 20 3d 20 73 61 76 65 64 45 6e 61 62 6c 65 64 3b   = savedEnabled;
188d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
188e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
188f0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
18900 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
18910 48 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20  Helper function 
18920 74 6f 20 72 65 74 72 69 65 76 65 20 61 20 63 6f  to retrieve a co
18930 6c 75 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f  lumn of data fro
18940 6d 20 61 6e 20 61 63 74 69 76 65 20 73 74 61 74  m an active stat
18950 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ement...    /// 
18960 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
18970 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
18980 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65  "stmt">The state
18990 6d 65 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28  ment being step(
189a0 29 27 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72  )'d through</par
189b0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
189c0 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
189d0 3e 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63  >The flags assoc
189e0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63  iated with the c
189f0 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61  onnection.</para
18a00 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
18a10 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e  am name="index">
18a20 54 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  The column index
18a30 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
18a40 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
18a50 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e  aram name="typ">
18a60 54 68 65 20 74 79 70 65 20 6f 66 20 64 61 74 61  The type of data
18a70 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
18a80 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e  e column.  If Un
18a90 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69  initialized, thi
18aa0 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20  s function will 
18ab0 72 65 74 72 69 65 76 65 20 74 68 65 20 64 61 74  retrieve the dat
18ac0 61 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f  atype informatio
18ad0 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
18ae0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
18af0 75 72 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e  urns the data in
18b00 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74   the column</ret
18b10 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
18b20 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a  nal override obj
18b30 65 63 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c  ect GetValue(SQL
18b40 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
18b50 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
18b60 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
18b70 69 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74  int index, SQLit
18b80 65 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20  eType typ)..    
18b90 7b 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66  {..      TypeAff
18ba0 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e  inity aff = typ.
18bb0 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  Affinity;..     
18bc0 20 69 66 20 28 61 66 66 20 3d 3d 20 54 79 70 65   if (aff == Type
18bd0 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 20 72  Affinity.Null) r
18be0 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c  eturn DBNull.Val
18bf0 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 20  ue;..      Type 
18c00 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
18c10 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20     if (typ.Type 
18c20 21 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74  != DbType.Object
18c30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
18c40 20 20 20 20 74 20 3d 20 53 51 4c 69 74 65 43 6f      t = SQLiteCo
18c50 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65  nvert.SQLiteType
18c60 54 6f 54 79 70 65 28 74 79 70 29 3b 0d 0a 20 20  ToType(typ);..  
18c70 20 20 20 20 20 20 61 66 66 20 3d 20 54 79 70 65        aff = Type
18c80 54 6f 41 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a  ToAffinity(t);..
18c90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18ca0 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
18cb0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
18cc0 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74  ags.GetAllAsText
18cd0 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
18ce0 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c  ctionFlags.GetAl
18cf0 6c 41 73 54 65 78 74 29 0d 0a 20 20 20 20 20 20  lAsText)..      
18d00 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65      return GetTe
18d10 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  xt(stmt, index);
18d20 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68  ....      switch
18d30 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d   (aff)..      {.
18d40 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
18d50 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a  peAffinity.Blob:
18d60 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
18d70 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79  typ.Type == DbTy
18d80 70 65 2e 47 75 69 64 20 26 26 20 74 79 70 2e 41  pe.Guid && typ.A
18d90 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41  ffinity == TypeA
18da0 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20  ffinity.Text).. 
18db0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18dc0 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74 54 65  n new Guid(GetTe
18dd0 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  xt(stmt, index))
18de0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
18df0 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65 74 42  nt n = (int)GetB
18e00 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
18e10 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29  , 0, null, 0, 0)
18e20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79 74  ;..          byt
18e30 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79 74 65  e[] b = new byte
18e40 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  [n];..          
18e50 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69  GetBytes(stmt, i
18e60 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e  ndex, 0, b, 0, n
18e70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18e80 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20  if (typ.Type == 
18e90 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 6e  DbType.Guid && n
18ea0 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20 20 20   == 16)..       
18eb0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
18ec0 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20  Guid(b);....    
18ed0 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 3b 0d        return b;.
18ee0 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
18ef0 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54  peAffinity.DateT
18f00 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ime:..          
18f10 72 65 74 75 72 6e 20 47 65 74 44 61 74 65 54 69  return GetDateTi
18f20 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  me(stmt, index);
18f30 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
18f40 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62  ypeAffinity.Doub
18f50 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  le:..          i
18f60 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  f (t == null) re
18f70 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73  turn GetDouble(s
18f80 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
18f90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43          return C
18fa0 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70  onvert.ChangeTyp
18fb0 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  e(GetDouble(stmt
18fc0 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c  , index), t, nul
18fd0 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  l);..        cas
18fe0 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e TypeAffinity.I
18ff0 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20  nt64:..         
19000 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20   if (t == null) 
19010 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28  return GetInt64(
19020 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
19030 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
19040 3d 20 74 79 70 65 6f 66 28 53 42 79 74 65 29 29  = typeof(SByte))
19050 20 72 65 74 75 72 6e 20 47 65 74 53 42 79 74 65   return GetSByte
19060 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
19070 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
19080 3d 3d 20 74 79 70 65 6f 66 28 42 79 74 65 29 29  == typeof(Byte))
19090 20 72 65 74 75 72 6e 20 47 65 74 42 79 74 65 28   return GetByte(
190a0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
190b0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
190c0 3d 20 74 79 70 65 6f 66 28 49 6e 74 31 36 29 29  = typeof(Int16))
190d0 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 31 36   return GetInt16
190e0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
190f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
19100 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 31 36  == typeof(UInt16
19110 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e  )) return GetUIn
19120 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t16(stmt, index)
19130 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
19140 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74  (t == typeof(Int
19150 33 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 49  32)) return GetI
19160 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
19170 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
19180 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
19190 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20 47 65  nt32)) return Ge
191a0 74 55 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  tUInt32(stmt, in
191b0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
191c0 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
191d0 28 55 49 6e 74 36 34 29 29 20 72 65 74 75 72 6e  (UInt64)) return
191e0 20 47 65 74 55 49 6e 74 36 34 28 73 74 6d 74 2c   GetUInt64(stmt,
191f0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
19200 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
19210 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65  rt.ChangeType(Ge
19220 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
19230 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a  ex), t, null);..
19240 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
19250 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
19260 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c  rn GetText(stmt,
19270 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
19280 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
19290 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
192a0 65 20 69 6e 74 20 47 65 74 43 75 72 73 6f 72 46  e int GetCursorF
192b0 6f 72 54 61 62 6c 65 28 53 51 4c 69 74 65 53 74  orTable(SQLiteSt
192c0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
192d0 74 20 64 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61  t db, int rootPa
192e0 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ge)..    {..#if 
192f0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
19300 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
19310 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
19320 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
19330 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28  _cursor_interop(
19340 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
19350 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29  t, db, rootPage)
19360 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
19370 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64  return -1;..#end
19380 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
19390 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
193a0 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64  de long GetRowId
193b0 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65  ForCursor(SQLite
193c0 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
193d0 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20 20 20  int cursor)..   
193e0 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
193f0 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
19400 6c 6f 6e 67 20 72 6f 77 69 64 20 3d 20 30 3b 0d  long rowid = 0;.
19410 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
19420 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
19430 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
19440 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72  sqlite3_cursor_r
19450 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d  owid_interop(stm
19460 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
19470 63 75 72 73 6f 72 2c 20 72 65 66 20 72 6f 77 69  cursor, ref rowi
19480 64 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72  d);..      if (r
19490 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c == SQLiteError
194a0 43 6f 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20  Code.Ok) return 
194b0 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20  rowid;....      
194c0 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65  return 0;..#else
194d0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ..      return 0
194e0 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
194f0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
19500 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 47   override void G
19510 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74  etIndexColumnExt
19520 65 6e 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67  endedInfo(string
19530 20 64 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e   database, strin
19540 67 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20  g index, string 
19550 63 6f 6c 75 6d 6e 2c 20 72 65 66 20 69 6e 74 20  column, ref int 
19560 73 6f 72 74 4d 6f 64 65 2c 20 72 65 66 20 69 6e  sortMode, ref in
19570 74 20 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20 73  t onError, ref s
19580 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53  tring collationS
19590 65 71 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d  equence)..    {.
195a0 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
195b0 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74  NDARD..      Int
195c0 50 74 72 20 63 6f 6c 6c 20 3d 20 49 6e 74 50 74  Ptr coll = IntPt
195d0 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69  r.Zero;..      i
195e0 6e 74 20 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d  nt colllen = 0;.
195f0 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
19600 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20  orCode rc;....  
19610 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e      rc = UnsafeN
19620 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
19630 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d  ite3_index_colum
19640 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f  n_info_interop(_
19650 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61  sql, ToUTF8(data
19660 62 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e  base), ToUTF8(in
19670 64 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c  dex), ToUTF8(col
19680 75 6d 6e 29 2c 20 72 65 66 20 73 6f 72 74 4d 6f  umn), ref sortMo
19690 64 65 2c 20 72 65 66 20 6f 6e 45 72 72 6f 72 2c  de, ref onError,
196a0 20 72 65 66 20 63 6f 6c 6c 2c 20 72 65 66 20 63   ref coll, ref c
196b0 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20  olllen);..      
196c0 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65  if (rc != SQLite
196d0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
196e0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
196f0 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c  ception(rc, null
19700 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c  );....      coll
19710 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20  ationSequence = 
19720 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c  UTF8ToString(col
19730 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65  l, colllen);..#e
19740 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d  lse..      sortM
19750 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ode = 0;..      
19760 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20  onError = 2;..  
19770 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71      collationSeq
19780 75 65 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22  uence = "BINARY"
19790 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
197a0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
197b0 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
197c0 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f  ErrorCode FileCo
197d0 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62  ntrol(string zDb
197e0 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e  Name, int op, In
197f0 74 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20  tPtr pArg)..    
19800 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
19810 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
19820 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65  ods.sqlite3_file
19830 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28  _control(_sql, (
19840 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  zDbName != null)
19850 20 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d   ? ToUTF8(zDbNam
19860 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70  e) : null, op, p
19870 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  Arg);..    }..  
19880 7d 0d 0a 7d 0d 0a                                }..}..