System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 30841ce0c5f97f9c3cfd4fcf96b6e471999a58b2:


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 39 2e 31 22 3b 0d 0a 23 65   "1.0.99.1";..#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 20 7c  _45 || NET_451 |
0aa0: 7c 20 4e 45 54 5f 34 35 32 20 7c 7c 20 4e 45 54  | NET_452 || NET
0ab0: 5f 34 36 20 7c 7c 20 4e 45 54 5f 34 36 31 29 20  _46 || NET_461) 
0ac0: 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  && !PLATFORM_COM
0ad0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
0ae0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
0af0: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 3b  _buildingSchema;
0b00: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
0b10: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0b20: 20 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d     /// The user-
0b30: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
0b40: 73 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20  s registered on 
0b50: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  this connection.
0b60: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0b70: 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  ry>..    protect
0b80: 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51  ed Dictionary<SQ
0b90: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
0ba0: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
0bb0: 63 74 69 6f 6e 3e 20 5f 66 75 6e 63 74 69 6f 6e  ction> _function
0bc0: 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  s;....#if INTERO
0bd0: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
0be0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0bf0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
0c00: 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64 20  modules created 
0c10: 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e 65  using this conne
0c20: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
0c30: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0c40: 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69 6f  protected Dictio
0c50: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
0c60: 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64 75  iteModule> _modu
0c70: 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  les;..#endif....
0c80: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ce0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
0cf0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d00: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68 65  / Constructs the
0d10: 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f 20   object used to 
0d20: 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74 68  interact with th
0d30: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
0d40: 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 75  brary..    /// u
0d50: 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20 74  sing the UTF-8 t
0d60: 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a 20  ext encoding... 
0d70: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0d80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0d90: 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a 20  m name="fmt">.. 
0da0: 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65 54     /// The DateT
0db0: 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62 65  ime format to be
0dc0: 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76 65   used when conve
0dd0: 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61 6c  rting string val
0de0: 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f 2f  ues to a..    //
0df0: 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20 62  / DateTime and b
0e00: 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65 20  inding DateTime 
0e10: 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20  parameters...   
0e20: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
0e30: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e40: 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20 20  me="kind">..    
0e50: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
0e60: 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64 22  f="DateTimeKind"
0e70: 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20 77   /> to be used w
0e80: 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61 74  hen creating Dat
0e90: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0ea0: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0eb0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0ec0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
0ed0: 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20  mtString">..    
0ee0: 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20 73  /// The format s
0ef0: 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  tring to be used
0f00: 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61 6e   when parsing an
0f10: 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61 74  d formatting Dat
0f20: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0f30: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0f40: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0f50: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
0f60: 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  b">..    /// The
0f70: 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 74   native handle t
0f80: 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64 20  o be associated 
0f90: 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73  with the databas
0fa0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
0fb0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
0fc0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0fd0: 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e  name="fileName">
0fe0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 75  ..    /// The fu
0ff0: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
1000: 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61 74  le name associat
1010: 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72 65  ed with <paramre
1020: 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e 0d  f name="db "/>..
1030: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1040: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1050: 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64 6c  m name="ownHandl
1060: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  e">..    /// Non
1070: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65 77  -zero if the new
1080: 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65 63  ly created objec
1090: 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c 20  t instance will 
10a0: 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65 0d  need to dispose.
10b0: 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61 72  .    /// of <par
10c0: 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22 20  amref name="db" 
10d0: 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e 6f  /> when it is no
10e0: 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e 0d   longer needed..
10f0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1100: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1110: 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20 20  SQLite3(..      
1120: 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d    SQLiteDateForm
1130: 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20 20  ats fmt,..      
1140: 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b    DateTimeKind k
1150: 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ind,..        st
1160: 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c 0d  ring fmtString,.
1170: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
1180: 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  db,..        str
1190: 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
11a0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e 48         bool ownH
11b0: 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 29  andle..        )
11c0: 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28 66  ..      : base(f
11d0: 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72  mt, kind, fmtStr
11e0: 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ing)..    {..   
11f0: 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20 49       if (db != I
1200: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
1210: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1220: 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53      _sql = new S
1230: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
1240: 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61 6e  andle(db, ownHan
1250: 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle);..         
1260: 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 66     _fileName = f
1270: 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
1280: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
1290: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
12a0: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
12b0: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
12c0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12d0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
12e0: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
12f0: 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
1300: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
1310: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c         null, nul
1320: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 66  l, null, _sql, f
1330: 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a  ileName, new obj
1340: 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ect[] {..       
1350: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
1360: 53 51 4c 69 74 65 33 29 2c 20 66 6d 74 2c 20 6b  SQLite3), fmt, k
1370: 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 2c 20  ind, fmtString, 
1380: 64 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  db, fileName,.. 
1390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
13a0: 77 6e 48 61 6e 64 6c 65 20 7d 29 29 3b 0d 0a 20  wnHandle }));.. 
13b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
13c0: 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1420: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1430: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
1440: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
1450: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
1460: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
1470: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
1480: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
1490: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
14a0: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
14b0: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
14c0: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
14d0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
14e0: 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
14f0: 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
1500: 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33  n(typeof(SQLite3
1510: 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66  ).Name);..#endif
1520: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f  ////////////////
1570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1590: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
15a0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69  override void Di
15b0: 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f  spose(bool dispo
15c0: 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sing)..    {..  
15d0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
15e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15f0: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
1600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1620: 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67   //if (disposing
1630: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1640: 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20     //{..        
1650: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1690: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73      //    // dis
16a0: 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73  pose managed res
16b0: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d0: 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //    //////////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
1700: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d              //}.
1710: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1720: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
1750: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
1760: 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20  lease unmanaged 
1770: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
1780: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1790: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
17c0: 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c   INTEROP_VIRTUAL
17d0: 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20  _TABLE..        
17e0: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 4d          DisposeM
17f0: 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69  odules();..#endi
1800: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
1810: 20 20 20 20 20 43 6c 6f 73 65 28 66 61 6c 73 65       Close(false
1820: 29 3b 20 2f 2a 20 44 69 73 70 6f 73 69 6e 67 2c  ); /* Disposing,
1830: 20 63 61 6e 6e 6f 74 20 74 68 72 6f 77 2e 20 2a   cannot throw. *
1840: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  /..            }
1850: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1860: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
1870: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1880: 20 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73       base.Dispos
1890: 65 28 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d  e(disposing);...
18a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
18b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
18c0: 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67  NOTE: Everything
18d0: 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79   should be fully
18e0: 20 64 69 73 70 6f 73 65 64 20 61 74 20 74 68 69   disposed at thi
18f0: 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20  s point...      
1900: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1910: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
1920: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1930: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  }..    }..    #e
1940: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
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 2f  ////////////////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
19b0: 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56  ...#if INTEROP_V
19c0: 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20  IRTUAL_TABLE..  
19d0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
19e0: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65  .    /// This me
19f0: 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f  thod attempts to
1a00: 20 64 69 73 70 6f 73 65 20 6f 66 20 61 6c 6c 20   dispose of all 
1a10: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
1a20: 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  QLiteModule" /> 
1a30: 64 65 72 69 76 65 64 0d 0a 20 20 20 20 2f 2f 2f  derived..    ///
1a40: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1a50: 73 20 63 75 72 72 65 6e 74 6c 79 20 61 73 73 6f  s currently asso
1a60: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1a70: 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65 20  native database 
1a80: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
1a90: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1aa0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
1ab0: 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73  d DisposeModules
1ac0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
1ad0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
1ae0: 2f 20 4e 4f 54 45 3a 20 49 66 20 61 6e 79 20 6d  / NOTE: If any m
1af0: 6f 64 75 6c 65 73 20 77 65 72 65 20 63 72 65 61  odules were crea
1b00: 74 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20  ted, attempt to 
1b10: 64 69 73 70 6f 73 65 20 6f 66 0d 0a 20 20 20 20  dispose of..    
1b20: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
1b30: 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f 64  m now.  This cod
1b40: 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f  e is designed to
1b50: 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e 67 0d   avoid throwing.
1b60: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
1b70: 20 20 65 78 63 65 70 74 69 6f 6e 73 20 75 6e 6c    exceptions unl
1b80: 65 73 73 20 74 68 65 20 44 69 73 70 6f 73 65 20  ess the Dispose 
1b90: 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
1ba0: 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dule..        //
1bb0: 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 74 68         itself th
1bc0: 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f  rows an exceptio
1bd0: 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  n...        //..
1be0: 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64          if (_mod
1bf0: 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ules != null).. 
1c00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c10: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b        foreach (K
1c20: 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69  eyValuePair<stri
1c30: 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ng, SQLiteModule
1c40: 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75 6c  > pair in _modul
1c50: 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es)..           
1c60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c70: 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65      SQLiteModule
1c80: 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e 56   module = pair.V
1c90: 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
1ca0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
1cb0: 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
1cf0: 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b  odule.Dispose();
1d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1d10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  ...            _
1d20: 6d 6f 64 75 6c 65 73 2e 43 6c 65 61 72 28 29 3b  modules.Clear();
1d30: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1d40: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
1d50: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db0: 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69  /....    // It i
1dc0: 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79 20 74  sn't necessary t
1dd0: 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20 66 75  o cleanup any fu
1de0: 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20 72 65  nctions we've re
1df0: 67 69 73 74 65 72 65 64 2e 20 20 49 66 20 74 68  gistered.  If th
1e00: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20  e connection..  
1e10: 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68 65    // goes to the
1e20: 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65 73   pool and is res
1e30: 75 72 72 65 63 74 65 64 20 6c 61 74 65 72 2c 20  urrected later, 
1e40: 72 65 2d 72 65 67 69 73 74 65 72 65 64 20 66 75  re-registered fu
1e50: 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65  nctions will ove
1e60: 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20 20 20  rwrite the..    
1e70: 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63  // previous func
1e80: 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c 69  tions.  The SQLi
1e90: 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65  teFunctionCookie
1ea0: 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65  Handle will take
1eb0: 20 63 61 72 65 20 6f 66 20 66 72 65 65 69 6e 67   care of freeing
1ec0: 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20   unmanaged..    
1ed0: 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62 65 6c  // resources bel
1ee0: 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20 70 72  onging to the pr
1ef0: 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73 74 65  eviously-registe
1f00: 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a  red functions...
1f10: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1f20: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65  rride void Close
1f30: 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d  (bool canThrow).
1f40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
1f50: 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d   (_sql != null).
1f60: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1f70: 20 20 20 20 69 66 20 28 21 5f 73 71 6c 2e 4f 77      if (!_sql.Ow
1f80: 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20 20 20 20  nHandle)..      
1f90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fa0: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c       _sql = null
1fb0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1fc0: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20   return;..      
1fd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fe0: 20 20 20 62 6f 6f 6c 20 75 6e 62 69 6e 64 46 75     bool unbindFu
1ff0: 6e 63 74 69 6f 6e 73 20 3d 20 28 28 5f 66 6c 61  nctions = ((_fla
2000: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
2010: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e 62 69 6e  ctionFlags.Unbin
2020: 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43 6c 6f 73  dFunctionsOnClos
2030: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
2040: 20 20 20 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e      == SQLiteCon
2050: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e 62  nectionFlags.Unb
2060: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43 6c  indFunctionsOnCl
2070: 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2080: 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29     if (_usePool)
2090: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
20b0: 28 53 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65  (SQLiteBase.Rese
20c0: 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c  tConnection(_sql
20d0: 2c 20 5f 73 71 6c 2c 20 63 61 6e 54 68 72 6f 77  , _sql, canThrow
20e0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
20f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2100: 20 20 20 20 20 20 20 69 66 20 28 75 6e 62 69 6e         if (unbin
2110: 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20  dFunctions)..   
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2140: 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69          if (SQLi
2150: 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69 6e  teFunction.Unbin
2160: 64 41 6c 6c 46 75 6e 63 74 69 6f 6e 73 28 74 68  dAllFunctions(th
2170: 69 73 2c 20 5f 66 6c 61 67 73 2c 20 66 61 6c 73  is, _flags, fals
2180: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2190: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
21a0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
21b0: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
21c0: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
21f0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
2200: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
2210: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2230: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
2240: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2260: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e               "Un
2270: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 28 50  bindFunctions (P
2280: 6f 6f 6c 29 20 53 75 63 63 65 73 73 3a 20 7b 30  ool) Success: {0
2290: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b0: 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e     HandleToStrin
22c0: 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  g()));..#endif..
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2300: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2310: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
2320: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
2330: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
2340: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
2350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2360: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
2370: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
2380: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
2390: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b0: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
23c0: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
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 22 55 6e               "Un
23f0: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 28 50  bindFunctions (P
2400: 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b 30  ool) Failure: {0
2410: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2430: 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e     HandleToStrin
2440: 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  g()));..#endif..
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2460: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2470: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2480: 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54  #if INTEROP_VIRT
2490: 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20  UAL_TABLE..     
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
24b0: 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a  poseModules();..
24c0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
24e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c  teConnectionPool
24f0: 2e 41 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20  .Add(_fileName, 
2500: 5f 73 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69  _sql, _poolVersi
2510: 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
2520: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
2530: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61  Connection.OnCha
2540: 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43  nged(null, new C
2550: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72  onnectionEventAr
2560: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
2570: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
2580: 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74  eConnectionEvent
2590: 54 79 70 65 2e 43 6c 6f 73 65 64 54 6f 50 6f 6f  Type.ClosedToPoo
25a0: 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a  l, null, null,..
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c0: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
25d0: 2c 20 5f 73 71 6c 2c 20 5f 66 69 6c 65 4e 61 6d  , _sql, _fileNam
25e0: 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20  e, new object[] 
25f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2600: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
2610: 53 51 4c 69 74 65 33 29 2c 20 63 61 6e 54 68 72  SQLite3), canThr
2620: 6f 77 2c 20 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f  ow, _fileName, _
2630: 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29 29 3b  poolVersion }));
2640: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
2650: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
2660: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
2670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2680: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55  race.WriteLine(U
2690: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
26a0: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
26b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26c0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
26d0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
26e0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
26f0: 20 20 20 20 20 20 20 20 20 20 20 22 43 6c 6f 73             "Clos
2700: 65 20 28 50 6f 6f 6c 29 20 53 75 63 63 65 73 73  e (Pool) Success
2710: 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
2720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48                 H
2730: 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29  andleToString())
2740: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
2750: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66            }..#if
2760: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
2770: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
2780: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
2790: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
27a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
27c0: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55 6e 73  ce.WriteLine(Uns
27d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
27e0: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
27f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2800: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
2810: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
2820: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2830: 20 20 20 20 20 20 20 20 20 22 43 6c 6f 73 65 20           "Close 
2840: 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20  (Pool) Failure: 
2850: 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e               Han
2870: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
2880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2890: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
28a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
28b0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
28c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28d0: 20 20 20 69 66 20 28 75 6e 62 69 6e 64 46 75 6e     if (unbindFun
28e0: 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20  ctions)..       
28f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2900: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2910: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55  SQLiteFunction.U
2920: 6e 62 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f 6e  nbindAllFunction
2930: 73 28 74 68 69 73 2c 20 5f 66 6c 61 67 73 2c 20  s(this, _flags, 
2940: 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20  false))..       
2950: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
2960: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
2970: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
2980: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
29a0: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55 6e 73  ce.WriteLine(Uns
29b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
29c0: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e0: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
29f0: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
2a00: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a20: 20 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e   "UnbindFunction
2a30: 73 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c  s Success: {0}",
2a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64              Hand
2a60: 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  leToString()));.
2a70: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
2a80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2ab0: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
2ac0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2ad0: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2ae0: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
2af0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
2b00: 57 72 69 74 65 4c 69 6e 65 28 55 6e 73 61 66 65  WriteLine(Unsafe
2b10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53 74  NativeMethods.St
2b20: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
2b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b40: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
2b50: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
2b60: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55                "U
2b80: 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 46  nbindFunctions F
2b90: 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20  ailure: {0}",.. 
2ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb0: 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54           HandleT
2bc0: 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65  oString()));..#e
2bd0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
2be0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2bf0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c00: 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
2c10: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
2c20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2c30: 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b      _sql = null;
2c40: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2c50: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
2c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 21  ///////....#if !
2cc0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2cd0: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2ce0: 4f 4e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ON..    protecte
2cf0: 64 20 73 74 72 69 6e 67 20 48 61 6e 64 6c 65 54  d string HandleT
2d00: 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 7b  oString()..    {
2d10: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
2d20: 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
2d30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d40: 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20  "<null>";....   
2d50: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71 6c       return _sql
2d60: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
2d70: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
2d80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de0: 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
2df0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2e00: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   Returns the num
2e10: 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74 68 65  ber of times the
2e20: 20 3c 73 65 65 20 63 72 65 66 3d 22 43 61 6e 63   <see cref="Canc
2e30: 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 20 68 61  el" /> method ha
2e40: 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
2e50: 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  called...    ///
2e60: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2e70: 20 70 72 69 76 61 74 65 20 69 6e 74 20 47 65 74   private int Get
2e80: 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d 0a 20  CancelCount().. 
2e90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
2ea0: 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64  turn Interlocked
2eb0: 2e 43 6f 6d 70 61 72 65 45 78 63 68 61 6e 67 65  .CompareExchange
2ec0: 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e  (ref _cancelCoun
2ed0: 74 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 7d  t, 0, 0);..    }
2ee0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f40: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f  ///////....    /
2f50: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2f60: 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
2f70: 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65  d determines whe
2f80: 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 3c 73  ther or not a <s
2f90: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45  ee cref="SQLiteE
2fa0: 78 63 65 70 74 69 6f 6e 22 20 2f 3e 0d 0a 20 20  xception" />..  
2fb0: 20 20 2f 2f 2f 20 77 69 74 68 20 61 20 72 65 74    /// with a ret
2fc0: 75 72 6e 20 63 6f 64 65 20 6f 66 20 3c 73 65 65  urn code of <see
2fd0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72   cref="SQLiteErr
2fe0: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
2ff0: 22 20 2f 3e 20 73 68 6f 75 6c 64 0d 0a 20 20 20  " /> should..   
3000: 20 2f 2f 2f 20 62 65 20 74 68 72 6f 77 6e 20 61   /// be thrown a
3010: 66 74 65 72 20 6d 61 6b 69 6e 67 20 61 20 63 61  fter making a ca
3020: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53 51 4c 69  ll into the SQLi
3030: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
3040: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3050: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
3060: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
3070: 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 3c   Non-zero if a <
3080: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
3090: 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20 74 6f  Exception" /> to
30a0: 20 62 65 20 74 68 72 6f 77 6e 2e 20 20 54 68 69   be thrown.  Thi
30b0: 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 2f 2f  s method..    //
30c0: 2f 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 65 74 75  / will only retu
30d0: 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  rn non-zero if t
30e0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 61  he <see cref="Ca
30f0: 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 20  ncel" /> method 
3100: 77 61 73 20 63 61 6c 6c 65 64 0d 0a 20 20 20 20  was called..    
3110: 2f 2f 2f 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  /// one or more 
3120: 74 69 6d 65 73 20 64 75 72 69 6e 67 20 61 20 63  times during a c
3130: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53 51 4c  all into the SQL
3140: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
3150: 20 28 65 2e 67 2e 20 77 68 65 6e 0d 0a 20 20 20   (e.g. when..   
3160: 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74 65 33   /// the sqlite3
3170: 5f 70 72 65 70 61 72 65 2a 28 29 20 6f 72 20 73  _prepare*() or s
3180: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 41 50  qlite3_step() AP
3190: 49 73 20 61 72 65 20 75 73 65 64 29 2e 0d 0a 20  Is are used)... 
31a0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
31b0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  >..    private b
31c0: 6f 6f 6c 20 53 68 6f 75 6c 64 54 68 72 6f 77 46  ool ShouldThrowF
31d0: 6f 72 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20 20  orCancel()..    
31e0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
31f0: 6e 20 47 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74  n GetCancelCount
3200: 28 29 20 3e 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  () > 0;..    }..
3210: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
3220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3270: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
3280: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3290: 2f 2f 2f 20 52 65 73 65 74 73 20 74 68 65 20 76  /// Resets the v
32a0: 61 6c 75 65 20 6f 66 20 74 68 65 20 3c 73 65 65  alue of the <see
32b0: 20 63 72 65 66 3d 22 5f 63 61 6e 63 65 6c 43 6f   cref="_cancelCo
32c0: 75 6e 74 22 20 2f 3e 20 66 69 65 6c 64 2e 0d 0a  unt" /> field...
32d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
32e0: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
32f0: 69 6e 74 20 52 65 73 65 74 43 61 6e 63 65 6c 43  int ResetCancelC
3300: 6f 75 6e 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ount()..    {.. 
3310: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
3320: 74 65 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70 61 72  terlocked.Compar
3330: 65 45 78 63 68 61 6e 67 65 28 72 65 66 20 5f 63  eExchange(ref _c
3340: 61 6e 63 65 6c 43 6f 75 6e 74 2c 20 30 2c 20 5f  ancelCount, 0, _
3350: 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a 20  cancelCount);.. 
3360: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
3370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
33d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
33e0: 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70  ..    /// Attemp
33f0: 74 73 20 74 6f 20 69 6e 74 65 72 72 75 70 74 20  ts to interrupt 
3400: 74 68 65 20 71 75 65 72 79 20 63 75 72 72 65 6e  the query curren
3410: 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 6f 6e  tly executing on
3420: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d   the associated.
3430: 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20  .    /// native 
3440: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
3450: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
3460: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
3470: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
3480: 76 6f 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20  void Cancel().. 
3490: 20 20 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 0d     {..      try.
34a0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
34b0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
34c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
34d0: 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45   finally /* NOTE
34e0: 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29  : Thread.Abort()
34f0: 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d   protection. */.
3500: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
3510: 20 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e    Interlocked.In
3520: 63 72 65 6d 65 6e 74 28 72 65 66 20 5f 63 61 6e  crement(ref _can
3530: 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a 20 20 20 20  celCount);..    
3540: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
3550: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3560: 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29 3b  interrupt(_sql);
3570: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
3580: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
3590: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
35a0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62 69 6e  his function bin
35b0: 64 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  ds a user-define
35c0: 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68  d function to th
35d0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
35e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
35f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3600: 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e  m name="function
3610: 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20 20  Attribute">..   
3620: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
3630: 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69  ef="SQLiteFuncti
3640: 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20 6f  onAttribute"/> o
3650: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 63  bject instance c
3660: 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 2f  ontaining..    /
3670: 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61 20  // the metadata 
3680: 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  for the function
3690: 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20   to be bound... 
36a0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
36b0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
36c0: 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22 3e  name="function">
36d0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73  ..    /// The <s
36e0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46  ee cref="SQLiteF
36f0: 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65 63  unction"/> objec
3700: 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74 20  t instance that 
3710: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0d 0a  implements the..
3720: 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e      /// function
3730: 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20   to be bound... 
3740: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
3750: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
3760: 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20  name="flags">.. 
3770: 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73     /// The flags
3780: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3790: 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e   the parent conn
37a0: 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d 0a  ection object...
37b0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
37c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
37d0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
37e0: 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
37f0: 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69      SQLiteFuncti
3800: 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75 6e 63  onAttribute func
3810: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d 0a  tionAttribute,..
3820: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
3830: 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c  nction function,
3840: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
3850: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
3860: 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 29  flags..        )
3870: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
3880: 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41 74 74   if (functionAtt
3890: 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ribute == null).
38a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
38b0: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
38c0: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 75  ullException("fu
38d0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
38e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
38f0: 20 28 66 75 6e 63 74 69 6f 6e 20 3d 3d 20 6e 75   (function == nu
3900: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3910: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
3920: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
3930: 28 22 66 75 6e 63 74 69 6f 6e 22 29 3b 0d 0a 0d  ("function");...
3940: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46  .        SQLiteF
3950: 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63  unction.BindFunc
3960: 74 69 6f 6e 28 74 68 69 73 2c 20 66 75 6e 63 74  tion(this, funct
3970: 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75  ionAttribute, fu
3980: 6e 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29 3b 0d  nction, flags);.
3990: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  ...        if (_
39a0: 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c  functions == nul
39b0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
39c0: 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77  _functions = new
39d0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69   Dictionary<SQLi
39e0: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
39f0: 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74  ute, SQLiteFunct
3a00: 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ion>();....     
3a10: 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 66 75     _functions[fu
3a20: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 5d  nctionAttribute]
3a30: 20 3d 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a 20 20   = function;..  
3a40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
3a50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
3a60: 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  / This function 
3a70: 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66  binds a user-def
3a80: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f  ined function to
3a90: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e   the connection.
3aa0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3ab0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
3ac0: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74  aram name="funct
3ad0: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a  ionAttribute">..
3ae0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
3af0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e   cref="SQLiteFun
3b00: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f  ctionAttribute"/
3b10: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
3b20: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20  e containing..  
3b30: 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61    /// the metada
3b40: 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  ta for the funct
3b50: 69 6f 6e 20 74 6f 20 62 65 20 75 6e 62 6f 75 6e  ion to be unboun
3b60: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
3b70: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
3b80: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73  aram name="flags
3b90: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
3ba0: 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  flags associated
3bb0: 20 77 69 74 68 20 74 68 65 20 70 61 72 65 6e 74   with the parent
3bc0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65   connection obje
3bd0: 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ct...    /// </p
3be0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
3bf0: 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d 7a 65 72 6f  returns>Non-zero
3c00: 20 69 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   if the function
3c10: 20 77 61 73 20 75 6e 62 6f 75 6e 64 20 61 6e 64   was unbound and
3c20: 20 72 65 6d 6f 76 65 64 2e 3c 2f 72 65 74 75 72   removed.</retur
3c30: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
3c40: 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
3c50: 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d  UnbindFunction(.
3c60: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46  .        SQLiteF
3c70: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3c80: 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75   functionAttribu
3c90: 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  te,..        SQL
3ca0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
3cb0: 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20  gs flags..      
3cc0: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
3cd0: 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e      if (function
3ce0: 41 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c  Attribute == nul
3cf0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
3d00: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
3d10: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
3d20: 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  "functionAttribu
3d30: 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  te");....       
3d40: 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20   if (_functions 
3d50: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
3d60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
3d70: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  se;....        S
3d80: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
3d90: 6e 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20  nction;....     
3da0: 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e     if (_function
3db0: 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 66 75  s.TryGetValue(fu
3dc0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
3dd0: 20 6f 75 74 20 66 75 6e 63 74 69 6f 6e 29 29 0d   out function)).
3de0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
3df0: 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69          if (SQLi
3e00: 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69 6e  teFunction.Unbin
3e10: 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e30: 74 68 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74  this, functionAt
3e40: 74 72 69 62 75 74 65 2c 20 66 75 6e 63 74 69 6f  tribute, functio
3e50: 6e 2c 20 66 6c 61 67 73 29 20 26 26 0d 0a 20 20  n, flags) &&..  
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66                _f
3e70: 75 6e 63 74 69 6f 6e 73 2e 52 65 6d 6f 76 65 28  unctions.Remove(
3e80: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
3e90: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
3ea0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3eb0: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
3ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3ed0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
3ee0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
3ef0: 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  se;..    }....  
3f00: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3f10: 69 64 65 20 73 74 72 69 6e 67 20 56 65 72 73 69  ide string Versi
3f20: 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  on..    {..     
3f30: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
3f40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
3f50: 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20  LiteVersion;..  
3f60: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
3f70: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3f80: 72 72 69 64 65 20 69 6e 74 20 56 65 72 73 69 6f  rride int Versio
3f90: 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a  nNumber..    {..
3fa0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
3fb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
3fc0: 72 6e 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e  rn SQLiteVersion
3fd0: 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 7d  Number;..      }
3fe0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
3ff0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
4000: 74 72 69 6e 67 20 44 65 66 69 6e 65 43 6f 6e 73  tring DefineCons
4010: 74 61 6e 74 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  tants..    {..  
4020: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
4030: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4040: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
4050: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
4060: 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20  ingBuilder();.. 
4070: 20 20 20 20 20 20 20 20 20 20 20 49 4c 69 73 74             IList
4080: 3c 73 74 72 69 6e 67 3e 20 6c 69 73 74 20 3d 20  <string> list = 
4090: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
40a0: 74 61 6e 74 73 2e 4f 70 74 69 6f 6e 4c 69 73 74  tants.OptionList
40b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
40c0: 20 69 66 20 28 6c 69 73 74 20 21 3d 20 6e 75 6c   if (list != nul
40d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
40e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
40f0: 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69     foreach (stri
4100: 6e 67 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69  ng element in li
4110: 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st)..           
4120: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4130: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4140: 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  element == null)
4150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4160: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
4170: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
4180: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
4190: 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30  esult.Length > 0
41a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
41b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
41c0: 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a  t.Append(' ');..
41d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
41e0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
41f0: 65 6e 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20  end(element);.. 
4200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4220: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
4230: 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53  eturn result.ToS
4240: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20  tring();..      
4250: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4260: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
4270: 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65 56  c string SQLiteV
4280: 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20  ersion..    {.. 
4290: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
42a0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
42b0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
42c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
42d0: 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76 65  ds.sqlite3_libve
42e0: 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 20  rsion(), -1);.. 
42f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4300: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
4310: 61 74 69 63 20 69 6e 74 20 53 51 4c 69 74 65 56  atic int SQLiteV
4320: 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20  ersionNumber..  
4330: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
4340: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4350: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
4360: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4370: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e  te3_libversion_n
4380: 75 6d 62 65 72 28 29 3b 0d 0a 20 20 20 20 20 20  umber();..      
4390: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
43a0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
43b0: 73 74 72 69 6e 67 20 53 51 4c 69 74 65 53 6f 75  string SQLiteSou
43c0: 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  rceId..    {..  
43d0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
43e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
43f0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
4400: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4410: 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65  s.sqlite3_source
4420: 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20  id(), -1);..    
4430: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4440: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
4450: 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65 43  c string SQLiteC
4460: 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20  ompileOptions.. 
4470: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
4480: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
4490: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
44a0: 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d  Builder result =
44b0: 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64   new StringBuild
44c0: 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  er();..         
44d0: 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 30     int index = 0
44e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ;..            I
44f0: 6e 74 50 74 72 20 7a 56 61 6c 75 65 20 3d 20 55  ntPtr zValue = U
4500: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4510: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69  ds.sqlite3_compi
4520: 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64  leoption_get(ind
4530: 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ex++);....      
4540: 20 20 20 20 20 20 77 68 69 6c 65 20 28 7a 56 61        while (zVa
4550: 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  lue != IntPtr.Ze
4560: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
4570: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4580: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
4590: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45b0: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20  result.Append(' 
45c0: 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ');....         
45d0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
45e0: 70 65 6e 64 28 55 54 46 38 54 6f 53 74 72 69 6e  pend(UTF8ToStrin
45f0: 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29 3b 0d  g(zValue, -1));.
4600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4610: 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65   zValue = Unsafe
4620: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4630: 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
4640: 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29  ion_get(index++)
4650: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
4660: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4670: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
4680: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20  String();..     
4690: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
46a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
46b0: 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72 6f  ic string Intero
46c0: 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d  pVersion..    {.
46d0: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
46e0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51        {..#if !SQ
46f0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
4700: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4710: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
4720: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4730: 64 73 2e 69 6e 74 65 72 6f 70 5f 6c 69 62 76 65  ds.interop_libve
4740: 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 23  rsion(), -1);..#
4750: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
4760: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
4770: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
4780: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
4790: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
47a0: 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 53 6f  string InteropSo
47b0: 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20  urceId..    {.. 
47c0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
47d0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
47e0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
47f0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4800: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
4810: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4820: 2e 69 6e 74 65 72 6f 70 5f 73 6f 75 72 63 65 69  .interop_sourcei
4830: 64 28 29 2c 20 2d 31 29 3b 0d 0a 23 65 6c 73 65  d(), -1);..#else
4840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4850: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64  turn null;..#end
4860: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
4870: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4880: 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69  rnal static stri
4890: 6e 67 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c  ng InteropCompil
48a0: 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d  eOptions..    {.
48b0: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
48c0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51        {..#if !SQ
48d0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
48e0: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
48f0: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
4900: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
4910: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
4920: 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20      int index = 
4930: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
4940: 49 6e 74 50 74 72 20 7a 56 61 6c 75 65 20 3d 20  IntPtr zValue = 
4950: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4960: 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70  ods.interop_comp
4970: 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e  ileoption_get(in
4980: 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20 20  dex++);....     
4990: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 7a 56         while (zV
49a0: 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  alue != IntPtr.Z
49b0: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
49c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
49d0: 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e       if (result.
49e0: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a00: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27   result.Append('
4a10: 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   ');....        
4a20: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
4a30: 70 70 65 6e 64 28 55 54 46 38 54 6f 53 74 72 69  ppend(UTF8ToStri
4a40: 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29 3b  ng(zValue, -1));
4a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4a60: 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61 66    zValue = Unsaf
4a70: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 69  eNativeMethods.i
4a80: 6e 74 65 72 6f 70 5f 63 6f 6d 70 69 6c 65 6f 70  nterop_compileop
4a90: 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b  tion_get(index++
4aa0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4ab0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4ac0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
4ad0: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 23 65 6c 73  oString();..#els
4ae0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
4af0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e  eturn null;..#en
4b00: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
4b10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4b20: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
4b30: 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a  ool AutoCommit..
4b40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
4b50: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
4b60: 20 20 20 72 65 74 75 72 6e 20 49 73 41 75 74 6f     return IsAuto
4b70: 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f 73 71  commit(_sql, _sq
4b80: 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  l);..      }..  
4b90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4ba0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
4bb0: 67 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49  g LastInsertRowI
4bc0: 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  d..    {..      
4bd0: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69  get..      {..#i
4be0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
4bf0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
4c00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
4c10: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4c20: 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e  .sqlite3_last_in
4c30: 73 65 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c 29  sert_rowid(_sql)
4c40: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
4c50: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
4c60: 20 20 20 6c 6f 6e 67 20 72 6f 77 49 64 20 3d 20     long rowId = 
4c70: 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61  0;..        Unsa
4c80: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4c90: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
4ca0: 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f  ert_rowid_intero
4cb0: 70 28 5f 73 71 6c 2c 20 72 65 66 20 72 6f 77 49  p(_sql, ref rowI
4cc0: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  d);..        ret
4cd0: 75 72 6e 20 72 6f 77 49 64 3b 0d 0a 23 65 6c 73  urn rowId;..#els
4ce0: 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  e..        throw
4cf0: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
4d00: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
4d10: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d  .#endif..      }
4d20: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
4d30: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
4d40: 20 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a 20 20   int Changes..  
4d50: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
4d60: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51        {..#if !SQ
4d70: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
4d80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
4d90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4da0: 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  s.sqlite3_change
4db0: 73 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 29 3b  s_interop(_sql);
4dc0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
4dd0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
4de0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4df0: 74 65 33 5f 63 68 61 6e 67 65 73 28 5f 73 71 6c  te3_changes(_sql
4e00: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
4e10: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4e20: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
4e30: 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 55  ide long MemoryU
4e40: 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  sed..    {..    
4e50: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
4e60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4e70: 72 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65 6d  return StaticMem
4e80: 6f 72 79 55 73 65 64 3b 0d 0a 20 20 20 20 20 20  oryUsed;..      
4e90: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
4eb0: 63 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65 6d  c long StaticMem
4ec0: 6f 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a  oryUsed..    {..
4ed0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
4ee0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
4ef0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
4f00: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
4f10: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
4f20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4f30: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73  qlite3_memory_us
4f40: 65 64 28 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  ed();..#elif !SQ
4f50: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
4f60: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
4f70: 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  bytes = 0;..    
4f80: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
4f90: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4fa0: 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 5f  te3_memory_used_
4fb0: 69 6e 74 65 72 6f 70 28 72 65 66 20 62 79 74 65  interop(ref byte
4fc0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
4fd0: 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a   return bytes;..
4fe0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
4ff0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
5000: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
5010: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
5020: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5030: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
5040: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
5050: 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d  MemoryHighwater.
5060: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5070: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
5080: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5090: 72 6e 20 53 74 61 74 69 63 4d 65 6d 6f 72 79 48  rn StaticMemoryH
50a0: 69 67 68 77 61 74 65 72 3b 0d 0a 20 20 20 20 20  ighwater;..     
50b0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
50c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
50d0: 69 63 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65  ic long StaticMe
50e0: 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20  moryHighwater.. 
50f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
5100: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  t..        {..#i
5110: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
5120: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
5130: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5140: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5150: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d  hods.sqlite3_mem
5160: 6f 72 79 5f 68 69 67 68 77 61 74 65 72 28 30 29  ory_highwater(0)
5170: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
5180: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
5190: 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65         long byte
51a0: 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  s = 0;..        
51b0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
51c0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
51d0: 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72  memory_highwater
51e0: 5f 69 6e 74 65 72 6f 70 28 30 2c 20 72 65 66 20  _interop(0, ref 
51f0: 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  bytes);..       
5200: 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65       return byte
5210: 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  s;..#else..     
5220: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
5230: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
5240: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
5250: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
5260: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
5270: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5280: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d  /// Returns non-
5290: 7a 65 72 6f 20 69 66 20 74 68 65 20 75 6e 64 65  zero if the unde
52a0: 72 6c 79 69 6e 67 20 6e 61 74 69 76 65 20 63 6f  rlying native co
52b0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
52c0: 69 73 20 6f 77 6e 65 64 0d 0a 20 20 20 20 2f 2f  is owned..    //
52d0: 2f 20 62 79 20 74 68 69 73 20 69 6e 73 74 61 6e  / by this instan
52e0: 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ce...    /// </s
52f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74  ummary>..    int
5300: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
5310: 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d 0a 20  ool OwnHandle.. 
5320: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
5330: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
5340: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 73            if (_s
5350: 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
5360: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
5370: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
5380: 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65  eption("no conne
5390: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76 61  ction handle ava
53a0: 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20  ilable");....   
53b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
53c0: 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 3b 0d  _sql.OwnHandle;.
53d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
53e0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
53f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
5400: 52 65 74 75 72 6e 73 20 74 68 65 20 6c 6f 67 69  Returns the logi
5410: 63 61 6c 20 6c 69 73 74 20 6f 66 20 66 75 6e 63  cal list of func
5420: 74 69 6f 6e 73 20 61 73 73 6f 63 69 61 74 65 64  tions associated
5430: 20 77 69 74 68 20 74 68 69 73 20 63 6f 6e 6e 65   with this conne
5440: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
5450: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
5460: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5470: 65 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53 51  e IDictionary<SQ
5480: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
5490: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
54a0: 63 74 69 6f 6e 3e 20 46 75 6e 63 74 69 6f 6e 73  ction> Functions
54b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
54c0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 66   get { return _f
54d0: 75 6e 63 74 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20  unctions; }..   
54e0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
54f0: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
5500: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4d  teErrorCode SetM
5510: 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c  emoryStatus(bool
5520: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
5530: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
5540: 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74  taticSetMemorySt
5550: 61 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20  atus(value);..  
5560: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5570: 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74  nal static SQLit
5580: 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69  eErrorCode Stati
5590: 63 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73  cSetMemoryStatus
55a0: 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20  (bool value)..  
55b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
55c0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
55d0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
55e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
55f0: 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20 20 20 20  nfig_int(..     
5600: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
5610: 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  figOpsEnum.SQLIT
5620: 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54  E_CONFIG_MEMSTAT
5630: 55 53 2c 20 76 61 6c 75 65 20 3f 20 31 20 3a 20  US, value ? 1 : 
5640: 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  0);....        r
5650: 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d  eturn rc;..    }
5660: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
5670: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
5680: 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20  ttempts to free 
5690: 61 73 20 6d 75 63 68 20 68 65 61 70 20 6d 65 6d  as much heap mem
56a0: 6f 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65 20  ory as possible 
56b0: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
56c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
56d0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
56e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
56f0: 6e 73 3e 41 20 73 74 61 6e 64 61 72 64 20 53 51  ns>A standard SQ
5700: 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
5710: 20 28 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20   (i.e. zero for 
5720: 73 75 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d  success and non-
5730: 7a 65 72 6f 20 66 6f 72 20 66 61 69 6c 75 72 65  zero for failure
5740: 29 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  ).</returns>..  
5750: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
5760: 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
5770: 6f 64 65 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72  ode ReleaseMemor
5780: 79 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  y()..    {..    
5790: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
57a0: 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  ode rc = UnsafeN
57b0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
57c0: 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f  ite3_db_release_
57d0: 6d 65 6d 6f 72 79 28 5f 73 71 6c 29 3b 0d 0a 20  memory(_sql);.. 
57e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
57f0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5800: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5810: 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20     /// Attempts 
5820: 74 6f 20 66 72 65 65 20 4e 20 62 79 74 65 73 20  to free N bytes 
5830: 6f 66 20 68 65 61 70 20 6d 65 6d 6f 72 79 20 62  of heap memory b
5840: 79 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 6e  y deallocating n
5850: 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d  on-essential mem
5860: 6f 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c 6c  ory..    /// all
5870: 6f 63 61 74 69 6f 6e 73 20 68 65 6c 64 20 62 79  ocations held by
5880: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6c 69   the database li
5890: 62 72 61 72 79 2e 20 4d 65 6d 6f 72 79 20 75 73  brary. Memory us
58a0: 65 64 20 74 6f 20 63 61 63 68 65 20 64 61 74 61  ed to cache data
58b0: 62 61 73 65 20 70 61 67 65 73 0d 0a 20 20 20 20  base pages..    
58c0: 2f 2f 2f 20 74 6f 20 69 6d 70 72 6f 76 65 20 70  /// to improve p
58d0: 65 72 66 6f 72 6d 61 6e 63 65 20 69 73 20 61 6e  erformance is an
58e0: 20 65 78 61 6d 70 6c 65 20 6f 66 20 6e 6f 6e 2d   example of non-
58f0: 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f 72 79  essential memory
5900: 2e 20 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d  .  This is a no-
5910: 6f 70 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 74 75  op..    /// retu
5920: 72 6e 69 6e 67 20 7a 65 72 6f 20 69 66 20 74 68  rning zero if th
5930: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
5940: 62 72 61 72 79 20 77 61 73 20 6e 6f 74 20 63 6f  brary was not co
5950: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20  mpiled with the 
5960: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0d 0a 20 20  compile-time..  
5970: 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 20 53 51 4c    /// option SQL
5980: 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ITE_ENABLE_MEMOR
5990: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2e 20 20 4f  Y_MANAGEMENT.  O
59a0: 70 74 69 6f 6e 61 6c 6c 79 2c 20 61 74 74 65 6d  ptionally, attem
59b0: 70 74 73 20 74 6f 20 72 65 73 65 74 20 61 6e 64  pts to reset and
59c0: 2f 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6d  /or..    /// com
59d0: 70 61 63 74 20 74 68 65 20 57 69 6e 33 32 20 6e  pact the Win32 n
59e0: 61 74 69 76 65 20 68 65 61 70 2c 20 69 66 20 61  ative heap, if a
59f0: 70 70 6c 69 63 61 62 6c 65 2e 0d 0a 20 20 20 20  pplicable...    
5a00: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5a10: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5a20: 61 6d 65 3d 22 6e 42 79 74 65 73 22 3e 0d 0a 20  ame="nBytes">.. 
5a30: 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 71 75 65     /// The reque
5a40: 73 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 62  sted number of b
5a50: 79 74 65 73 20 74 6f 20 66 72 65 65 2e 0d 0a 20  ytes to free... 
5a60: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
5a70: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
5a80: 6e 61 6d 65 3d 22 72 65 73 65 74 22 3e 0d 0a 20  name="reset">.. 
5a90: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
5aa0: 74 6f 20 61 74 74 65 6d 70 74 20 61 20 68 65 61  to attempt a hea
5ab0: 70 20 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f 2f  p reset...    //
5ac0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
5ad0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5ae0: 22 63 6f 6d 70 61 63 74 22 3e 0d 0a 20 20 20 20  "compact">..    
5af0: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20  /// Non-zero to 
5b00: 61 74 74 65 6d 70 74 20 68 65 61 70 20 63 6f 6d  attempt heap com
5b10: 70 61 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  paction...    //
5b20: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
5b30: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5b40: 22 6e 46 72 65 65 22 3e 0d 0a 20 20 20 20 2f 2f  "nFree">..    //
5b50: 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
5b60: 62 79 74 65 73 20 61 63 74 75 61 6c 6c 79 20 66  bytes actually f
5b70: 72 65 65 64 2e 20 20 54 68 69 73 20 76 61 6c 75  reed.  This valu
5b80: 65 20 6d 61 79 20 62 65 20 7a 65 72 6f 2e 0d 0a  e may be zero...
5b90: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
5ba0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
5bb0: 20 6e 61 6d 65 3d 22 72 65 73 65 74 4f 6b 22 3e   name="resetOk">
5bc0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76  ..    /// This v
5bd0: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 6e 6f 6e  alue will be non
5be0: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 68 65 61  -zero if the hea
5bf0: 70 20 72 65 73 65 74 20 77 61 73 20 73 75 63 63  p reset was succ
5c00: 65 73 73 66 75 6c 2e 0d 0a 20 20 20 20 2f 2f 2f  essful...    ///
5c10: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
5c20: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5c30: 6e 4c 61 72 67 65 73 74 22 3e 0d 0a 20 20 20 20  nLargest">..    
5c40: 2f 2f 2f 20 54 68 65 20 73 69 7a 65 20 6f 66 20  /// The size of 
5c50: 74 68 65 20 6c 61 72 67 65 73 74 20 63 6f 6d 6d  the largest comm
5c60: 69 74 74 65 64 20 66 72 65 65 20 62 6c 6f 63 6b  itted free block
5c70: 20 69 6e 20 74 68 65 20 68 65 61 70 2c 20 69 6e   in the heap, in
5c80: 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f   bytes...    ///
5c90: 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c   This value will
5ca0: 20 62 65 20 7a 65 72 6f 20 75 6e 6c 65 73 73 20   be zero unless 
5cb0: 68 65 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 20  heap compaction 
5cc0: 69 73 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20 20  is enabled...   
5cd0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
5ce0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
5cf0: 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e  ..    /// A stan
5d00: 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
5d10: 72 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65  rn code (i.e. ze
5d20: 72 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20 61  ro for success a
5d30: 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 0d 0a 20 20 20  nd non-zero..   
5d40: 20 2f 2f 2f 20 66 6f 72 20 66 61 69 6c 75 72 65   /// for failure
5d50: 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  )...    /// </re
5d60: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
5d70: 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
5d80: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74  teErrorCode Stat
5d90: 69 63 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28  icReleaseMemory(
5da0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 42  ..        int nB
5db0: 79 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 62  ytes,..        b
5dc0: 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a 20 20 20 20  ool reset,..    
5dd0: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 61 63 74      bool compact
5de0: 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 69  ,..        ref i
5df0: 6e 74 20 6e 46 72 65 65 2c 0d 0a 20 20 20 20 20  nt nFree,..     
5e00: 20 20 20 72 65 66 20 62 6f 6f 6c 20 72 65 73 65     ref bool rese
5e10: 74 4f 6b 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  tOk,..        re
5e20: 66 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74 0d  f uint nLargest.
5e30: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
5e40: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
5e50: 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
5e60: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
5e70: 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  Ok;....        i
5e80: 6e 74 20 6e 46 72 65 65 4c 6f 63 61 6c 20 3d 20  nt nFreeLocal = 
5e90: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5ea0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6c 65  ods.sqlite3_rele
5eb0: 61 73 65 5f 6d 65 6d 6f 72 79 28 6e 42 79 74 65  ase_memory(nByte
5ec0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 75 69 6e  s);..        uin
5ed0: 74 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 20  t nLargestLocal 
5ee0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 62 6f  = 0;..        bo
5ef0: 6f 6c 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 20  ol resetOkLocal 
5f00: 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20  = false;....#if 
5f10: 21 44 45 42 55 47 20 26 26 20 57 49 4e 44 4f 57  !DEBUG && WINDOW
5f20: 53 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 75 6c  S // NOTE: Shoul
5f30: 64 20 62 65 20 22 57 49 4e 33 32 48 45 41 50 20  d be "WIN32HEAP 
5f40: 26 26 20 21 4d 45 4d 44 45 42 55 47 20 26 26 20  && !MEMDEBUG && 
5f50: 57 49 4e 44 4f 57 53 22 0d 0a 20 20 20 20 20 20  WINDOWS"..      
5f60: 20 20 69 66 20 28 28 72 63 20 3d 3d 20 53 51 4c    if ((rc == SQL
5f70: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
5f80: 20 26 26 20 72 65 73 65 74 29 0d 0a 20 20 20 20   && reset)..    
5f90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5fa0: 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61     rc = UnsafeNa
5fb0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5fc0: 74 65 33 5f 77 69 6e 33 32 5f 72 65 73 65 74 5f  te3_win32_reset_
5fd0: 68 65 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  heap();....     
5fe0: 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d         if (rc ==
5ff0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6000: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
6010: 20 20 20 20 20 20 72 65 73 65 74 4f 6b 4c 6f 63        resetOkLoc
6020: 61 6c 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  al = true;..    
6030: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6040: 20 69 66 20 28 28 72 63 20 3d 3d 20 53 51 4c 69   if ((rc == SQLi
6050: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
6060: 26 26 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20  && compact)..   
6070: 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e           rc = Un
6080: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6090: 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  s.sqlite3_win32_
60a0: 63 6f 6d 70 61 63 74 5f 68 65 61 70 28 72 65 66  compact_heap(ref
60b0: 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 29 3b   nLargestLocal);
60c0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
60d0: 20 69 66 20 28 72 65 73 65 74 20 7c 7c 20 63 6f   if (reset || co
60e0: 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20  mpact)..        
60f0: 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45      rc = SQLiteE
6100: 72 72 6f 72 43 6f 64 65 2e 4e 6f 74 46 6f 75 6e  rrorCode.NotFoun
6110: 64 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  d;..#endif....  
6120: 20 20 20 20 20 20 6e 46 72 65 65 20 3d 20 6e 46        nFree = nF
6130: 72 65 65 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20 20  reeLocal;..     
6140: 20 20 20 6e 4c 61 72 67 65 73 74 20 3d 20 6e 4c     nLargest = nL
6150: 61 72 67 65 73 74 4c 6f 63 61 6c 3b 0d 0a 20 20  argestLocal;..  
6160: 20 20 20 20 20 20 72 65 73 65 74 4f 6b 20 3d 20        resetOk = 
6170: 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 3b 0d 0a 0d  resetOkLocal;...
6180: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6190: 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  rc;..    }....  
61a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
61b0: 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77  .    /// Shutdow
61c0: 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67  n the SQLite eng
61d0: 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63  ine so that it c
61e0: 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20  an be restarted 
61f0: 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d 0a  with different..
6200: 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72      /// configur
6210: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 20  ation options.  
6220: 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74  We depend on aut
6230: 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  o initialization
6240: 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20   to recover...  
6250: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6260: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
6270: 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 73 74 61  ns>Returns a sta
6280: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 73  ndard SQLite res
6290: 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75 72  ult code.</retur
62a0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
62b0: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
62c0: 65 45 72 72 6f 72 43 6f 64 65 20 53 68 75 74 64  eErrorCode Shutd
62d0: 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  own()..    {..  
62e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61        return Sta
62f0: 74 69 63 53 68 75 74 64 6f 77 6e 28 66 61 6c 73  ticShutdown(fals
6300: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
6310: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6320: 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77  .    /// Shutdow
6330: 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67  n the SQLite eng
6340: 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63  ine so that it c
6350: 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20  an be restarted 
6360: 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d 0a  with different..
6370: 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72      /// configur
6380: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 20  ation options.  
6390: 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74  We depend on aut
63a0: 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  o initialization
63b0: 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20   to recover...  
63c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
63d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
63e0: 20 6e 61 6d 65 3d 22 64 69 72 65 63 74 6f 72 69   name="directori
63f0: 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  es">..    /// No
6400: 6e 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65 74 20  n-zero to reset 
6410: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
6420: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
6430: 74 6f 72 69 65 73 20 74 6f 20 74 68 65 69 72 0d  tories to their.
6440: 0a 20 20 20 20 2f 2f 2f 20 64 65 66 61 75 6c 74  .    /// default
6450: 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73   values, which s
6460: 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f  hould be null fo
6470: 72 20 62 6f 74 68 2e 20 20 54 68 69 73 20 70 61  r both.  This pa
6480: 72 61 6d 65 74 65 72 20 68 61 73 20 6e 6f 0d 0a  rameter has no..
6490: 20 20 20 20 2f 2f 2f 20 65 66 66 65 63 74 20 6f      /// effect o
64a0: 6e 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73 20 6f 70  n non-Windows op
64b0: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 73 2e  erating systems.
64c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
64d0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
64e0: 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 73  urns>Returns a s
64f0: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
6500: 65 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74  esult code.</ret
6510: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
6520: 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74  nal static SQLit
6530: 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69  eErrorCode Stati
6540: 63 53 68 75 74 64 6f 77 6e 28 0d 0a 20 20 20 20  cShutdown(..    
6550: 20 20 20 20 62 6f 6f 6c 20 64 69 72 65 63 74 6f      bool directo
6560: 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20 29 0d  ries..        ).
6570: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6580: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6590: 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  rc = SQLiteError
65a0: 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20  Code.Ok;....    
65b0: 20 20 20 20 69 66 20 28 64 69 72 65 63 74 6f 72      if (director
65c0: 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ies)..        {.
65d0: 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20  .#if WINDOWS..  
65e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
65f0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
6600: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
6610: 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e           rc = Un
6620: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6630: 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  s.sqlite3_win32_
6640: 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 31 2c  set_directory(1,
6650: 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20   null);....     
6660: 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d         if (rc ==
6670: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6680: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
6690: 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
66a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
66b0: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
66c0: 5f 64 69 72 65 63 74 6f 72 79 28 32 2c 20 6e 75  _directory(2, nu
66d0: 6c 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23 69 66  ll);..#else..#if
66e0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
66f0: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
6700: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
6710: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
6720: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
6730: 20 20 20 20 22 53 68 75 74 64 6f 77 6e 3a 20 43      "Shutdown: C
6740: 61 6e 6e 6f 74 20 72 65 73 65 74 20 64 69 72 65  annot reset dire
6750: 63 74 6f 72 69 65 73 20 6f 6e 20 74 68 69 73 20  ctories on this 
6760: 70 6c 61 74 66 6f 72 6d 2e 22 29 3b 0d 0a 23 65  platform.");..#e
6770: 6e 64 69 66 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ndif..#endif..  
6780: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6790: 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c     if (rc == SQL
67a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
67b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  ..            rc
67c0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
67d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
67e0: 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 0d 0a 20 20  hutdown();....  
67f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b        return rc;
6800: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
6810: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6820: 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73    /// Determines
6830: 20 69 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   if the associat
6840: 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63  ed native connec
6850: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f  tion handle is o
6860: 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  pen...    /// </
6870: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6880: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
6890: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
68a0: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
68b0: 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f  native connectio
68c0: 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f 70 65 6e  n handle is open
68d0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
68e0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
68f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
6900: 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20 20 20  l IsOpen()..    
6910: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
6920: 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  n (_sql != null)
6930: 20 26 26 20 21 5f 73 71 6c 2e 49 73 49 6e 76 61   && !_sql.IsInva
6940: 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e 49 73 43  lid && !_sql.IsC
6950: 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  losed;..    }...
6960: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
6970: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
6980: 72 6e 73 20 74 68 65 20 66 75 6c 6c 79 20 71 75  rns the fully qu
6990: 61 6c 69 66 69 65 64 20 70 61 74 68 20 61 6e 64  alified path and
69a0: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74   file name for t
69b0: 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
69c0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  n..    /// datab
69d0: 61 73 65 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20  ase, if any...  
69e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
69f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
6a00: 20 6e 61 6d 65 3d 22 64 62 4e 61 6d 65 22 3e 0d   name="dbName">.
6a10: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d  .    /// The nam
6a20: 65 20 6f 66 20 74 68 65 20 61 74 74 61 63 68 65  e of the attache
6a30: 64 20 64 61 74 61 62 61 73 65 20 74 6f 20 71 75  d database to qu
6a40: 65 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ery...    /// </
6a50: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
6a60: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
6a70: 2f 2f 20 54 68 65 20 66 75 6c 6c 79 20 71 75 61  // The fully qua
6a80: 6c 69 66 69 65 64 20 70 61 74 68 20 61 6e 64 20  lified path and 
6a90: 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68  file name for th
6aa0: 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  e currently open
6ab0: 20 64 61 74 61 62 61 73 65 2c 0d 0a 20 20 20 20   database,..    
6ac0: 2f 2f 2f 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20  /// if any...   
6ad0: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
6ae0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6af0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
6b00: 74 46 69 6c 65 4e 61 6d 65 28 73 74 72 69 6e 67  tFileName(string
6b10: 20 64 62 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d   dbName)..    {.
6b20: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71  .        if (_sq
6b30: 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l == null)..    
6b40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
6b50: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
6b60: 49 6e 74 50 74 72 20 70 44 62 4e 61 6d 65 20 3d  IntPtr pDbName =
6b70: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
6b80: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
6b90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6ba0: 20 20 20 20 20 70 44 62 4e 61 6d 65 20 3d 20 28       pDbName = (
6bb0: 64 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20  dbName != null) 
6bc0: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
6bd0: 20 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e     SQLiteString.
6be0: 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
6bf0: 72 69 6e 67 28 64 62 4e 61 6d 65 29 20 3a 20 49  ring(dbName) : I
6c00: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
6c10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6c20: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
6c30: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6c40: 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 66 69  ds.sqlite3_db_fi
6c50: 6c 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  lename(..       
6c60: 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70           _sql, p
6c70: 44 62 4e 61 6d 65 29 2c 20 2d 31 29 3b 0d 0a 20  DbName), -1);.. 
6c80: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6c90: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
6ca0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6cb0: 20 20 69 66 20 28 70 44 62 4e 61 6d 65 20 21 3d    if (pDbName !=
6cc0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
6cd0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
6cf0: 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
6d00: 70 44 62 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  pDbName);..     
6d10: 20 20 20 20 20 20 20 20 20 20 20 70 44 62 4e 61             pDbNa
6d20: 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  me = IntPtr.Zero
6d30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6d40: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
6d50: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
6d60: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
6d70: 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73 74 72   Open(string str
6d80: 46 69 6c 65 6e 61 6d 65 2c 20 73 74 72 69 6e 67  Filename, string
6d90: 20 76 66 73 4e 61 6d 65 2c 20 53 51 4c 69 74 65   vfsName, SQLite
6da0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
6db0: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c  connectionFlags,
6dc0: 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73   SQLiteOpenFlags
6dd0: 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20  Enum openFlags, 
6de0: 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c  int maxPoolSize,
6df0: 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a   bool usePool)..
6e00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d      {..      //.
6e10: 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20  .      // NOTE: 
6e20: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
6e30: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75  connection is cu
6e40: 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 61 74  rrently open, at
6e50: 74 65 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20 20  tempt to..      
6e60: 2f 2f 20 20 20 20 20 20 20 63 6c 6f 73 65 20 69  //       close i
6e70: 74 20 6e 6f 77 2e 20 20 54 68 69 73 20 6d 75 73  t now.  This mus
6e80: 74 20 62 65 20 64 6f 6e 65 20 62 65 63 61 75 73  t be done becaus
6e90: 65 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20  e the file name 
6ea0: 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  or..      //    
6eb0: 20 20 20 6f 74 68 65 72 20 70 61 72 61 6d 65 74     other paramet
6ec0: 65 72 73 20 74 68 61 74 20 6d 61 79 20 69 6d 70  ers that may imp
6ed0: 61 63 74 20 74 68 65 20 75 6e 64 65 72 6c 79 69  act the underlyi
6ee0: 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  ng database..   
6ef0: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 6e     //       conn
6f00: 65 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20  ection may have 
6f10: 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20  changed...      
6f20: 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73  //..      if (_s
6f30: 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73  ql != null) Clos
6f40: 65 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20  e(true);....    
6f50: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e    //..      // N
6f60: 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e  OTE: If the conn
6f70: 65 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 63  ection was not c
6f80: 6c 6f 73 65 64 20 73 75 63 63 65 73 73 66 75 6c  losed successful
6f90: 6c 79 2c 20 74 68 72 6f 77 20 61 6e 0d 0a 20 20  ly, throw an..  
6fa0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63      //       exc
6fb0: 65 70 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20  eption now...   
6fc0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20     //..      if 
6fd0: 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a  (_sql != null)..
6fe0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
6ff0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
7000: 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20  ion("connection 
7010: 68 61 6e 64 6c 65 20 69 73 20 73 74 69 6c 6c 20  handle is still 
7020: 61 63 74 69 76 65 22 29 3b 0d 0a 0d 0a 20 20 20  active");....   
7030: 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73     _usePool = us
7040: 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66  ePool;..      _f
7050: 69 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c  ileName = strFil
7060: 65 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 5f 66  ename;..      _f
7070: 6c 61 67 73 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  lags = connectio
7080: 6e 46 6c 61 67 73 3b 0d 0a 0d 0a 20 20 20 20 20  nFlags;....     
7090: 20 69 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20   if (usePool).. 
70a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
70b0: 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e  _sql = SQLiteCon
70c0: 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f  nectionPool.Remo
70d0: 76 65 28 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20  ve(strFilename, 
70e0: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74  maxPoolSize, out
70f0: 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d   _poolVersion);.
7100: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
7110: 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68  eConnection.OnCh
7120: 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20  anged(null, new 
7130: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
7140: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
7150: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
7160: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4f 70 65 6e  onEventType.Open
7170: 65 64 46 72 6f 6d 50 6f 6f 6c 2c 20 6e 75 6c 6c  edFromPool, null
7180: 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
7190: 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c       null, null,
71a0: 20 5f 73 71 6c 2c 20 73 74 72 46 69 6c 65 6e 61   _sql, strFilena
71b0: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
71c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
71d0: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c  typeof(SQLite3),
71e0: 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 76 66   strFilename, vf
71f0: 73 4e 61 6d 65 2c 20 63 6f 6e 6e 65 63 74 69 6f  sName, connectio
7200: 6e 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20  nFlags,..       
7210: 20 20 20 20 20 6f 70 65 6e 46 6c 61 67 73 2c 20       openFlags, 
7220: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 75 73 65  maxPoolSize, use
7230: 50 6f 6f 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69  Pool, _poolVersi
7240: 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23 69 66 20 21  on }));....#if !
7250: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
7260: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
7270: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63  ON..        Trac
7280: 65 2e 57 72 69 74 65 4c 69 6e 65 28 55 6e 73 61  e.WriteLine(Unsa
7290: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
72a0: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
72b0: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
72c0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
72d0: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
72e0: 20 20 20 20 22 4f 70 65 6e 20 28 50 6f 6f 6c 29      "Open (Pool)
72f0: 3a 20 7b 30 7d 22 2c 20 48 61 6e 64 6c 65 54 6f  : {0}", HandleTo
7300: 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e  String()));..#en
7310: 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  dif..      }....
7320: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
7330: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
7340: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
7350: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7360: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
7370: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
7380: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
7390: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
73a0: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
73b0: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
73c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 49 6e   {..          In
73d0: 74 50 74 72 20 64 62 20 3d 20 49 6e 74 50 74 72  tPtr db = IntPtr
73e0: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
73f0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
7400: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
7410: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
7420: 20 20 20 20 20 20 20 20 69 6e 74 20 65 78 74 46          int extF
7430: 75 6e 63 73 20 3d 20 28 28 63 6f 6e 6e 65 63 74  uncs = ((connect
7440: 69 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74  ionFlags & SQLit
7450: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7460: 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63  .NoExtensionFunc
7470: 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74 65  tions) != SQLite
7480: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7490: 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74  NoExtensionFunct
74a0: 69 6f 6e 73 29 20 3f 20 31 20 3a 20 30 3b 0d 0a  ions) ? 1 : 0;..
74b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
74c0: 65 78 74 46 75 6e 63 73 20 21 3d 20 30 29 0d 0a  extFuncs != 0)..
74d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
74e0: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
74f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7500: 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e  .sqlite3_open_in
7510: 74 65 72 6f 70 28 54 6f 55 54 46 38 28 73 74 72  terop(ToUTF8(str
7520: 46 69 6c 65 6e 61 6d 65 29 2c 20 54 6f 55 54 46  Filename), ToUTF
7530: 38 28 76 66 73 4e 61 6d 65 29 2c 20 6f 70 65 6e  8(vfsName), open
7540: 46 6c 61 67 73 2c 20 65 78 74 46 75 6e 63 73 2c  Flags, extFuncs,
7550: 20 72 65 66 20 64 62 29 3b 0d 0a 20 20 20 20 20   ref db);..     
7560: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7570: 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a    else..#endif..
7580: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7590: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
75a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
75b0: 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32  .sqlite3_open_v2
75c0: 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e  (ToUTF8(strFilen
75d0: 61 6d 65 29 2c 20 72 65 66 20 64 62 2c 20 6f 70  ame), ref db, op
75e0: 65 6e 46 6c 61 67 73 2c 20 54 6f 55 54 46 38 28  enFlags, ToUTF8(
75f0: 76 66 73 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20  vfsName));..    
7600: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
7610: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
7620: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
7630: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72  ON..          Tr
7640: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55 6e  ace.WriteLine(Un
7650: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7660: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
7670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43  .              C
7680: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
7690: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
76a0: 20 20 20 20 20 20 20 20 20 20 22 4f 70 65 6e 3a            "Open:
76b0: 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65   {0}", db));..#e
76c0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
76d0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
76e0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
76f0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7700: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c  xception(n, null
7710: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73  );..          _s
7720: 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  ql = new SQLiteC
7730: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28  onnectionHandle(
7740: 64 62 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20 20  db, true);..    
7750: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 6c      }..        l
7760: 6f 63 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a 20  ock (_sql) { /* 
7770: 48 41 43 4b 3a 20 46 6f 72 63 65 20 74 68 65 20  HACK: Force the 
7780: 53 79 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65 20  SyncBlock to be 
7790: 22 63 72 65 61 74 65 64 22 20 6e 6f 77 2e 20 2a  "created" now. *
77a0: 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  / }....        S
77b0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
77c0: 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20  OnChanged(null, 
77d0: 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  new ConnectionEv
77e0: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
77f0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
7800: 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
7810: 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  NewCriticalHandl
7820: 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  e, null,..      
7830: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
7840: 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74  , null, _sql, st
7850: 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f  rFilename, new o
7860: 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20  bject[] {..     
7870: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51         typeof(SQ
7880: 4c 69 74 65 33 29 2c 20 73 74 72 46 69 6c 65 6e  Lite3), strFilen
7890: 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 63 6f  ame, vfsName, co
78a0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a  nnectionFlags,..
78b0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e              open
78c0: 46 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69  Flags, maxPoolSi
78d0: 7a 65 2c 20 75 73 65 50 6f 6f 6c 20 7d 29 29 3b  ze, usePool }));
78e0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
78f0: 20 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74     // Bind funct
7900: 69 6f 6e 73 20 74 6f 20 74 68 69 73 20 63 6f 6e  ions to this con
7910: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79  nection.  If any
7920: 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69   previous functi
7930: 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20  ons of the same 
7940: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77  name..      // w
7950: 65 72 65 20 61 6c 72 65 61 64 79 20 62 6f 75 6e  ere already boun
7960: 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20  d, then the new 
7970: 62 69 6e 64 69 6e 67 73 20 72 65 70 6c 61 63 65  bindings replace
7980: 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20   the old...     
7990: 20 69 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e   if ((connection
79a0: 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  Flags & SQLiteCo
79b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
79c0: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 20 21  BindFunctions) !
79d0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
79e0: 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75  onFlags.NoBindFu
79f0: 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  nctions)..      
7a00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
7a10: 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e  (_functions == n
7a20: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7a30: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d      _functions =
7a40: 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
7a50: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
7a60: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
7a70: 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20  unction>();.... 
7a80: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
7a90: 20 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 53   (KeyValuePair<S
7aa0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
7ab0: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
7ac0: 6e 63 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20 20  nction> pair..  
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ae0: 69 6e 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  in SQLiteFunctio
7af0: 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28  n.BindFunctions(
7b00: 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e  this, connection
7b10: 46 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  Flags))..       
7b20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7b30: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 70      _functions[p
7b40: 61 69 72 2e 4b 65 79 5d 20 3d 20 70 61 69 72 2e  air.Key] = pair.
7b50: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
7b60: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
7b70: 20 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75 74        SetTimeout
7b80: 28 30 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e 4b  (0);..      GC.K
7b90: 65 65 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b 0d  eepAlive(_sql);.
7ba0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
7bb0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7bc0: 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29  void ClearPool()
7bd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
7be0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
7bf0: 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66  ool.ClearPool(_f
7c00: 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d  ileName);..    }
7c10: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
7c20: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
7c30: 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b  untPool()..    {
7c40: 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69 6f  ..        Dictio
7c50: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74  nary<string, int
7c60: 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b  > counts = null;
7c70: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70  ..        int op
7c80: 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20  enCount = 0;..  
7c90: 20 20 20 20 20 20 69 6e 74 20 63 6c 6f 73 65 43        int closeC
7ca0: 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ount = 0;..     
7cb0: 20 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e     int totalCoun
7cc0: 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  t = 0;....      
7cd0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
7ce0: 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73  onPool.GetCounts
7cf0: 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  (_fileName,..   
7d00: 20 20 20 20 20 20 20 20 20 72 65 66 20 63 6f 75           ref cou
7d10: 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f 75  nts, ref openCou
7d20: 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f 75  nt, ref closeCou
7d30: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
7d40: 20 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74 29   ref totalCount)
7d50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
7d60: 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d  urn totalCount;.
7d70: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
7d80: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7d90: 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28  void SetTimeout(
7da0: 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d  int nTimeoutMS).
7db0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e  .    {..      In
7dc0: 74 50 74 72 20 64 62 20 3d 20 5f 73 71 6c 3b 0d  tPtr db = _sql;.
7dd0: 0a 20 20 20 20 20 20 69 66 20 28 64 62 20 3d 3d  .      if (db ==
7de0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 74 68   IntPtr.Zero) th
7df0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
7e00: 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e  ception("no conn
7e10: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76  ection handle av
7e20: 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20  ailable");..    
7e30: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
7e40: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
7e50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7e60: 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64  3_busy_timeout(d
7e70: 62 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d  b, nTimeoutMS);.
7e80: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
7e90: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
7ea0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
7eb0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
7ec0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
7ed0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7ee0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7ef0: 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69  e bool Step(SQLi
7f00: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
7f10: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7f20: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
7f30: 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d  n;..      Random
7f40: 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20   rnd = null;..  
7f50: 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74 69      uint startti
7f60: 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72  ck = (uint)Envir
7f70: 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74  onment.TickCount
7f80: 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 74 69  ;..      uint ti
7f90: 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29 28 73  meout = (uint)(s
7fa0: 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f  tmt._command._co
7fb0: 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31  mmandTimeout * 1
7fc0: 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 52  000);....      R
7fd0: 65 73 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28  esetCancelCount(
7fe0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c  );....      whil
7ff0: 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20  e (true)..      
8000: 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  {..        try..
8010: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8020: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
8030: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
8040: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
8050: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
8060: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
8070: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
8080: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6e    {..          n
8090: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
80a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
80b0: 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tep(stmt._sqlite
80c0: 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20  _stmt);..       
80d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
80e0: 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72   (ShouldThrowFor
80f0: 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20  Cancel())..     
8100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8110: 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69    if ((n == SQLi
8120: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
8130: 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
8140: 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65      (n == SQLite
8150: 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c  ErrorCode.Row) |
8160: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
8170: 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45     (n == SQLiteE
8180: 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d  rrorCode.Done)).
8190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
81a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81b0: 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  n = SQLiteErrorC
81c0: 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a  ode.Interrupt;..
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
81e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
81f0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
8200: 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b  eption(n, null);
8210: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8220: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
8230: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
8240: 49 6e 74 65 72 72 75 70 74 29 20 72 65 74 75 72  Interrupt) retur
8250: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
8260: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
8270: 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20  eErrorCode.Row) 
8280: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
8290: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
82a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44  QLiteErrorCode.D
82b0: 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61 6c 73  one) return fals
82c0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
82d0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
82e0: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
82f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8300: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8310: 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   r;....         
8320: 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63 63   // An error occ
8330: 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74 20 74  urred, attempt t
8340: 6f 20 72 65 73 65 74 20 74 68 65 20 73 74 61 74  o reset the stat
8350: 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20 72  ement.  If the r
8360: 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65 63 61  eset worked beca
8370: 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  use the..       
8380: 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68 61 73     // schema has
8390: 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74 72 79   changed, re-try
83a0: 20 74 68 65 20 73 74 65 70 20 61 67 61 69 6e 2e   the step again.
83b0: 20 20 49 66 20 69 74 20 65 72 72 6f 72 65 64 20    If it errored 
83c0: 6f 75 72 20 62 65 63 61 75 73 65 20 74 68 65 20  our because the 
83d0: 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..      
83e0: 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64      // is locked
83f0: 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65 74 72  , then keep retr
8400: 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65 20 63  ying until the c
8410: 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f  ommand timeout o
8420: 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccurs...        
8430: 20 20 72 20 3d 20 52 65 73 65 74 28 73 74 6d 74    r = Reset(stmt
8440: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8450: 69 66 20 28 72 20 3d 3d 20 53 51 4c 69 74 65 45  if (r == SQLiteE
8460: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
8470: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
8480: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
8490: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
84a0: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
84b0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28 72       else if ((r
84c0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
84d0: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20  ode.Locked || r 
84e0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
84f0: 64 65 2e 42 75 73 79 29 20 26 26 20 73 74 6d 74  de.Busy) && stmt
8500: 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c  ._command != nul
8510: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
8520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
8530: 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20  Keep trying..   
8540: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e 64           if (rnd
8550: 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72   == null) // Fir
8560: 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e  st time we've en
8570: 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f  countered the lo
8580: 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
8590: 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64    rnd = new Rand
85a0: 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  om();....       
85b0: 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65       // If we've
85c0: 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63 6f   exceeded the co
85d0: 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c  mmand's timeout,
85e0: 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68 72   give up and thr
85f0: 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20  ow an error..   
8600: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75 69           if ((ui
8610: 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54  nt)Environment.T
8620: 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74  ickCount - start
8630: 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d  tick > timeout).
8640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8660: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8670: 63 65 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61  ception(r, GetLa
8680: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
8690: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
86a0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
86b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
86c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74             // Ot
86d0: 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f  herwise sleep fo
86e0: 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e  r a random amoun
86f0: 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20  t of time up to 
8700: 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20  150ms..         
8710: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65       System.Thre
8720: 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65  ading.Thread.Sle
8730: 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31  ep(rnd.Next(1, 1
8740: 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  50));..         
8750: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8760: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
8770: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
8780: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8790: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20 74  >..    /// Has t
87a0: 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73 74  he sqlite3_errst
87b0: 72 28 29 20 63 6f 72 65 20 6c 69 62 72 61 72 79  r() core library
87c0: 20 41 50 49 20 62 65 65 6e 20 63 68 65 63 6b 65   API been checke
87d0: 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20  d for yet?..    
87e0: 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20 69 74  /// If so, is it
87f0: 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f   present?..    /
8800: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
8810: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
8820: 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 65 72 72  c bool? have_err
8830: 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  str = null;.... 
8840: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
8850: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
8860: 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  s the error mess
8870: 61 67 65 20 66 6f 72 20 74 68 65 20 73 70 65 63  age for the spec
8880: 69 66 69 65 64 20 53 51 4c 69 74 65 20 72 65 74  ified SQLite ret
8890: 75 72 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d 0a  urn code using..
88a0: 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69      /// the sqli
88b0: 74 65 33 5f 65 72 72 73 74 72 28 29 20 66 75 6e  te3_errstr() fun
88c0: 63 74 69 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20 62  ction, falling b
88d0: 61 63 6b 20 74 6f 20 74 68 65 20 69 6e 74 65 72  ack to the inter
88e0: 6e 61 6c 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20 20  nal lookup..    
88f0: 2f 2f 2f 20 74 61 62 6c 65 20 69 66 20 6e 65 63  /// table if nec
8900: 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f  essary...    ///
8910: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8920: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
8930: 3d 22 72 63 22 3e 54 68 65 20 53 51 4c 69 74 65  ="rc">The SQLite
8940: 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 3c 2f 70   return code.</p
8950: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
8960: 72 65 74 75 72 6e 73 3e 54 68 65 20 65 72 72 6f  returns>The erro
8970: 72 20 6d 65 73 73 61 67 65 20 6f 72 20 6e 75 6c  r message or nul
8980: 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62  l if it cannot b
8990: 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e  e found.</return
89a0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
89b0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
89c0: 65 74 45 72 72 6f 72 53 74 72 69 6e 67 28 53 51  etErrorString(SQ
89d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
89e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
89f0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
8a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
8a10: 20 28 68 61 76 65 5f 65 72 72 73 74 72 20 3d 3d   (have_errstr ==
8a20: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8a30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8a40: 20 20 20 20 20 20 20 69 6e 74 20 76 65 72 73 69         int versi
8a50: 6f 6e 4e 75 6d 62 65 72 20 3d 20 53 51 4c 69 74  onNumber = SQLit
8a60: 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d  eVersionNumber;.
8a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8a80: 20 68 61 76 65 5f 65 72 72 73 74 72 20 3d 20 28   have_errstr = (
8a90: 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d  versionNumber >=
8aa0: 20 33 30 30 37 30 31 35 29 3b 0d 0a 20 20 20 20   3007015);..    
8ab0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8ac0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 62 6f           if ((bo
8ad0: 6f 6c 29 68 61 76 65 5f 65 72 72 73 74 72 29 0d  ol)have_errstr).
8ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b00: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
8b10: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8b20: 2e 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28  .sqlite3_errstr(
8b30: 72 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rc);....        
8b40: 20 20 20 20 20 20 20 20 69 66 20 28 70 74 72 20          if (ptr 
8b50: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
8b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8b70: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
8b80: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
8b90: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
8ba0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
8bb0: 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 69  arshal.PtrToStri
8bc0: 6e 67 41 6e 73 69 28 70 74 72 29 3b 0d 0a 23 65  ngAnsi(ptr);..#e
8bd0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
8be0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8bf0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72  UTF8ToString(ptr
8c00: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
8c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c20: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
8c30: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
8c40: 20 20 20 20 20 63 61 74 63 68 20 28 45 6e 74 72       catch (Entr
8c50: 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78  yPointNotFoundEx
8c60: 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  ception)..      
8c70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8c80: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
8c90: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
8ca0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c        return Fal
8cb0: 6c 62 61 63 6b 47 65 74 45 72 72 6f 72 53 74 72  lbackGetErrorStr
8cc0: 69 6e 67 28 72 63 29 3b 0d 0a 20 20 20 20 7d 0d  ing(rc);..    }.
8cd0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
8ce0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61  ary>..    /// Ha
8cf0: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
8d00: 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 29 20 63 6f  mt_readonly() co
8d10: 72 65 20 6c 69 62 72 61 72 79 20 41 50 49 20 62  re library API b
8d20: 65 65 6e 20 63 68 65 63 6b 65 64 20 66 6f 72 20  een checked for 
8d30: 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66  yet?..    /// If
8d40: 20 73 6f 2c 20 69 73 20 69 74 20 70 72 65 73 65   so, is it prese
8d50: 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt?..    /// </s
8d60: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
8d70: 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
8d80: 3f 20 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64  ? have_stmt_read
8d90: 6f 6e 6c 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  only = null;....
8da0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8db0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
8dc0: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
8dd0: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 74 61  he specified sta
8de0: 74 65 6d 65 6e 74 20 69 73 20 72 65 61 64 2d 6f  tement is read-o
8df0: 6e 6c 79 20 69 6e 20 6e 61 74 75 72 65 2e 0d 0a  nly in nature...
8e00: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8e10: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
8e20: 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54  am name="stmt">T
8e30: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  he statement to 
8e40: 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  check.</param>..
8e50: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
8e60: 3e 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74  >True if the out
8e70: 65 72 20 71 75 65 72 79 20 69 73 20 72 65 61 64  er query is read
8e80: 2d 6f 6e 6c 79 2e 3c 2f 72 65 74 75 72 6e 73 3e  -only.</returns>
8e90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8ea0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 52  verride bool IsR
8eb0: 65 61 64 4f 6e 6c 79 28 0d 0a 20 20 20 20 20 20  eadOnly(..      
8ec0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
8ed0: 74 20 73 74 6d 74 0d 0a 20 20 20 20 20 20 20 20  t stmt..        
8ee0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8ef0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
8f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
8f10: 20 28 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64   (have_stmt_read
8f20: 6f 6e 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  only == null).. 
8f30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
8f50: 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20  t versionNumber 
8f60: 3d 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  = SQLiteVersionN
8f70: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
8f80: 20 20 20 20 20 20 20 20 68 61 76 65 5f 73 74 6d          have_stm
8f90: 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 28 76 65  t_readonly = (ve
8fa0: 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33  rsionNumber >= 3
8fb0: 30 30 37 30 30 34 29 3b 0d 0a 20 20 20 20 20 20  007004);..      
8fc0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8fd0: 20 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c         if ((bool
8fe0: 29 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f  )have_stmt_reado
8ff0: 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nly)..          
9000: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9010: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
9020: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9030: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65 61  sqlite3_stmt_rea
9040: 64 6f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  donly(..        
9050: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74              stmt
9060: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 20 21  ._sqlite_stmt) !
9070: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
9080: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
9090: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
90a0: 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e  ntryPointNotFoun
90b0: 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20  dException)..   
90c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
90d0: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
90e0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
90f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
9100: 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 45 3a 20  false; /* NOTE: 
9110: 55 6e 6b 6e 6f 77 6e 2c 20 61 73 73 75 6d 65 20  Unknown, assume 
9120: 66 61 6c 73 65 2e 20 2a 2f 0d 0a 20 20 20 20 7d  false. */..    }
9130: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
9140: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
9150: 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28  ErrorCode Reset(
9160: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
9170: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
9180: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
9190: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
91a0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
91b0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
91c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
91d0: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
91e0: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
91f0: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a  _stmt);..#else..
9200: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
9210: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9220: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
9230: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
9240: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
9250: 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d   // If the schem
9260: 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61  a changed, try a
9270: 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69 74  nd re-prepare it
9280: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
9290: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
92a0: 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20  .Schema)..      
92b0: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65  {..        // Re
92c0: 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73  create a dummy s
92d0: 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
92e0: 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20 6e    string str = n
92f0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 75 73  ull;..        us
9300: 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74 65  ing (SQLiteState
9310: 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61  ment tmp = Prepa
9320: 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73  re(null, stmt._s
9330: 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c  qlStatement, nul
9340: 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f  l, (uint)(stmt._
9350: 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64  command._command
9360: 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c  Timeout * 1000),
9370: 20 72 65 66 20 73 74 72 29 29 0d 0a 20 20 20 20   ref str))..    
9380: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9390: 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65   // Finalize the
93a0: 20 65 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d   existing statem
93b0: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ent..          s
93c0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
93d0: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
93e0: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69         // Reassi
93f0: 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65  gn a new stateme
9400: 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  nt pointer to th
9410: 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20  e old statement 
9420: 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74 65  and clear the te
9430: 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20  mporary one..   
9440: 20 20 20 20 20 20 20 69 66 20 28 74 6d 70 20 21         if (tmp !
9450: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9460: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9470: 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73    stmt._sqlite_s
9480: 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74  tmt = tmp._sqlit
9490: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
94a0: 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65       tmp._sqlite
94b0: 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  _stmt = null;.. 
94c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
94d0: 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70          // Reapp
94e0: 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20  ly parameters.. 
94f0: 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69           stmt.Bi
9500: 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d  ndParameters();.
9510: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
9520: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
9530: 65 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f  eErrorCode.Unkno
9540: 77 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73  wn; // Reset was
9550: 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61   OK, with schema
9560: 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d   change..      }
9570: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ..      else if 
9580: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
9590: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
95a0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
95b0: 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20  Code.Busy)..    
95c0: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d      return n;...
95d0: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
95e0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
95f0: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72  Ok)..        thr
9600: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
9610: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
9620: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
9630: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f      return n; //
9640: 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f   We reset OK, no
9650: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d   schema changes.
9660: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9670: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9680: 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72  string GetLastEr
9690: 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ror()..    {..  
96a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
96b0: 4c 61 73 74 45 72 72 6f 72 28 6e 75 6c 6c 29 3b  LastError(null);
96c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
96d0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
96e0: 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45   string GetLastE
96f0: 72 72 6f 72 28 73 74 72 69 6e 67 20 64 65 66 56  rror(string defV
9700: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
9710: 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73        string res
9720: 75 6c 74 20 3d 20 53 51 4c 69 74 65 42 61 73 65  ult = SQLiteBase
9730: 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28 5f 73  .GetLastError(_s
9740: 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ql, _sql);..    
9750: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
9760: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73  sNullOrEmpty(res
9770: 75 6c 74 29 29 20 72 65 73 75 6c 74 20 3d 20 64  ult)) result = d
9780: 65 66 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  efValue;..      
9790: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
97a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9810: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 51 75  ..    #region Qu
9820: 65 72 79 20 44 69 61 67 6e 6f 73 74 69 63 73 20  ery Diagnostics 
9830: 53 75 70 70 6f 72 74 0d 0a 23 69 66 20 21 50 4c  Support..#if !PL
9840: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
9850: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f 2f  AMEWORK..    ///
9860: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
9870: 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69  /// This field i
9880: 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74  s used to keep t
9890: 72 61 63 6b 20 6f 66 20 77 68 65 74 68 65 72 20  rack of whether 
98a0: 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20  or not the..    
98b0: 2f 2f 2f 20 22 53 51 4c 69 74 65 5f 46 6f 72 63  /// "SQLite_Forc
98c0: 65 4c 6f 67 50 72 65 70 61 72 65 22 20 65 6e 76  eLogPrepare" env
98d0: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
98e0: 65 20 68 61 73 20 62 65 65 6e 20 71 75 65 72 69  e has been queri
98f0: 65 64 2e 20 20 49 66 20 73 6f 2c 0d 0a 20 20 20  ed.  If so,..   
9900: 20 2f 2f 2f 20 69 74 20 77 69 6c 6c 20 6f 6e 6c   /// it will onl
9910: 79 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  y be non-zero if
9920: 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74   the environment
9930: 20 76 61 72 69 61 62 6c 65 20 77 61 73 20 70 72   variable was pr
9940: 65 73 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  esent...    /// 
9950: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9960: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
9970: 6f 6f 6c 3f 20 66 6f 72 63 65 4c 6f 67 50 72 65  ool? forceLogPre
9980: 70 61 72 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  pare = null;....
9990: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
99a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99f0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
9a00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9a10: 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
9a20: 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65  all calls to pre
9a30: 70 61 72 65 20 61 20 53 51 4c 20 71 75 65 72 79  pare a SQL query
9a40: 20 77 69 6c 6c 20 62 65 20 6c 6f 67 67 65 64 2c   will be logged,
9a50: 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 67 61 72 64  ..    /// regard
9a60: 6c 65 73 73 20 6f 66 20 74 68 65 20 66 6c 61 67  less of the flag
9a70: 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69  s for the associ
9a80: 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  ated connection.
9a90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
9aa0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
9ab0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
9ac0: 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6c 6f 67   Non-zero to log
9ad0: 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72   all calls to pr
9ae0: 65 70 61 72 65 20 61 20 53 51 4c 20 71 75 65 72  epare a SQL quer
9af0: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  y...    /// </re
9b00: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76  turns>..    priv
9b10: 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
9b20: 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28  ForceLogPrepare(
9b30: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9b40: 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
9b50: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
9b60: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 6f            if (fo
9b70: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 3d  rceLogPrepare ==
9b80: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9b90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9ba0: 20 20 20 20 20 20 20 69 66 20 28 55 6e 73 61 66         if (Unsaf
9bb0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47  eNativeMethods.G
9bc0: 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65 28 0d  etSettingValue(.
9bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9be0: 20 20 20 20 20 20 20 20 20 22 53 51 4c 69 74 65           "SQLite
9bf0: 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65  _ForceLogPrepare
9c00: 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c 6c  ", null) != null
9c10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9c20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9c30: 20 20 20 20 20 20 20 20 20 20 66 6f 72 63 65 4c            forceL
9c40: 6f 67 50 72 65 70 61 72 65 20 3d 20 74 72 75 65  ogPrepare = true
9c50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9c60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
9c70: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ca0: 20 20 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61     forceLogPrepa
9cb0: 72 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  re = false;..   
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9cd0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
9cf0: 75 72 6e 20 28 62 6f 6f 6c 29 66 6f 72 63 65 4c  urn (bool)forceL
9d00: 6f 67 50 72 65 70 61 72 65 3b 0d 0a 20 20 20 20  ogPrepare;..    
9d10: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
9d20: 6e 64 69 66 0d 0a 20 20 20 20 23 65 6e 64 72 65  ndif..    #endre
9d30: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
9d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9da0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9db0: 72 69 64 65 20 53 51 4c 69 74 65 53 74 61 74 65  ride SQLiteState
9dc0: 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c  ment Prepare(SQL
9dd0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e  iteConnection cn
9de0: 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c  n, string strSql
9df0: 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  , SQLiteStatemen
9e00: 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74  t previous, uint
9e10: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20   timeoutMS, ref 
9e20: 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e  string strRemain
9e30: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9e40: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
9e50: 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c  llOrEmpty(strSql
9e60: 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ))..      {..   
9e70: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
9e80: 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65   // NOTE: SQLite
9e90: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
9ea0: 74 20 74 68 65 20 63 6f 6e 63 65 70 74 20 6f 66  t the concept of
9eb0: 20 73 65 70 61 72 61 74 65 20 73 63 68 65 6d 61   separate schema
9ec0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  s..        //   
9ed0: 20 20 20 20 69 6e 20 6f 6e 65 20 64 61 74 61 62      in one datab
9ee0: 61 73 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  ase; therefore, 
9ef0: 72 65 6d 6f 76 65 20 74 68 65 20 62 61 73 65 20  remove the base 
9f00: 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20  schema name..   
9f10: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73       //       us
9f20: 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74  ed to smooth int
9f30: 65 67 72 61 74 69 6f 6e 20 77 69 74 68 20 74 68  egration with th
9f40: 65 20 62 61 73 65 20 2e 4e 45 54 20 46 72 61 6d  e base .NET Fram
9f50: 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f  ework..        /
9f60: 2f 20 20 20 20 20 20 20 64 61 74 61 20 63 6c 61  /       data cla
9f70: 73 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sses...        /
9f80: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
9f90: 67 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  g baseSchemaName
9fa0: 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29   = (cnn != null)
9fb0: 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65   ? cnn._baseSche
9fc0: 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a  maName : null;..
9fd0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 53  ..        if (!S
9fe0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
9ff0: 70 74 79 28 62 61 73 65 53 63 68 65 6d 61 4e 61  pty(baseSchemaNa
a000: 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  me))..        {.
a010: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71  .          strSq
a020: 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61  l = strSql.Repla
a030: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
a040: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
a050: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
a060: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
a070: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
a080: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a090: 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62 61 73 65 53   "[{0}].", baseS
a0a0: 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69  chemaName), Stri
a0b0: 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
a0c0: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
a0d0: 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28   strSql.Replace(
a0e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a0f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a100: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
a110: 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76  (CultureInfo.Inv
a120: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  ariantCulture,..
a130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
a140: 30 7d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61  0}.", baseSchema
a150: 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d  Name), String.Em
a160: 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  pty);..        }
a170: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
a180: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
a190: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 20 3d  ionFlags flags =
a1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 28 63 6e 6e  ..          (cnn
a1b0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e   != null) ? cnn.
a1c0: 46 6c 61 67 73 20 3a 20 53 51 4c 69 74 65 43 6f  Flags : SQLiteCo
a1d0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65  nnectionFlags.De
a1e0: 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  fault;....      
a1f0: 69 66 20 28 0d 0a 23 69 66 20 21 50 4c 41 54 46  if (..#if !PLATF
a200: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
a210: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
a220: 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28  ForceLogPrepare(
a230: 29 20 7c 7c 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ) ||..#endif..  
a240: 20 20 20 20 20 20 20 20 28 28 66 6c 61 67 73 20          ((flags 
a250: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
a260: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61  onFlags.LogPrepa
a270: 72 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  re) == SQLiteCon
a280: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
a290: 50 72 65 70 61 72 65 29 29 0d 0a 20 20 20 20 20  Prepare))..     
a2a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
a2b0: 20 28 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c   ((strSql == nul
a2c0: 6c 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65  l) || (strSql.Le
a2d0: 6e 67 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73  ngth == 0) || (s
a2e0: 74 72 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e  trSql.Trim().Len
a2f0: 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20  gth == 0))..    
a300: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
a310: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22  Log.LogMessage("
a320: 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68  Preparing {<noth
a330: 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20  ing>}...");..   
a340: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
a350: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
a360: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
a370: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a380: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
a390: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
a3a0: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
a3b0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
a3c0: 20 22 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30   "Preparing {{{0
a3d0: 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29  }}}...", strSql)
a3e0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  );..      }.... 
a3f0: 20 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74       IntPtr stmt
a400: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
a410: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74  .      IntPtr pt
a420: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
a430: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
a440: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  = 0;..      SQLi
a450: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
a460: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a470: 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69  Schema;..      i
a480: 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d  nt retries = 0;.
a490: 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 78 69 6d  .      int maxim
a4a0: 75 6d 52 65 74 72 69 65 73 20 3d 20 28 63 6e 6e  umRetries = (cnn
a4b0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e   != null) ? cnn.
a4c0: 5f 70 72 65 70 61 72 65 52 65 74 72 69 65 73 20  _prepareRetries 
a4d0: 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  : SQLiteConnecti
a4e0: 6f 6e 2e 44 65 66 61 75 6c 74 50 72 65 70 61 72  on.DefaultPrepar
a4f0: 65 52 65 74 72 69 65 73 3b 0d 0a 20 20 20 20 20  eRetries;..     
a500: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
a510: 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20  F8(strSql);..   
a520: 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 64 65     string typede
a530: 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  fs = null;..    
a540: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
a550: 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  t cmd = null;.. 
a560: 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20       Random rnd 
a570: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75  = null;..      u
a580: 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20  int starttick = 
a590: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
a5a0: 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a  t.TickCount;....
a5b0: 20 20 20 20 20 20 52 65 73 65 74 43 61 6e 63 65        ResetCance
a5c0: 6c 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20  lCount();....   
a5d0: 20 20 20 47 43 48 61 6e 64 6c 65 20 68 61 6e 64     GCHandle hand
a5e0: 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c  le = GCHandle.Al
a5f0: 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c 65 54  loc(b, GCHandleT
a600: 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20  ype.Pinned);..  
a610: 20 20 20 20 49 6e 74 50 74 72 20 70 73 71 6c 20      IntPtr psql 
a620: 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50  = handle.AddrOfP
a630: 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a  innedObject();..
a640: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
a650: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 73 74 61 74  ementHandle stat
a660: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75  ementHandle = nu
a670: 6c 6c 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a  ll;..      try..
a680: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a690: 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51   while ((n == SQ
a6a0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63  LiteErrorCode.Sc
a6b0: 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c  hema || n == SQL
a6c0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63  iteErrorCode.Loc
a6d0: 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69  ked || n == SQLi
a6e0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79  teErrorCode.Busy
a6f0: 29 20 26 26 20 72 65 74 72 69 65 73 20 3c 20 6d  ) && retries < m
a700: 61 78 69 6d 75 6d 52 65 74 72 69 65 73 29 0d 0a  aximumRetries)..
a710: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a720: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
a730: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a740: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
a750: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ...          }..
a760: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
a770: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
a780: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
a790: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
a7a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a7b0: 20 20 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72     stmt = IntPtr
a7c0: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
a7d0: 20 20 20 20 70 74 72 20 3d 20 49 6e 74 50 74 72      ptr = IntPtr
a7e0: 2e 5a 65 72 6f 3b 0d 0a 0d 0a 23 69 66 20 21 53  .Zero;....#if !S
a7f0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
a800: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20              len 
a810: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
a820: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
a830: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a840: 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f  3_prepare_intero
a850: 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  p(_sql, psql, b.
a860: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20  Length - 1, ref 
a870: 73 74 6d 74 2c 20 72 65 66 20 70 74 72 2c 20 72  stmt, ref ptr, r
a880: 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ef len);..#else.
a890: 0a 23 69 66 20 55 53 45 5f 50 52 45 50 41 52 45  .#if USE_PREPARE
a8a0: 5f 56 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _V2..           
a8b0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
a8c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a8d0: 5f 70 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c  _prepare_v2(_sql
a8e0: 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68  , psql, b.Length
a8f0: 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20   - 1, ref stmt, 
a900: 72 65 66 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65  ref ptr);..#else
a910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
a920: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
a930: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72  thods.sqlite3_pr
a940: 65 70 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c  epare(_sql, psql
a950: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
a960: 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74  ref stmt, ref pt
a970: 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  r);..#endif..   
a980: 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d           len = -
a990: 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  1;..#endif....#i
a9a0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
a9b0: 30 20 26 26 20 54 52 41 43 45 5f 53 54 41 54 45  0 && TRACE_STATE
a9c0: 4d 45 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20  MENT..          
a9d0: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
a9e0: 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
a9f0: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
aa00: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
aa10: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
aa20: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
aa30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aa40: 20 20 22 50 72 65 70 61 72 65 20 28 7b 30 7d 29    "Prepare ({0})
aa50: 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29  : {1}", n, stmt)
aa60: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
aa70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
aa80: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
aa90: 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73 74 6d 74  ode.Ok) && (stmt
aaa0: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
aab0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
aac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aad0: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e  if (statementHan
aae0: 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 73 74 61  dle != null) sta
aaf0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2e 44 69 73  tementHandle.Dis
ab00: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
ab10: 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
ab20: 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c  Handle = new SQL
ab30: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
ab40: 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 3b 0d  le(_sql, stmt);.
ab50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ab60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
ab70: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61           if (sta
ab80: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20  tementHandle != 
ab90: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
aba0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
abb0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
abc0: 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
abd0: 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
abe0: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
abf0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
ac00: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79  onnectionEventTy
ac10: 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61  pe.NewCriticalHa
ac20: 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  ndle, null, null
ac30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ac40: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 73 74 61   null, null, sta
ac50: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74  tementHandle, st
ac60: 72 53 71 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  rSql, new object
ac70: 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
ac80: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
ac90: 65 33 29 2c 20 63 6e 6e 2c 20 73 74 72 53 71 6c  e3), cnn, strSql
aca0: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
acb0: 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a 20 20 20 20  outMS }));..    
acc0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
acd0: 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54       if (ShouldT
ace0: 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29  hrowForCancel())
acf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ad10: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
ad20: 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20  orCode.Ok) ||.. 
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad40: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
ad50: 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a  orCode.Row) ||..
ad60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad70: 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72    (n == SQLiteEr
ad80: 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a  rorCode.Done))..
ad90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
ada0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
adb0: 20 20 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72     n = SQLiteErr
adc0: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
add0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
ade0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
adf0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
ae00: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
ae10: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
ae20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ae30: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
ae40: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
ae50: 72 75 70 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rupt)..         
ae60: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
ae70: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
ae80: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
ae90: 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20  de.Schema)..    
aea0: 20 20 20 20 20 20 20 20 72 65 74 72 69 65 73 2b          retries+
aeb0: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  +;..          el
aec0: 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
aed0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
aee0: 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  r)..          {.
aef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
af00: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
af10: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20  GetLastError(), 
af20: 22 6e 65 61 72 20 5c 22 54 59 50 45 53 5c 22 3a  "near \"TYPES\":
af30: 20 73 79 6e 74 61 78 20 65 72 72 6f 72 22 2c 20   syntax error", 
af40: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
af50: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
af60: 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  se) == 0)..     
af70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
af80: 20 20 20 20 20 20 20 20 69 6e 74 20 70 6f 73 20          int pos 
af90: 3d 20 73 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66  = strSql.IndexOf
afa0: 28 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  (';');..        
afb0: 20 20 20 20 20 20 69 66 20 28 70 6f 73 20 3d 3d        if (pos ==
afc0: 20 2d 31 29 20 70 6f 73 20 3d 20 73 74 72 53 71   -1) pos = strSq
afd0: 6c 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d  l.Length - 1;...
afe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
aff0: 79 70 65 64 65 66 73 20 3d 20 73 74 72 53 71 6c  ypedefs = strSql
b000: 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 70 6f  .Substring(0, po
b010: 73 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20  s + 1);..       
b020: 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20         strSql = 
b030: 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67  strSql.Substring
b040: 28 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20  (pos + 1);....  
b050: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52              strR
b060: 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20  emain = "";.... 
b070: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
b080: 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20  le (cmd == null 
b090: 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  && strSql.Length
b0a0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
b0b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b0c0: 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72          cmd = Pr
b0d0: 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71  epare(cnn, strSq
b0e0: 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d  l, previous, tim
b0f0: 65 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72 52  eoutMS, ref strR
b100: 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20  emain);..       
b110: 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20           strSql 
b120: 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20  = strRemain;..  
b130: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
b150: 66 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d  f (cmd != null).
b160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b170: 20 63 6d 64 2e 53 65 74 54 79 70 65 73 28 74 79   cmd.SetTypes(ty
b180: 70 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20  pedefs);....    
b190: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b1a0: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20   cmd;..         
b1b0: 20 20 20 7d 0d 0a 23 69 66 20 28 4e 45 54 5f 33     }..#if (NET_3
b1c0: 35 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e  5 || NET_40 || N
b1d0: 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31  ET_45 || NET_451
b1e0: 20 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c 20 4e   || NET_452 || N
b1f0: 45 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34 36 31  ET_46 || NET_461
b200: 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43  ) && !PLATFORM_C
b210: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
b220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
b230: 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e 67 53  e if (_buildingS
b240: 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65 20 26  chema == false &
b250: 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65  & String.Compare
b260: 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c  (GetLastError(),
b270: 20 30 2c 20 22 6e 6f 20 73 75 63 68 20 74 61 62   0, "no such tab
b280: 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d 41 22  le: TEMP.SCHEMA"
b290: 2c 20 30 2c 20 32 36 2c 20 53 74 72 69 6e 67 43  , 0, 26, StringC
b2a0: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
b2b0: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
b2c0: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
b2d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b2e0: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b   strRemain = "";
b2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b300: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
b310: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
b320: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
b330: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51               ISQ
b350: 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73  LiteSchemaExtens
b360: 69 6f 6e 73 20 65 78 74 20 3d 20 28 28 49 53 65  ions ext = ((ISe
b370: 72 76 69 63 65 50 72 6f 76 69 64 65 72 29 53 51  rviceProvider)SQ
b380: 4c 69 74 65 46 61 63 74 6f 72 79 2e 49 6e 73 74  LiteFactory.Inst
b390: 61 6e 63 65 29 2e 47 65 74 53 65 72 76 69 63 65  ance).GetService
b3a0: 28 74 79 70 65 6f 66 28 49 53 51 4c 69 74 65 53  (typeof(ISQLiteS
b3b0: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29  chemaExtensions)
b3c0: 29 20 61 73 20 49 53 51 4c 69 74 65 53 63 68 65  ) as ISQLiteSche
b3d0: 6d 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d  maExtensions;...
b3e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b3f0: 20 69 66 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c   if (ext != null
b400: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b410: 20 20 20 20 20 65 78 74 2e 42 75 69 6c 64 54 65       ext.BuildTe
b420: 6d 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a  mpSchema(cnn);..
b430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b440: 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20    while (cmd == 
b450: 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c  null && strSql.L
b460: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
b470: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b490: 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63   cmd = Prepare(c
b4a0: 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76  nn, strSql, prev
b4b0: 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c  ious, timeoutMS,
b4c0: 20 72 65 66 20 73 74 72 52 65 6d 61 69 6e 29 3b   ref strRemain);
b4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b4e0: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
b4f0: 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20  Remain;..       
b500: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b520: 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20  turn cmd;..     
b530: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b540: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
b550: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
b560: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b570: 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68      _buildingSch
b580: 65 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ema = false;..  
b590: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b5a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
b5b0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
b5c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
b5d0: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
b5e0: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
b5f0: 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  d || n == SQLite
b600: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20  ErrorCode.Busy) 
b610: 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c  // Locked -- del
b620: 61 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ay a small amoun
b630: 74 20 62 65 66 6f 72 65 20 72 65 74 72 79 69 6e  t before retryin
b640: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  g..          {..
b650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b              // K
b660: 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20  eep trying..    
b670: 20 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20          if (rnd 
b680: 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73  == null) // Firs
b690: 74 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63  t time we've enc
b6a0: 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63  ountered the loc
b6b0: 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  k..             
b6c0: 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f   rnd = new Rando
b6d0: 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  m();....        
b6e0: 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20      // If we've 
b6f0: 65 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d  exceeded the com
b700: 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20  mand's timeout, 
b710: 67 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f  give up and thro
b720: 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20  w an error..    
b730: 20 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e          if ((uin
b740: 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69  t)Environment.Ti
b750: 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74  ckCount - startt
b760: 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29  ick > timeoutMS)
b770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
b780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
b790: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
b7a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
b7b0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
b7c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b7d0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
b7e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
b800: 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66  therwise sleep f
b810: 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75  or a random amou
b820: 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f  nt of time up to
b830: 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20   150ms..        
b840: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72        System.Thr
b850: 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c  eading.Thread.Sl
b860: 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20  eep(rnd.Next(1, 
b870: 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  150));..        
b880: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b890: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
b8a0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 68 6f  .        if (Sho
b8b0: 75 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65  uldThrowForCance
b8c0: 6c 28 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  l())..        {.
b8d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
b8e0: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
b8f0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20  orCode.Ok) ||.. 
b900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
b910: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
b920: 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20  Code.Row) ||..  
b930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e                (n
b940: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
b950: 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20  ode.Done))..    
b960: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b970: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 53             n = S
b980: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49  QLiteErrorCode.I
b990: 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20 20 20 20  nterrupt;..     
b9a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b9b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
b9c0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
b9d0: 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  n(n, null);..   
b9e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b9f0: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
ba00: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
ba10: 72 75 70 74 29 20 72 65 74 75 72 6e 20 6e 75 6c  rupt) return nul
ba20: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  l;..        if (
ba30: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
ba40: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
ba50: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
ba60: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
ba70: 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
ba80: 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55 54    strRemain = UT
ba90: 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20  F8ToString(ptr, 
baa0: 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  len);....       
bab0: 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61   if (statementHa
bac0: 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63 6d  ndle != null) cm
bad0: 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74  d = new SQLiteSt
bae0: 61 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c  atement(this, fl
baf0: 61 67 73 2c 20 73 74 61 74 65 6d 65 6e 74 48 61  ags, statementHa
bb00: 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75 62  ndle, strSql.Sub
bb10: 73 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71 6c  string(0, strSql
bb20: 2e 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65 6d  .Length - strRem
bb30: 61 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72 65  ain.Length), pre
bb40: 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  vious);....     
bb50: 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a     return cmd;..
bb60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 66        }..      f
bb70: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b 0d  inally..      {.
bb80: 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e  .        handle.
bb90: 46 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d  Free();..      }
bba0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
bbb0: 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20  rotected static 
bbc0: 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c  void LogBind(SQL
bbd0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
bbe0: 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69  le handle, int i
bbf0: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
bc00: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
bc10: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
bc20: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
bc30: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
bc40: 61 67 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65  age(UnsafeNative
bc50: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
bc60: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
bc70: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
bc80: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
bca0: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
bcb0: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
bcc0: 20 61 73 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20   as NULL...",.. 
bcd0: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
bce0: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 29 29  eIntPtr, index))
bcf0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
bd00: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
bd10: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
bd20: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
bd30: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
bd40: 69 6e 64 65 78 2c 20 56 61 6c 75 65 54 79 70 65  index, ValueType
bd50: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
bd60: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
bd70: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
bd80: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
bd90: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
bda0: 73 73 61 67 65 28 55 6e 73 61 66 65 4e 61 74 69  ssage(UnsafeNati
bdb0: 76 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  veMethods.String
bdc0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
bdd0: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
bde0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
bdf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
be00: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
be10: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
be20: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
be30: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
be40: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
be50: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
be60: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 2e 47  , index, value.G
be70: 65 74 54 79 70 65 28 29 2c 20 76 61 6c 75 65 29  etType(), value)
be80: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
be90: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
bea0: 73 74 72 69 6e 67 20 46 6f 72 6d 61 74 44 61 74  string FormatDat
beb0: 65 54 69 6d 65 28 44 61 74 65 54 69 6d 65 20 76  eTime(DateTime v
bec0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
bed0: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
bee0: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
bef0: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29   StringBuilder()
bf00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 73  ;....        res
bf10: 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65  ult.Append(value
bf20: 2e 54 6f 53 74 72 69 6e 67 28 22 79 79 79 79 2d  .ToString("yyyy-
bf30: 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46  MM-ddTHH:mm:ss.F
bf40: 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20 20 20  FFFFFFK"));..   
bf50: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
bf60: 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20  nd(' ');..      
bf70: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
bf80: 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20  value.Kind);..  
bf90: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
bfa0: 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20  end(' ');..     
bfb0: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
bfc0: 28 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b 0d 0a  (value.Ticks);..
bfd0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
bfe0: 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67   result.ToString
bff0: 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ();..    }....  
c000: 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74    protected stat
c010: 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28  ic void LogBind(
c020: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
c030: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e  andle handle, in
c040: 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d  t index, DateTim
c050: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
c060: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
c070: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
c080: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
c090: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
c0a0: 65 73 73 61 67 65 28 55 6e 73 61 66 65 4e 61 74  essage(UnsafeNat
c0b0: 69 76 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  iveMethods.Strin
c0c0: 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
c0d0: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
c0e0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
c0f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  ,..            "
c100: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
c110: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
c120: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
c130: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
c140: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
c150: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
c160: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
c170: 28 44 61 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d  (DateTime), Form
c180: 61 74 44 61 74 65 54 69 6d 65 28 76 61 6c 75 65  atDateTime(value
c190: 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  )));..    }.... 
c1a0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
c1b0: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
c1c0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
c1d0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
c1e0: 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  nt index, string
c1f0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
c200: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
c210: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
c220: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
c230: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
c240: 73 73 61 67 65 28 55 6e 73 61 66 65 4e 61 74 69  ssage(UnsafeNati
c250: 76 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  veMethods.String
c260: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
c270: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
c280: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
c290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
c2a0: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
c2b0: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
c2c0: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
c2d0: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
c2e0: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
c2f0: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
c300: 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28  , index, typeof(
c310: 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65 20  String), (value 
c320: 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75 65  != null) ? value
c330: 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a   : "<null>"));..
c340: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
c350: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
c360: 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c  ng ToHexadecimal
c370: 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
c380: 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a 20   byte[] array.. 
c390: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
c3a0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72  .        if (arr
c3b0: 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ay == null)..   
c3c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
c3d0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
c3e0: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72   StringBuilder r
c3f0: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
c400: 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79 2e  ngBuilder(array.
c410: 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d 0a  Length * 2);....
c420: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67          int leng
c430: 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74  th = array.Lengt
c440: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f  h;....        fo
c450: 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
c460: 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68  ; index < length
c470: 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
c480: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
c490: 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64 65  ppend(array[inde
c4a0: 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32 22  x].ToString("x2"
c4b0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ));....        r
c4c0: 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53  eturn result.ToS
c4d0: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d  tring();..    }.
c4e0: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
c4f0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
c500: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
c510: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
c520: 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79  e, int index, by
c530: 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
c540: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
c550: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
c560: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
c570: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
c580: 6f 67 4d 65 73 73 61 67 65 28 55 6e 73 61 66 65  ogMessage(Unsafe
c590: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53 74  NativeMethods.St
c5a0: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
c5b0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
c5c0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
c5d0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
c5e0: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
c5f0: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
c600: 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b  r #{1} as type {
c610: 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b  2} with value {{
c620: 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20  {3}}}...",..    
c630: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
c640: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70  tPtr, index, typ
c650: 65 6f 66 28 42 79 74 65 5b 5d 29 2c 20 28 76 61  eof(Byte[]), (va
c660: 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54  lue != null) ? T
c670: 6f 48 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69  oHexadecimalStri
c680: 6e 67 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e 75  ng(value) : "<nu
c690: 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ll>"));..    }..
c6a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c6b0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
c6c0: 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53  d_Double(SQLiteS
c6d0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
c6e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
c6f0: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
c700: 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61  index, double va
c710: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
c720: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
c730: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
c740: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
c750: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
c760: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
c770: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
c780: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
c790: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
c7a0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
c7b0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
c7c0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
c7d0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
c7e0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
c7f0: 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  }....#if !PLATFO
c800: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
c810: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ORK..        SQL
c820: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
c830: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
c840: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
c850: 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c  d_double(handle,
c860: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
c870: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
c880: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
c890: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
c8a0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
c8b0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
c8c0: 29 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ));..#elif !SQLI
c8d0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
c8e0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
c8f0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
c900: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c910: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
c920: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
c930: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
c940: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
c950: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
c960: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
c970: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
c980: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
c990: 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ror());..#else..
c9a0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
c9b0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
c9c0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
c9d0: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
c9e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c9f0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49  ride void Bind_I
ca00: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
ca10: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
ca20: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
ca30: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
ca40: 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  x, int value).. 
ca50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
ca60: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
ca70: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
ca80: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
ca90: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
caa0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
cab0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
cac0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
cad0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
cae0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
caf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cb00: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
cb10: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
cb20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
cb30: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
cb40: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
cb50: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
cb60: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68  lite3_bind_int(h
cb70: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
cb80: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
cb90: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
cba0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
cbb0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
cbc0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
cbd0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
cbe0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
cbf0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
cc00: 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74  ind_UInt32(SQLit
cc10: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
cc20: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
cc30: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
cc40: 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61  t index, uint va
cc50: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
cc60: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
cc70: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
cc80: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
cc90: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
cca0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
ccb0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
ccc0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
ccd0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
cce0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
ccf0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
cd00: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
cd10: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
cd20: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
cd30: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
cd40: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
cd50: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
cd60: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
cd70: 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20  Code n;....     
cd80: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
cd90: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cda0: 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32  Flags.BindUInt32
cdb0: 41 73 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c 69  AsInt64) == SQLi
cdc0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
cdd0: 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e  s.BindUInt32AsIn
cde0: 74 36 34 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  t64)..        {.
cdf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e  .            lon
ce00: 67 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75 65  g value2 = value
ce10: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
ce20: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
ce30: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
ce40: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
ce50: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ce60: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
ce70: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
ce80: 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  2);..#elif !SQLI
ce90: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
cea0: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
ceb0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
cec0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
ced0: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
cee0: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
cef0: 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a  alue2);..#else..
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
cf10: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
cf20: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
cf30: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
cf40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
cf50: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
cf60: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
cf70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
cf80: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
cf90: 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  int(handle, inde
cfa0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
cfb0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69      }..        i
cfc0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
cfd0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
cfe0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
cff0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
d000: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
d010: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
d020: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
d030: 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65  ind_Int64(SQLite
d040: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
d050: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d060: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
d070: 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c   index, long val
d080: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
d090: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
d0a0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
d0b0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
d0c0: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
d0d0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
d0e0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
d0f0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
d100: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
d110: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
d120: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d130: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
d140: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d150: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
d160: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
d170: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
d180: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
d190: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
d1a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d1b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
d1c0: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
d1d0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
d1e0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
d1f0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
d200: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
d210: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
d220: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
d230: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
d240: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
d250: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
d260: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
d270: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d280: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
d290: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
d2a0: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
d2b0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
d2c0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
d2d0: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
d2e0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
d2f0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
d300: 28 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ());..#else..   
d310: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
d320: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
d330: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
d340: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
d350: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
d360: 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74  e void Bind_UInt
d370: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
d380: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
d390: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
d3a0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
d3b0: 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20   ulong value).. 
d3c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
d3d0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
d3e0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
d3f0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
d400: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
d410: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
d420: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
d430: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
d440: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
d450: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
d460: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
d470: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
d480: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d490: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
d4a0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
d4b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
d4c0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
d4d0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
d4e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d4f0: 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36  lite3_bind_uint6
d500: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
d510: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
d520: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
d530: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
d540: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
d550: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
d560: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65  astError());..#e
d570: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
d580: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51  DARD..        SQ
d590: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
d5a0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
d5b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
d5c0: 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f  nd_uint64_intero
d5d0: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
d5e0: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
d5f0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
d600: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
d610: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
d620: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
d630: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
d640: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
d650: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
d660: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
d670: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
d680: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d690: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
d6a0: 69 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c  id Bind_Text(SQL
d6b0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
d6c0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
d6d0: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
d6e0: 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e  int index, strin
d6f0: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
d700: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
d710: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
d720: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
d730: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
d740: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
d750: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
d760: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
d770: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
d780: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
d790: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
d7a0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
d7b0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
d7c0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
d7d0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
d7e0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
d7f0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
d800: 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20  .        byte[] 
d810: 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65  b = ToUTF8(value
d820: 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
d830: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
d840: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
d850: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
d860: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
d870: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
d880: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
d890: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
d8a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d8b0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
d8c0: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a  le, index, b);..
d8d0: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
d8e0: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  f....        SQL
d8f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
d900: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d910: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
d920: 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69  d_text(handle, i
d930: 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74  ndex, b, b.Lengt
d940: 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28  h - 1, (IntPtr)(
d950: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  -1));..        i
d960: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
d970: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
d980: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
d990: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
d9a0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
d9b0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
d9c0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
d9d0: 69 6e 64 5f 44 61 74 65 54 69 6d 65 28 53 51 4c  ind_DateTime(SQL
d9e0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
d9f0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
da00: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
da10: 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54  int index, DateT
da20: 69 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a  ime dt)..    {..
da30: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
da40: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
da50: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
da60: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
da70: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
da80: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
da90: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
daa0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
dab0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
dac0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
dad0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
dae0: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
daf0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
db00: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
db10: 2c 20 64 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  , dt);..        
db20: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
db30: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
db40: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
db50: 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 44 61 74 65  onFlags.BindDate
db60: 54 69 6d 65 57 69 74 68 4b 69 6e 64 29 20 3d 3d  TimeWithKind) ==
db70: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
db80: 6e 46 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54  nFlags.BindDateT
db90: 69 6d 65 57 69 74 68 4b 69 6e 64 29 0d 0a 20 20  imeWithKind)..  
dba0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dbb0: 20 20 20 20 20 69 66 20 28 28 5f 64 61 74 65 74       if ((_datet
dbc0: 69 6d 65 4b 69 6e 64 20 21 3d 20 44 61 74 65 54  imeKind != DateT
dbd0: 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66  imeKind.Unspecif
dbe0: 69 65 64 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ied) &&..       
dbf0: 20 20 20 20 20 20 20 20 20 28 64 74 2e 4b 69 6e           (dt.Kin
dc00: 64 20 21 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e  d != DateTimeKin
dc10: 64 2e 55 6e 73 70 65 63 69 66 69 65 64 29 20 26  d.Unspecified) &
dc20: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
dc30: 20 20 20 28 64 74 2e 4b 69 6e 64 20 21 3d 20 5f     (dt.Kind != _
dc40: 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 29 0d 0a  datetimeKind))..
dc50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
dc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
dc70: 66 20 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  f (_datetimeKind
dc80: 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64   == DateTimeKind
dc90: 2e 55 74 63 29 0d 0a 20 20 20 20 20 20 20 20 20  .Utc)..         
dca0: 20 20 20 20 20 20 20 20 20 20 20 64 74 20 3d 20             dt = 
dcb0: 64 74 2e 54 6f 55 6e 69 76 65 72 73 61 6c 54 69  dt.ToUniversalTi
dcc0: 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  me();..         
dcd0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
dce0: 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d  _datetimeKind ==
dcf0: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f   DateTimeKind.Lo
dd00: 63 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  cal)..          
dd10: 20 20 20 20 20 20 20 20 20 20 64 74 20 3d 20 64            dt = d
dd20: 74 2e 54 6f 4c 6f 63 61 6c 54 69 6d 65 28 29 3b  t.ToLocalTime();
dd30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
dd40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
dd50: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 5f 64        switch (_d
dd60: 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a  atetimeFormat)..
dd70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
dd80: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
dd90: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69  teDateFormats.Ti
dda0: 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  cks:..          
ddb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e               lon
ddd0: 67 20 76 61 6c 75 65 20 3d 20 64 74 2e 54 69 63  g value = dt.Tic
dde0: 6b 73 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  ks;....#if !PLAT
ddf0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
de00: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
de10: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
de20: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
de30: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
de40: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
de50: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
de60: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
de80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de90: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
dea0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
deb0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
ded0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dee0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
def0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
df00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
df10: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
df20: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
df30: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
df50: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
df60: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
df70: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
df80: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
df90: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
dfb0: 61 6b 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ak;..#elif !SQLI
dfc0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfe0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
dff0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
e000: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
e010: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
e020: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
e030: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
e040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e050: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
e060: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
e070: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
e080: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
e090: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0b0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 73      break;..#els
e0c0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
e0d0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
e0e0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
e0f0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
e100: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
e110: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e120: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
e130: 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61  ateFormats.Julia
e140: 6e 44 61 79 3a 0d 0a 20 20 20 20 20 20 20 20 20  nDay:..         
e150: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
e170: 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a  uble value = ToJ
e180: 75 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d  ulianDay(dt);...
e190: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
e1a0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
e1b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e1c0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
e1d0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
e1e0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
e1f0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
e200: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
e210: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
e220: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e240: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
e250: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
e260: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e270: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e290: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
e2a0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
e2b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e2c0: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64  bind_double(hand
e2d0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
e2e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
e2f0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
e300: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e310: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
e320: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
e330: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
e340: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
e350: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
e360: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
e370: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
e380: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
e390: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
e3a0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e3b0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
e3c0: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
e3d0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
e3e0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ef value);..    
e3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e400: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
e410: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
e420: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
e430: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
e440: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e460: 62 72 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20  break;..#else.. 
e470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e480: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
e490: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
e4a0: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
e4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e4c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
e4d0: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
e4e0: 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68  ormats.UnixEpoch
e4f0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
e500: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e510: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
e520: 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54  alue = Convert.T
e530: 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61  oInt64(dt.Subtra
e540: 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f  ct(UnixEpoch).To
e550: 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a  talSeconds);....
e560: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
e570: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 20 20 20 20 20  )..             
e5f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e610: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
e620: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
e630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e640: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
e660: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
e670: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
e680: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
e690: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
e6a0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
e6b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e6c0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
e6d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
e6e0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
e6f0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
e700: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
e710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e720: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65        break;..#e
e730: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
e740: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
e750: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
e760: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
e770: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e780: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
e790: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
e7a0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
e7b0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e7d0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
e7e0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
e7f0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e800: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
e810: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
e830: 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ak;..#else..    
e840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e850: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
e860: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
e870: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
e880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
e890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66  .            def
e8a0: 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  ault:..         
e8b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79                by
e8d0: 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28  te[] b = ToUTF8(
e8e0: 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  dt);....#if !PLA
e8f0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
e900: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
e910: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e920: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
e930: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
e940: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
e950: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e960: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
e970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
e980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e990: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
e9a0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
e9b0: 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   b);..          
e9c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
e9d0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  dif....         
e9e0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
e9f0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
ea00: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ea10: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
ea20: 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64  text(handle, ind
ea30: 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20  ex, b, b.Length 
ea40: 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  - 1, (IntPtr)(-1
ea50: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
ea60: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
ea70: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
ea80: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
ea90: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
eaa0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
eab0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
eac0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
ead0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eae0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
eaf0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
eb00: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
eb10: 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c  id Bind_Blob(SQL
eb20: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
eb30: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
eb40: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
eb50: 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b  int index, byte[
eb60: 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20  ] blobData)..   
eb70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
eb80: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
eb90: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
eba0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
ebb0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
ebc0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
ebd0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
ebe0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
ebf0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
ec00: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
ec10: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
ec20: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
ec30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
ec40: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
ec50: 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b  ndex, blobData);
ec60: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
ec70: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
ec80: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
ec90: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
eca0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
ecb0: 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c  ind_blob(handle,
ecc0: 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61   index, blobData
ecd0: 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74  , blobData.Lengt
ece0: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
ecf0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
ed00: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
ed10: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
ed20: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
ed30: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
ed40: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
ed50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
ed60: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
ed70: 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65  Null(SQLiteState
ed80: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
ed90: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
eda0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
edb0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
edc0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
edd0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
ede0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
edf0: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
ee00: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
ee10: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
ee20: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
ee30: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
ee40: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
ee50: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
ee60: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
ee70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ee80: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
ee90: 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  ndle, index);.. 
eea0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
eeb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
eec0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
eed0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
eee0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
eef0: 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c 20 69 6e  _null(handle, in
ef00: 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  dex);..        i
ef10: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
ef20: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
ef30: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
ef40: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
ef50: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
ef60: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ef70: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69   override int Bi
ef80: 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53 51  nd_ParamCount(SQ
ef90: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
efa0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
efb0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29  tionFlags flags)
efc0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
efd0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
efe0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
eff0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
f000: 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  t;..        int 
f010: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
f020: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f030: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
f040: 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29  er_count(handle)
f050: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
f060: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
f070: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
f080: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
f090: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
f0a0: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
f0b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f0c0: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
f0d0: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
f0e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f0f0: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
f100: 73 61 67 65 28 55 6e 73 61 66 65 4e 61 74 69 76  sage(UnsafeNativ
f110: 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  eMethods.StringF
f120: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
f130: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
f140: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
f150: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
f160: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
f170: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f 75  {0} paramter cou
f180: 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20  nt is {1}.",..  
f190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
f1a0: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c 75  ndleIntPtr, valu
f1b0: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e));..        }.
f1c0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
f1d0: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
f1e0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
f1f0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
f200: 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53  Bind_ParamName(S
f210: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
f220: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
f230: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
f240: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
f250: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
f260: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
f270: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
f280: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
f290: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
f2a0: 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  ame;....#if !SQL
f2b0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
f2c0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
f2d0: 30 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65  0;..        name
f2e0: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
f2f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f300: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
f310: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f  _parameter_name_
f320: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
f330: 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c  index, ref len),
f340: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
f350: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54         name = UT
f360: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
f370: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f380: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
f390: 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c  meter_name(handl
f3a0: 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  e, index), -1);.
f3b0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
f3c0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
f3d0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f3e0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
f3f0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
f400: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
f410: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
f420: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
f430: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
f440: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
f450: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
f460: 4c 6f 67 4d 65 73 73 61 67 65 28 55 6e 73 61 66  LogMessage(Unsaf
f470: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53  eNativeMethods.S
f480: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
f4a0: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
f4b0: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
f4c0: 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74             "Stat
f4d0: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
f4e0: 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20  er #{1} name is 
f4f0: 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20  {{{2}}}.",..    
f500: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
f510: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
f520: 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20   name));..      
f530: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
f540: 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20  eturn name;..   
f550: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
f560: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
f570: 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28  Bind_ParamIndex(
f580: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
f590: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
f5a0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
f5b0: 73 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d 4e  s, string paramN
f5c0: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
f5d0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
f5e0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
f5f0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
f600: 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20  _stmt;..        
f610: 69 6e 74 20 69 6e 64 65 78 20 3d 20 55 6e 73 61  int index = Unsa
f620: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f630: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
f640: 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 68 61 6e  ameter_index(han
f650: 64 6c 65 2c 20 54 6f 55 54 46 38 28 70 61 72 61  dle, ToUTF8(para
f660: 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20  mName));....    
f670: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
f680: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
f690: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
f6a0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
f6b0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
f6c0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
f6d0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
f6e0: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
f6f0: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
f700: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
f710: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 55 6e 73 61  .LogMessage(Unsa
f720: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f730: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
f740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
f750: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
f760: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
f770: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
f780: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
f790: 74 65 72 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d  ter index of nam
f7a0: 65 20 7b 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32  e {{{1}}} is #{2
f7b0: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
f7c0: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
f7d0: 74 72 2c 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69  tr, paramName, i
f7e0: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 20 20 20  ndex));..       
f7f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
f800: 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20  turn index;..   
f810: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
f820: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
f830: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69  ColumnCount(SQLi
f840: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
f850: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
f860: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
f870: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f880: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
f890: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
f8a0: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
f8b0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f8c0: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
f8d0: 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  nName(SQLiteStat
f8e0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
f8f0: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
f900: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
f910: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
f920: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49  en = 0;..      I
f930: 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65  ntPtr p = Unsafe
f940: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f950: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
f960: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
f970: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
f980: 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23  ex, ref len);..#
f990: 65 6c 73 65 0d 0a 20 20 20 20 20 20 49 6e 74 50  else..      IntP
f9a0: 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
f9b0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f9c0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73  e3_column_name(s
f9d0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
f9e0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69  , index);..#endi
f9f0: 66 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 3d  f..      if (p =
fa00: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
fa10: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
fa20: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
fa30: 6e 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n(SQLiteErrorCod
fa40: 65 2e 4e 6f 4d 65 6d 2c 20 47 65 74 4c 61 73 74  e.NoMem, GetLast
fa50: 45 72 72 6f 72 28 29 29 3b 0d 0a 23 69 66 20 21  Error());..#if !
fa60: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
fa70: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
fa80: 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
fa90: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
faa0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
fab0: 74 72 69 6e 67 28 70 2c 20 2d 31 29 3b 0d 0a 23  tring(p, -1);..#
fac0: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
fad0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
fae0: 72 72 69 64 65 20 54 79 70 65 41 66 66 69 6e 69  rride TypeAffini
faf0: 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  ty ColumnAffinit
fb00: 79 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  y(SQLiteStatemen
fb10: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
fb20: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
fb30: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
fb40: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
fb50: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
fb60: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
fb70: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
fb80: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
fb90: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
fba0: 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c  g ColumnType(SQL
fbb0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
fbc0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 72 65  t, int index, re
fbd0: 66 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 6e  f TypeAffinity n
fbe0: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b  Affinity)..    {
fbf0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
fc00: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
fc10: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 65  ANDARD..      le
fc20: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e  n = 0;..      In
fc30: 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
fc40: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fc50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
fc60: 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  type_interop(stm
fc70: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
fc80: 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b  index, ref len);
fc90: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6c  ..#else..      l
fca0: 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20  en = -1;..      
fcb0: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
fcc0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
fcd0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
fce0: 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c  cltype(stmt._sql
fcf0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
fd00: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
fd10: 20 6e 41 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c   nAffinity = Col
fd20: 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74  umnAffinity(stmt
fd30: 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
fd40: 20 20 20 69 66 20 28 70 20 21 3d 20 49 6e 74 50     if (p != IntP
fd50: 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20  tr.Zero) return 
fd60: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20  UTF8ToString(p, 
fd70: 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73  len);..      els
fd80: 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  e..      {..    
fd90: 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 20      string[] ar 
fda0: 3d 20 73 74 6d 74 2e 54 79 70 65 44 65 66 69 6e  = stmt.TypeDefin
fdb0: 69 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20  itions;..       
fdc0: 20 69 66 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29   if (ar != null)
fdd0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
fde0: 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78         if (index
fdf0: 20 3c 20 61 72 2e 4c 65 6e 67 74 68 20 26 26 20   < ar.Length && 
fe00: 61 72 5b 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c  ar[index] != nul
fe10: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
fe20: 72 65 74 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d  return ar[index]
fe30: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
fe40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
fe50: 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20  ing.Empty;....  
fe60: 20 20 20 20 20 20 2f 2f 73 77 69 74 63 68 20 28        //switch (
fe70: 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20  nAffinity)..    
fe80: 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20      //{..       
fe90: 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66   //  case TypeAf
fea0: 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20  finity.Int64:.. 
feb0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
fec0: 75 72 6e 20 22 42 49 47 49 4e 54 22 3b 0d 0a 20  urn "BIGINT";.. 
fed0: 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20         //  case 
fee0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
fef0: 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble:..        //
ff00: 20 20 20 20 72 65 74 75 72 6e 20 22 44 4f 55 42      return "DOUB
ff10: 4c 45 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  LE";..        //
ff20: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
ff30: 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
ff40: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
ff50: 22 42 4c 4f 42 22 3b 0d 0a 20 20 20 20 20 20 20  "BLOB";..       
ff60: 20 2f 2f 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20   //  default:.. 
ff70: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
ff80: 75 72 6e 20 22 54 45 58 54 22 3b 0d 0a 20 20 20  urn "TEXT";..   
ff90: 20 20 20 20 20 2f 2f 7d 0d 0a 20 20 20 20 20 20       //}..      
ffa0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
ffb0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
ffc0: 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65  e int ColumnInde
ffd0: 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  x(SQLiteStatemen
ffe0: 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 63  t stmt, string c
fff0: 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20  olumnName)..    
10000 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 78 20 3d  {..      int x =
10010 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d   ColumnCount(stm
10020 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  t);....      for
10030 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
10040 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20   x; n++)..      
10050 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  {..        if (S
10060 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f  tring.Compare(co
10070 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e  lumnName, Column
10080 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53  Name(stmt, n), S
10090 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
100a0 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
100b0 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
100c0 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
100d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65       }..      re
100e0 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d  turn -1;..    }.
100f0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
10100 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
10110 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61  ColumnOriginalNa
10120 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
10130 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
10140 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
10150 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
10160 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
10170 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
10180 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
10190 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
101a0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
101b0 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69  mn_origin_name_i
101c0 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
101d0 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
101e0 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   ref len), len);
101f0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
10200 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
10210 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
10220 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
10230 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
10240 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
10250 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
10260 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
10270 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10280 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
10290 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e   ColumnDatabaseN
102a0 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
102b0 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
102c0 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
102d0 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
102e0 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
102f0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
10300 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
10310 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
10320 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
10330 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
10340 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
10350 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
10360 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65  ex, ref len), le
10370 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
10380 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
10390 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
103a0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
103b0 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
103c0 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c  e_name(stmt._sql
103d0 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
103e0 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
103f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
10400 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
10410 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c  tring ColumnTabl
10420 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eName(SQLiteStat
10430 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
10440 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
10450 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
10460 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
10470 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72  en = 0;..      r
10480 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
10490 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
104a0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
104b0 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
104c0 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
104d0 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
104e0 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e  x, ref len), len
104f0 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
10500 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
10510 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
10520 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10530 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
10540 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
10550 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
10560 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
10570 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
10580 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
10590 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73  ColumnMetaData(s
105a0 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20  tring dataBase, 
105b0 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74  string table, st
105c0 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65 66  ring column, ref
105d0 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65   string dataType
105e0 2c 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f 6c  , ref string col
105f0 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 72 65  lateSequence, re
10600 66 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20  f bool notNull, 
10610 72 65 66 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79  ref bool primary
10620 4b 65 79 2c 20 72 65 66 20 62 6f 6f 6c 20 61 75  Key, ref bool au
10630 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20  toIncrement)..  
10640 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74    {..      IntPt
10650 72 20 64 61 74 61 54 79 70 65 50 74 72 20 3d 20  r dataTypePtr = 
10660 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
10670 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53      IntPtr collS
10680 65 71 50 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a  eqPtr = IntPtr.Z
10690 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
106a0 6e 6e 6f 74 4e 75 6c 6c 20 3d 20 30 3b 0d 0a 20  nnotNull = 0;.. 
106b0 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72       int nprimar
106c0 79 4b 65 79 20 3d 20 30 3b 0d 0a 20 20 20 20 20  yKey = 0;..     
106d0 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63 20 3d 20   int nautoInc = 
106e0 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  0;..      SQLite
106f0 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20  ErrorCode n;..  
10700 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a      int dtLen;..
10710 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b        int csLen;
10720 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
10730 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
10740 64 74 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  dtLen = 0;..    
10750 20 20 63 73 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20    csLen = 0;..  
10760 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
10770 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10780 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
10790 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f  _metadata_intero
107a0 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  p(_sql, ToUTF8(d
107b0 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38  ataBase), ToUTF8
107c0 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28  (table), ToUTF8(
107d0 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61 74  column), ref dat
107e0 61 54 79 70 65 50 74 72 2c 20 72 65 66 20 63 6f  aTypePtr, ref co
107f0 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e 6e  llSeqPtr, ref nn
10800 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72 69  otNull, ref npri
10810 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61 75  maryKey, ref nau
10820 74 6f 49 6e 63 2c 20 72 65 66 20 64 74 4c 65 6e  toInc, ref dtLen
10830 2c 20 72 65 66 20 63 73 4c 65 6e 29 3b 0d 0a 23  , ref csLen);..#
10840 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74 4c 65  else..      dtLe
10850 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63  n = -1;..      c
10860 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20  sLen = -1;....  
10870 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
10880 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10890 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
108a0 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c 2c 20  _metadata(_sql, 
108b0 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29  ToUTF8(dataBase)
108c0 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c  , ToUTF8(table),
108d0 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c   ToUTF8(column),
108e0 20 72 65 66 20 64 61 74 61 54 79 70 65 50 74 72   ref dataTypePtr
108f0 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74 72  , ref collSeqPtr
10900 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20  , ref nnotNull, 
10910 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c  ref nprimaryKey,
10920 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 29 3b 0d   ref nautoInc);.
10930 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
10940 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
10950 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
10960 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
10970 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
10980 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
10990 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 55 54     dataType = UT
109a0 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74 61 54  F8ToString(dataT
109b0 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d  ypePtr, dtLen);.
109c0 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65 53 65  .      collateSe
109d0 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53  quence = UTF8ToS
109e0 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72  tring(collSeqPtr
109f0 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  , csLen);....   
10a00 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e     notNull = (nn
10a10 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20  otNull == 1);.. 
10a20 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65 79 20       primaryKey 
10a30 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d  = (nprimaryKey =
10a40 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61 75 74  = 1);..      aut
10a50 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61  oIncrement = (na
10a60 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20  utoInc == 1);.. 
10a70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10a80 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62  rnal override ob
10a90 6a 65 63 74 20 47 65 74 4f 62 6a 65 63 74 28 53  ject GetObject(S
10aa0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
10ab0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
10ac0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
10ad0 73 77 69 74 63 68 20 28 43 6f 6c 75 6d 6e 41 66  switch (ColumnAf
10ae0 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
10af0 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ex))..        {.
10b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
10b10 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e TypeAffinity.I
10b20 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20  nt64:..         
10b30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10b50 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74  turn GetInt64(st
10b60 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
10b70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
10b80 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
10b90 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
10ba0 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  uble:..         
10bb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10bd0 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73  turn GetDouble(s
10be0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
10c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
10c10 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  e TypeAffinity.T
10c20 65 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ext:..          
10c30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10c40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
10c50 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74  urn GetText(stmt
10c60 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
10c70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
10c80 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
10c90 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
10ca0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
10cb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10cc0 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 73            long s
10cd0 69 7a 65 20 3d 20 47 65 74 42 79 74 65 73 28 73  ize = GetBytes(s
10ce0 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e  tmt, index, 0, n
10cf0 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 0d 0a 20  ull, 0, 0);.... 
10d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d10 20 20 20 69 66 20 28 28 73 69 7a 65 20 3e 20 30     if ((size > 0
10d20 29 20 26 26 20 28 73 69 7a 65 20 3c 3d 20 69 6e  ) && (size <= in
10d30 74 2e 4d 61 78 56 61 6c 75 65 29 29 0d 0a 20 20  t.MaxValue))..  
10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74               byt
10d70 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e 65 77 20  e[] bytes = new 
10d80 62 79 74 65 5b 28 69 6e 74 29 73 69 7a 65 5d 3b  byte[(int)size];
10d90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10da0 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 42              GetB
10db0 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
10dc0 2c 20 30 2c 20 62 79 74 65 73 2c 20 30 2c 20 28  , 0, bytes, 0, (
10dd0 69 6e 74 29 73 69 7a 65 29 3b 0d 0a 0d 0a 20 20  int)size);....  
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10df0 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
10e00 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es;..           
10e10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
10e40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
10e50 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
10e60 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 3a 0d 0a  Affinity.Null:..
10e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10e90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 42         return DB
10ea0 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20  Null.Value;..   
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
10ec0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
10ed0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
10ee0 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
10ef0 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d  eption();..    }
10f00 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10f10 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65   override double
10f20 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74   GetDouble(SQLit
10f30 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
10f40 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
10f50 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
10f60 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
10f70 52 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  RK..      return
10f80 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10f90 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
10fa0 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e  umn_double(stmt.
10fb0 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
10fc0 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  dex);..#elif !SQ
10fd0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
10fe0 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
10ff0 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20  e = 0.0;..      
11000 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
11010 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
11020 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  mn_double_intero
11030 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
11040 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
11050 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72  value);..      r
11060 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65  eturn value;..#e
11070 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
11080 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
11090 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
110a0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
110b0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
110c0 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 47 65 74  verride bool Get
110d0 42 6f 6f 6c 65 61 6e 28 53 51 4c 69 74 65 53 74  Boolean(SQLiteSt
110e0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
110f0 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
11100 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
11110 42 6f 6f 6c 65 61 6e 28 47 65 74 4f 62 6a 65 63  Boolean(GetObjec
11120 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  t(stmt, index), 
11130 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
11140 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 66 61  riantCulture, fa
11150 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lse);..    }....
11160 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11170 72 72 69 64 65 20 73 62 79 74 65 20 47 65 74 53  rride sbyte GetS
11180 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74 65  Byte(SQLiteState
11190 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
111a0 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
111b0 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
111c0 63 6b 65 64 28 28 73 62 79 74 65 29 28 47 65 74  cked((sbyte)(Get
111d0 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
111e0 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c  x) & byte.MaxVal
111f0 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
11200 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11210 72 72 69 64 65 20 62 79 74 65 20 47 65 74 42 79  rride byte GetBy
11220 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  te(SQLiteStateme
11230 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
11240 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
11250 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
11260 65 64 28 28 62 79 74 65 29 28 47 65 74 49 6e 74  ed((byte)(GetInt
11270 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
11280 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29  & byte.MaxValue)
11290 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
112a0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
112b0 64 65 20 73 68 6f 72 74 20 47 65 74 49 6e 74 31  de short GetInt1
112c0 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  6(SQLiteStatemen
112d0 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
112e0 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
112f0 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
11300 64 28 28 73 68 6f 72 74 29 28 47 65 74 49 6e 74  d((short)(GetInt
11310 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
11320 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75  & ushort.MaxValu
11330 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
11340 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
11350 72 69 64 65 20 75 73 68 6f 72 74 20 47 65 74 55  ride ushort GetU
11360 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74  Int16(SQLiteStat
11370 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
11380 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
11390 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
113a0 65 63 6b 65 64 28 28 75 73 68 6f 72 74 29 28 47  ecked((ushort)(G
113b0 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
113c0 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61  dex) & ushort.Ma
113d0 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d  xValue));..    }
113e0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
113f0 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
11400 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  tInt32(SQLiteSta
11410 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
11420 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
11430 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
11440 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11450 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
11460 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  int(stmt._sqlite
11470 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
11480 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11490 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75  ernal override u
114a0 69 6e 74 20 47 65 74 55 49 6e 74 33 32 28 53 51  int GetUInt32(SQ
114b0 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
114c0 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
114d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
114e0 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75  urn unchecked((u
114f0 69 6e 74 29 47 65 74 49 6e 74 33 32 28 73 74 6d  int)GetInt32(stm
11500 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20  t, index));..   
11510 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
11520 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
11530 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65   GetInt64(SQLite
11540 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
11550 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
11560 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
11570 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
11580 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  K..      return 
11590 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
115a0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
115b0 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73  mn_int64(stmt._s
115c0 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
115d0 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  x);..#elif !SQLI
115e0 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
115f0 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
11600 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  0;..      Unsafe
11610 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11620 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
11630 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  64_interop(stmt.
11640 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
11650 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
11660 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
11670 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  alue;..#else..  
11680 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
11690 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
116a0 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
116b0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
116c0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
116d0 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36 34   ulong GetUInt64
116e0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
116f0 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
11700 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11710 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
11720 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34  ((ulong)GetInt64
11730 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  (stmt, index));.
11740 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
11750 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
11760 73 74 72 69 6e 67 20 47 65 74 54 65 78 74 28 53  string GetText(S
11770 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
11780 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
11790 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
117a0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
117b0 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
117c0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
117d0 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
117e0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
117f0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
11800 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ext_interop(stmt
11810 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
11820 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20  ndex, ref len), 
11830 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
11840 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
11850 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
11860 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11870 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
11880 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
11890 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20  t, index),..    
118a0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
118b0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
118c0 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
118d0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
118e0 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66  index));..#endif
118f0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
11900 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
11910 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74   DateTime GetDat
11920 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
11930 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
11940 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
11950 20 20 20 20 20 69 66 20 28 5f 64 61 74 65 74 69       if (_dateti
11960 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69  meFormat == SQLi
11970 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69  teDateFormats.Ti
11980 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 72 65  cks)..        re
11990 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
119a0 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
119b0 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65  ndex), _datetime
119c0 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  Kind);..      el
119d0 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65  se if (_datetime
119e0 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65  Format == SQLite
119f0 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69  DateFormats.Juli
11a00 61 6e 44 61 79 29 0d 0a 20 20 20 20 20 20 20 20  anDay)..        
11a10 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
11a20 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  e(GetDouble(stmt
11a30 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74  , index), _datet
11a40 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20  imeKind);..     
11a50 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74   else if (_datet
11a60 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c  imeFormat == SQL
11a70 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55  iteDateFormats.U
11a80 6e 69 78 45 70 6f 63 68 29 0d 0a 20 20 20 20 20  nixEpoch)..     
11a90 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
11aa0 54 69 6d 65 28 47 65 74 49 6e 74 33 32 28 73 74  Time(GetInt32(st
11ab0 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74  mt, index), _dat
11ac0 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23  etimeKind);....#
11ad0 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
11ae0 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
11af0 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72  en = 0;..      r
11b00 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
11b10 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
11b20 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
11b30 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70  umn_text_interop
11b40 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
11b50 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c  mt, index, ref l
11b60 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
11b70 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
11b80 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66  ToDateTime(Unsaf
11b90 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11ba0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
11bb0 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  xt(stmt._sqlite_
11bc0 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20  stmt, index),.. 
11bd0 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
11be0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11bf0 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28  e3_column_bytes(
11c00 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
11c10 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e  t, index));..#en
11c20 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
11c30 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11c40 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65  ide long GetByte
11c50 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  s(SQLiteStatemen
11c60 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
11c70 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  x, int nDataOffs
11c80 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74  et, byte[] bDest
11c90 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
11ca0 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
11cb0 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65  {..      int nle
11cc0 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
11cd0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11ce0 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
11cf0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
11d00 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
11d10 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e   // If no destin
11d20 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65  ation buffer, re
11d30 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65  turn the size ne
11d40 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20  eded...      if 
11d50 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
11d60 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
11d70 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65        int nCopie
11d80 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  d = nLength;....
11d90 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
11da0 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
11db0 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
11dc0 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
11dd0 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
11de0 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
11df0 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
11e00 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
11e10 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
11e20 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
11e30 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
11e40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
11e50 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61  ntPtr ptr = Unsa
11e60 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
11e70 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
11e80 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  lob(stmt._sqlite
11e90 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
11ea0 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61  ..        Marsha
11eb0 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28  l.Copy((IntPtr)(
11ec0 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20  ptr.ToInt64() + 
11ed0 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44  nDataOffset), bD
11ee0 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
11ef0 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  pied);..      }.
11f00 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20  .      else..   
11f10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43     {..        nC
11f20 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  opied = 0;..    
11f30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
11f40 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20  urn nCopied;..  
11f50 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
11f60 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
11f70 67 20 47 65 74 43 68 61 72 73 28 53 51 4c 69 74  g GetChars(SQLit
11f80 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
11f90 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
11fa0 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63 68 61  nDataOffset, cha
11fb0 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  r[] bDest, int n
11fc0 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
11fd0 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
11fe0 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20    int nlen;..   
11ff0 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d     int nCopied =
12000 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20   nLength;....   
12010 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20     string str = 
12020 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
12030 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65  dex);..      nle
12040 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d  n = str.Length;.
12050 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65  ...      if (bDe
12060 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  st == null) retu
12070 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20  rn nlen;....    
12080 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
12090 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c  nStart > bDest.L
120a0 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d  ength) nCopied =
120b0 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20   bDest.Length - 
120c0 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69  nStart;..      i
120d0 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61  f (nCopied + nDa
120e0 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29  taOffset > nlen)
120f0 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20   nCopied = nlen 
12100 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a  - nDataOffset;..
12110 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
12120 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ied > 0)..      
12130 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61    str.CopyTo(nDa
12140 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73 74 2c  taOffset, bDest,
12150 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64   nStart, nCopied
12160 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 6e  );..      else n
12170 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20  Copied = 0;.... 
12180 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70       return nCop
12190 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ied;..    }.... 
121a0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
121b0 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c  ride bool IsNull
121c0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
121d0 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
121e0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
121f0 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66  return (ColumnAf
12200 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
12210 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ex) == TypeAffin
12220 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20  ity.Null);..    
12230 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12240 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 41  l override int A
12250 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49 6e  ggregateCount(In
12260 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
12270 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
12280 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
12290 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61  ethods.sqlite3_a
122a0 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63  ggregate_count(c
122b0 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d  ontext);..    }.
122c0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
122d0 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
122e0 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 46  rrorCode CreateF
122f0 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73  unction(string s
12300 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20  trFunction, int 
12310 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64  nArgs, bool need
12320 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43  CollSeq, SQLiteC
12330 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51  allback func, SQ
12340 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  LiteCallback fun
12350 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e  cstep, SQLiteFin
12360 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66  alCallback funcf
12370 69 6e 61 6c 2c 20 62 6f 6f 6c 20 63 61 6e 54 68  inal, bool canTh
12380 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  row)..    {..   
12390 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
123a0 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  de n;....#if !SQ
123b0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
123c0 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
123d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
123e0 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
123f0 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71  tion_interop(_sq
12400 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
12410 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34  ction), nArgs, 4
12420 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
12430 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
12440 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43  uncfinal, (needC
12450 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20  ollSeq == true) 
12460 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20  ? 1 : 0);..     
12470 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
12480 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20  ErrorCode.Ok) n 
12490 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
124a0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
124b0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e  eate_function_in
124c0 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
124d0 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c  F8(strFunction),
124e0 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74   nArgs, 1, IntPt
124f0 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75  r.Zero, func, fu
12500 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61  ncstep, funcfina
12510 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20  l, (needCollSeq 
12520 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30  == true) ? 1 : 0
12530 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
12540 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
12550 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12560 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
12570 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
12580 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
12590 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 4, IntPtr.Zer
125a0 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
125b0 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a  p, funcfinal);..
125c0 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
125d0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
125e0 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  k) n = UnsafeNat
125f0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
12600 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
12610 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
12620 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
12630 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 1, IntPtr.Z
12640 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
12650 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b  tep, funcfinal);
12660 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
12670 69 66 20 28 63 61 6e 54 68 72 6f 77 20 26 26 20  if (canThrow && 
12680 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
12690 72 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72 6f 77  rCode.Ok)) throw
126a0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
126b0 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
126c0 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
126d0 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d  return n;..    }
126e0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
126f0 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
12700 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65  ErrorCode Create
12710 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67  Collation(string
12720 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53   strCollation, S
12730 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66  QLiteCollation f
12740 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61  unc, SQLiteColla
12750 74 69 6f 6e 20 66 75 6e 63 31 36 2c 20 62 6f 6f  tion func16, boo
12760 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20  l canThrow)..   
12770 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
12780 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
12790 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
127a0 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
127b0 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c  _collation(_sql,
127c0 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61   ToUTF8(strColla
127d0 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72  tion), 2, IntPtr
127e0 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d  .Zero, func16);.
127f0 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20  .      if (n == 
12800 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
12810 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  Ok) n = UnsafeNa
12820 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12830 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
12840 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
12850 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c  8(strCollation),
12860 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
12870 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69   func);..      i
12880 66 20 28 63 61 6e 54 68 72 6f 77 20 26 26 20 28  f (canThrow && (
12890 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
128a0 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72 6f 77 20  Code.Ok)) throw 
128b0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
128c0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
128d0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 72  ror());..      r
128e0 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d  eturn n;..    }.
128f0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
12900 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e  override int Con
12910 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61  textCollateCompa
12920 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  re(CollationEnco
12930 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e  dingEnum enc, In
12940 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74  tPtr context, st
12950 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67 20  ring s1, string 
12960 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  s2)..    {..#if 
12970 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
12980 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
12990 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  1;..      byte[]
129a0 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74   b2;..      Syst
129b0 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
129c0 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c   converter = nul
129d0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74  l;....      swit
129e0 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20  ch (enc)..      
129f0 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
12a00 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
12a10 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20  gEnum.UTF8:..   
12a20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
12a30 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
12a40 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20  ncoding.UTF8;.. 
12a50 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
12a60 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
12a70 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
12a80 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20  num.UTF16LE:..  
12a90 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
12aa0 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
12ab0 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65  Encoding.Unicode
12ac0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
12ad0 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
12ae0 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
12af0 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a  ingEnum.UTF16BE:
12b00 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
12b10 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
12b20 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67  ext.Encoding.Big
12b30 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a  EndianUnicode;..
12b40 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
12b50 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
12b60 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65     b1 = converte
12b70 72 2e 47 65 74 42 79 74 65 73 28 73 31 29 3b 0d  r.GetBytes(s1);.
12b80 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76  .      b2 = conv
12b90 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73  erter.GetBytes(s
12ba0 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  2);....      ret
12bb0 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
12bc0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12bd0 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70  context_collcomp
12be0 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  are_interop(cont
12bf0 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67  ext, b1, b1.Leng
12c00 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74  th, b2, b2.Lengt
12c10 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  h);..#else..    
12c20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
12c30 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
12c40 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
12c50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
12c60 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
12c70 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74  nt ContextCollat
12c80 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69  eCompare(Collati
12c90 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65  onEncodingEnum e
12ca0 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
12cb0 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63  xt, char[] c1, c
12cc0 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b  har[] c2)..    {
12cd0 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
12ce0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79  ANDARD..      by
12cf0 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20  te[] b1;..      
12d00 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20  byte[] b2;..    
12d10 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e    System.Text.En
12d20 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72  coding converter
12d30 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
12d40 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a    switch (enc)..
12d50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12d60 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
12d70 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38  ncodingEnum.UTF8
12d80 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
12d90 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
12da0 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54  Text.Encoding.UT
12db0 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  F8;..          b
12dc0 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
12dd0 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
12de0 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c  odingEnum.UTF16L
12df0 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
12e00 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
12e10 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
12e20 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
12e30 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
12e40 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
12e50 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
12e60 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16BE:..        
12e70 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
12e80 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
12e90 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63  ng.BigEndianUnic
12ea0 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
12eb0 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d  break;..      }.
12ec0 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f  ...      b1 = co
12ed0 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
12ee0 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20  (c1);..      b2 
12ef0 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
12f00 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20  ytes(c2);....   
12f10 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
12f20 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12f30 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
12f40 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f  llcompare_intero
12f50 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62  p(context, b1, b
12f60 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32  1.Length, b2, b2
12f70 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65  .Length);..#else
12f80 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
12f90 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
12fa0 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
12fb0 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
12fc0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
12fd0 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65  ride CollationSe
12fe0 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74  quence GetCollat
12ff0 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c 69  ionSequence(SQLi
13000 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c  teFunction func,
13010 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29   IntPtr context)
13020 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
13030 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
13040 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65       CollationSe
13050 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e 65 77  quence seq = new
13060 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
13070 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74  ce();..      int
13080 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
13090 20 69 6e 74 20 74 79 70 65 20 3d 20 30 3b 0d 0a   int type = 0;..
130a0 20 20 20 20 20 20 69 6e 74 20 65 6e 63 20 3d 20        int enc = 
130b0 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  0;..      IntPtr
130c0 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
130d0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
130e0 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71  _context_collseq
130f0 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
13100 2c 20 72 65 66 20 74 79 70 65 2c 20 72 65 66 20  , ref type, ref 
13110 65 6e 63 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a  enc, ref len);..
13120 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d  ..      if (p !=
13130 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20   null) seq.Name 
13140 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  = UTF8ToString(p
13150 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73  , len);..      s
13160 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61  eq.Type = (Colla
13170 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79 70  tionTypeEnum)typ
13180 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f 66  e;..      seq._f
13190 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20  unc = func;..   
131a0 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20     seq.Encoding 
131b0 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  = (CollationEnco
131c0 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d  dingEnum)enc;...
131d0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 65  .      return se
131e0 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  q;..#else..     
131f0 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
13200 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
13210 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
13220 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
13230 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
13240 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ng GetParamValue
13250 42 79 74 65 73 28 49 6e 74 50 74 72 20 70 2c 20  Bytes(IntPtr p, 
13260 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
13270 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69   byte[] bDest, i
13280 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
13290 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
132a0 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d        int nlen =
132b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
132c0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
132d0 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a  ue_bytes(p);....
132e0 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64        // If no d
132f0 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65  estination buffe
13300 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 69  r, return the si
13310 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  ze needed...    
13320 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e    if (bDest == n
13330 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e  ull) return nlen
13340 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  ;....      int n
13350 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68  Copied = nLength
13360 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
13370 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20  Copied + nStart 
13380 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20  > bDest.Length) 
13390 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e  nCopied = bDest.
133a0 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b  Length - nStart;
133b0 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
133c0 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  ied + nDataOffse
133d0 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65  t > nlen) nCopie
133e0 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61  d = nlen - nData
133f0 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20  Offset;....     
13400 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30   if (nCopied > 0
13410 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
13420 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d      IntPtr ptr =
13430 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13440 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
13450 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20  ue_blob(p);.... 
13460 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
13470 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72  opy((IntPtr)(ptr
13480 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61  .ToInt64() + nDa
13490 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74  taOffset), bDest
134a0 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65  , nStart, nCopie
134b0 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  d);..      }..  
134c0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
134d0 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69  {..        nCopi
134e0 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d  ed = 0;..      }
134f0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
13500 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d   nCopied;..    }
13510 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
13520 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65   override double
13530 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44 6f   GetParamValueDo
13540 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72 29  uble(IntPtr ptr)
13550 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c  ..    {..#if !PL
13560 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
13570 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 72  AMEWORK..      r
13580 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
13590 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
135a0 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 70  3_value_double(p
135b0 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  tr);..#elif !SQL
135c0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
135d0 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65      double value
135e0 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20 55   = 0.0;..      U
135f0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
13600 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
13610 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
13620 70 74 72 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  ptr, ref value);
13630 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
13640 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  alue;..#else..  
13650 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
13660 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
13670 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
13680 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
13690 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
136a0 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56 61 6c   int GetParamVal
136b0 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72 20 70  ueInt32(IntPtr p
136c0 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  tr)..    {..    
136d0 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
136e0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
136f0 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70  ite3_value_int(p
13700 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
13710 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13720 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72  ride long GetPar
13730 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e 74  amValueInt64(Int
13740 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
13750 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
13760 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
13770 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
13780 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13790 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
137a0 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23 65 6c  int64(ptr);..#el
137b0 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
137c0 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 36 34  ARD..      Int64
137d0 20 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20   value = 0;..   
137e0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
137f0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
13800 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72  alue_int64_inter
13810 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61 6c 75  op(ptr, ref valu
13820 65 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  e);..      retur
13830 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d  n value;..#else.
13840 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
13850 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
13860 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
13870 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
13880 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13890 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 50 61  ide string GetPa
138a0 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74  ramValueText(Int
138b0 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
138c0 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
138d0 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
138e0 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
138f0 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
13900 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
13910 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13920 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65  _value_text_inte
13930 72 6f 70 28 70 74 72 2c 20 72 65 66 20 6c 65 6e  rop(ptr, ref len
13940 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
13950 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
13960 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
13970 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13980 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
13990 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20 20 20  t(ptr),..       
139a0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
139b0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
139c0 75 65 5f 62 79 74 65 73 28 70 74 72 29 29 3b 0d  ue_bytes(ptr));.
139d0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
139e0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
139f0 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66 69  verride TypeAffi
13a00 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c  nity GetParamVal
13a10 75 65 54 79 70 65 28 49 6e 74 50 74 72 20 70 74  ueType(IntPtr pt
13a20 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
13a30 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
13a40 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13a50 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70  te3_value_type(p
13a60 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
13a70 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13a80 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
13a90 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74  Blob(IntPtr cont
13aa0 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  ext, byte[] valu
13ab0 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
13ac0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13ad0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
13ae0 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74  ult_blob(context
13af0 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c  , value, value.L
13b00 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28  ength, (IntPtr)(
13b10 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  -1));..    }....
13b20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
13b30 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
13b40 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63  nDouble(IntPtr c
13b50 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76  ontext, double v
13b60 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  alue)..    {..#i
13b70 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
13b80 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
13b90 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
13ba0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13bb0 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f  result_double(co
13bc0 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
13bd0 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
13be0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e  ANDARD..      Un
13bf0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13c00 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
13c10 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
13c20 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c  context, ref val
13c30 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
13c40 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
13c50 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
13c60 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
13c70 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
13c80 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
13c90 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72  void ReturnError
13ca0 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
13cb0 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
13cc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
13cd0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13ce0 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
13cf0 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54  error(context, T
13d00 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61  oUTF8(value), va
13d10 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  lue.Length);..  
13d20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
13d30 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
13d40 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e  d ReturnInt32(In
13d50 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e  tPtr context, in
13d60 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  t value)..    {.
13d70 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
13d80 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13d90 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
13da0 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
13db0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
13dc0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
13dd0 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28  oid ReturnInt64(
13de0 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
13df0 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  long value)..   
13e00 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
13e10 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
13e20 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RK..      Unsafe
13e30 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13e40 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
13e50 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  64(context, valu
13e60 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
13e70 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
13e80 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
13e90 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
13ea0 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65  esult_int64_inte
13eb0 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66  rop(context, ref
13ec0 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
13ed0 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
13ee0 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
13ef0 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
13f00 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
13f10 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13f20 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e  ide void ReturnN
13f30 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ull(IntPtr conte
13f40 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
13f50 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
13f60 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
13f70 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78  sult_null(contex
13f80 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
13f90 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13fa0 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54  ide void ReturnT
13fb0 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ext(IntPtr conte
13fc0 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  xt, string value
13fd0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
13fe0 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
13ff0 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  8(value);..     
14000 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14010 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
14020 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
14030 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c  , ToUTF8(value),
14040 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
14050 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
14060 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45     }....#if INTE
14070 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
14080 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  E..    /// <summ
14090 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
140a0 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
140b0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
140c0 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ry in order to c
140d0 72 65 61 74 65 20 61 20 64 69 73 70 6f 73 61 62  reate a disposab
140e0 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75  le..    /// modu
140f0 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
14100 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
14110 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
14120 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
14130 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
14140 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
14150 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  odule">..    ///
14160 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65   The module obje
14170 63 74 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  ct to be used wh
14180 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65 20  en creating the 
14190 6e 61 74 69 76 65 20 64 69 73 70 6f 73 61 62 6c  native disposabl
141a0 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f  e module...    /
141b0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
141c0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
141d0 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f  ="flags">..    /
141e0 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72  // The flags for
141f0 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
14200 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
14210 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20  eConnection" /> 
14220 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
14230 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
14240 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
14250 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
14260 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51 4c 69  reateModule(SQLi
14270 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c  teModule module,
14280 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
14290 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20  nFlags flags).. 
142a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
142b0 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
142c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
142d0 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
142e0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
142f0 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20  module");....   
14300 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
14310 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
14320 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64  onFlags.NoLogMod
14330 75 6c 65 29 20 21 3d 20 53 51 4c 69 74 65 43 6f  ule) != SQLiteCo
14340 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
14350 4c 6f 67 4d 6f 64 75 6c 65 29 0d 0a 20 20 20 20  LogModule)..    
14360 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14370 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 72 72     module.LogErr
14380 6f 72 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20  ors = ((flags & 
14390 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
143a0 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45  Flags.LogModuleE
143b0 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 43  rror) == SQLiteC
143c0 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
143d0 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29 3b 0d  ogModuleError);.
143e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64  .            mod
143f0 75 6c 65 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e  ule.LogException
14400 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51  s = ((flags & SQ
14410 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
14420 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63  ags.LogModuleExc
14430 65 70 74 69 6f 6e 29 20 3d 3d 20 53 51 4c 69 74  eption) == SQLit
14440 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
14450 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74  .LogModuleExcept
14460 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ion);..        }
14470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
14480 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
14490 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
144a0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
144b0 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e  tion("connection
144c0 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
144d0 68 61 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20  handle");....   
144e0 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65       SetLoadExte
144f0 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20  nsion(true);..  
14500 20 20 20 20 20 20 4c 6f 61 64 45 78 74 65 6e 73        LoadExtens
14510 69 6f 6e 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ion(UnsafeNative
14520 4d 65 74 68 6f 64 73 2e 53 51 4c 49 54 45 5f 44  Methods.SQLITE_D
14530 4c 4c 2c 20 22 73 71 6c 69 74 65 33 5f 76 74 73  LL, "sqlite3_vts
14540 68 69 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20  him_init");.... 
14550 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
14560 65 2e 43 72 65 61 74 65 44 69 73 70 6f 73 61 62  e.CreateDisposab
14570 6c 65 4d 6f 64 75 6c 65 28 5f 73 71 6c 29 29 0d  leModule(_sql)).
14580 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
14590 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64          if (_mod
145a0 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ules == null).. 
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
145c0 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20 44 69  modules = new Di
145d0 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
145e0 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 28 29   SQLiteModule>()
145f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14600 20 5f 6d 6f 64 75 6c 65 73 2e 41 64 64 28 6d 6f   _modules.Add(mo
14610 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c  dule.Name, modul
14620 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
14630 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29     if (_usePool)
14640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
14650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14660 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73   _usePool = fals
14670 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  e;....#if !NET_C
14680 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
14690 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
146b0 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55  race.WriteLine(U
146c0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
146d0 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
146e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
146f0 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
14700 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
14710 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14720 20 20 20 20 20 20 20 22 43 72 65 61 74 65 4d 6f         "CreateMo
14730 64 75 6c 65 20 28 50 6f 6f 6c 29 20 44 69 73 61  dule (Pool) Disa
14740 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  bled: {0}",..   
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28   HandleToString(
14770 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  )));..#endif..  
14780 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14790 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
147a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
147b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
147c0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
147d0 65 70 74 69 6f 6e 28 47 65 74 4c 61 73 74 45 72  eption(GetLastEr
147e0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
147f0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
14800 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
14810 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
14820 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
14830 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
14840 6f 72 64 65 72 20 74 6f 20 63 6c 65 61 6e 75 70  order to cleanup
14850 20 74 68 65 20 72 65 73 6f 75 72 63 65 73 0d 0a   the resources..
14860 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
14870 65 64 20 77 69 74 68 20 61 20 6d 6f 64 75 6c 65  ed with a module
14880 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
14890 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
148a0 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
148b0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
148c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
148d0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
148e0 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ule">..    /// T
148f0 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74  he module object
14900 20 70 72 65 76 69 6f 75 73 6c 79 20 70 61 73 73   previously pass
14910 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63  ed to the <see c
14920 72 65 66 3d 22 43 72 65 61 74 65 4d 6f 64 75 6c  ref="CreateModul
14930 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d  e" />..    /// m
14940 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ethod...    /// 
14950 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
14960 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
14970 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
14980 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68  The flags for th
14990 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65  e associated <se
149a0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
149b0 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a  nnection" /> obj
149c0 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
149d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
149e0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
149f0 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70  erride void Disp
14a00 6f 73 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65  oseModule(SQLite
14a10 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53  Module module, S
14a20 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
14a30 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20  lags flags)..   
14a40 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
14a50 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
14a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
14a70 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
14a80 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f  ullException("mo
14a90 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dule");....     
14aa0 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73     module.Dispos
14ab0 65 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e  e();..    }..#en
14ac0 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  dif....    inter
14ad0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e 74  nal override Int
14ae0 50 74 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e  Ptr AggregateCon
14af0 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  text(IntPtr cont
14b00 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ext)..    {..   
14b10 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
14b20 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14b30 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
14b40 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  context(context,
14b50 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23   1);..    }....#
14b60 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  if INTEROP_VIRTU
14b70 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f  AL_TABLE..    //
14b80 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
14b90 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e   /// Calls the n
14ba0 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72  ative SQLite cor
14bb0 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64  e library in ord
14bc0 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20  er to declare a 
14bd0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
14be0 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e     /// in respon
14bf0 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74  se to a call int
14c00 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
14c10 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
14c20 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e  dule.xCreate" />
14c30 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65  ..    /// or <se
14c40 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
14c50 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
14c60 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c  nect" /> virtual
14c70 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d   table methods..
14c80 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
14c90 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
14ca0 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
14cb0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
14cc0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f  virtual table mo
14cd0 64 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20  dule that is to 
14ce0 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  be responsible f
14cf0 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  or the virtual t
14d00 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  able..    /// be
14d10 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
14d20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
14d30 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
14d40 6e 61 6d 65 3d 22 73 74 72 53 71 6c 22 3e 0d 0a  name="strSql">..
14d50 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74 72 69      /// The stri
14d60 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
14d70 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
14d80 64 65 73 63 72 69 62 69 6e 67 20 74 68 65 20 76  describing the v
14d90 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 6f 0d  irtual table to.
14da0 0a 20 20 20 20 2f 2f 2f 20 62 65 20 64 65 63 6c  .    /// be decl
14db0 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ared...    /// <
14dc0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
14dd0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72   <param name="er
14de0 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55  ror">..    /// U
14df0 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65  pon success, the
14e00 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 69   contents of thi
14e10 73 20 70 61 72 61 6d 65 74 65 72 20 61 72 65 20  s parameter are 
14e20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e  undefined.  Upon
14e30 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f   failure,..    /
14e40 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e  // it should con
14e50 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72 69  tain an appropri
14e60 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ate error messag
14e70 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
14e80 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
14e90 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
14ea0 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
14eb0 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
14ec0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
14ed0 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
14ee0 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
14ef0 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61  eErrorCode Decla
14f00 72 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28 0d  reVirtualTable(.
14f10 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d  .        SQLiteM
14f20 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20  odule module,.. 
14f30 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74         string st
14f40 72 53 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20 72  rSql,..        r
14f50 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
14f60 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
14f70 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  {..        if (_
14f80 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
14f90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14fa0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f       error = "co
14fb0 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
14fc0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b  invalid handle";
14fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
14fe0 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
14ff0 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
15000 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
15010 20 20 49 6e 74 50 74 72 20 70 53 71 6c 20 3d 20    IntPtr pSql = 
15020 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
15030 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
15040 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15050 20 20 20 20 70 53 71 6c 20 3d 20 53 51 4c 69 74      pSql = SQLit
15060 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50  eString.Utf8IntP
15070 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 73 74 72  trFromString(str
15080 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Sql);....       
15090 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
150a0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
150b0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
150c0 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
150d0 62 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b(..            
150e0 20 20 20 20 5f 73 71 6c 2c 20 70 53 71 6c 29 3b      _sql, pSql);
150f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15100 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65  if ((n == SQLite
15110 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26  ErrorCode.Ok) &&
15120 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e 75 6c 6c   (module != null
15130 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
15140 20 20 20 20 6d 6f 64 75 6c 65 2e 44 65 63 6c 61      module.Decla
15150 72 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  red = true;.... 
15160 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
15170 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
15180 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20  ode.Ok) error = 
15190 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d  GetLastError();.
151a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
151b0 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20  eturn n;..      
151c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
151d0 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
151e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
151f0 28 70 53 71 6c 20 21 3d 20 49 6e 74 50 74 72 2e  (pSql != IntPtr.
15200 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
15210 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15220 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
15230 72 79 2e 46 72 65 65 28 70 53 71 6c 29 3b 0d 0a  ry.Free(pSql);..
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65  pSql = IntPtr.Ze
15260 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
15270 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
15280 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
15290 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
152a0 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74  // Calls the nat
152b0 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  ive SQLite core 
152c0 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72  library in order
152d0 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20 76 69   to declare a vi
152e0 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
152f0 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 69 6e   /// function in
15300 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63   response to a c
15310 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65  all into the <se
15320 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
15330 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65  ativeModule.xCre
15340 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  ate" />..    ///
15350 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49   or <see cref="I
15360 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
15370 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  le.xConnect" /> 
15380 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65  virtual table me
15390 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  thods...    /// 
153a0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
153b0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
153c0 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f  "module">..    /
153d0 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20 74  // The virtual t
153e0 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74  able module that
153f0 20 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e   is to be respon
15400 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69  sible for the vi
15410 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
15420 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 62 65   /// function be
15430 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
15440 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
15450 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
15460 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 43 6f  name="argumentCo
15470 75 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  unt">..    /// T
15480 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
15490 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75  uments to the fu
154a0 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63  nction being dec
154b0 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lared...    /// 
154c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
154d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
154e0 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
154f0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
15500 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65  unction being de
15510 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  clared...    ///
15520 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
15530 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
15540 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f  error">..    ///
15550 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
15560 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  he contents of t
15570 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 61 72  his parameter ar
15580 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70  e undefined.  Up
15590 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20  on failure,..   
155a0 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63   /// it should c
155b0 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70  ontain an approp
155c0 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73  riate error mess
155d0 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  age...    /// </
155e0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
155f0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
15600 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
15610 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
15620 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
15630 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
15640 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
15650 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63  iteErrorCode Dec
15660 6c 61 72 65 56 69 72 74 75 61 6c 46 75 6e 63 74  lareVirtualFunct
15670 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ion(..        SQ
15680 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
15690 65 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  e,..        int 
156a0 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a  argumentCount,..
156b0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
156c0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  ame,..        re
156d0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
156e0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
156f0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
15700 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
15710 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15720 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e      error = "con
15730 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69  nection has an i
15740 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d  nvalid handle";.
15750 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
15760 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
15770 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
15780 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
15790 20 49 6e 74 50 74 72 20 70 4e 61 6d 65 20 3d 20   IntPtr pName = 
157a0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
157b0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
157c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
157d0 20 20 20 20 70 4e 61 6d 65 20 3d 20 53 51 4c 69      pName = SQLi
157e0 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74  teString.Utf8Int
157f0 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 6e 61  PtrFromString(na
15800 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
15810 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
15820 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
15830 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
15840 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e  te3_overload_fun
15850 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
15860 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 4e          _sql, pN
15870 61 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75  ame, argumentCou
15880 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
15890 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
158a0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
158b0 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74   error = GetLast
158c0 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  Error();....    
158d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
158e0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
158f0 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
15900 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15910 20 20 20 20 20 20 69 66 20 28 70 4e 61 6d 65 20        if (pName 
15920 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
15930 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15950 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
15960 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  e(pName);..     
15970 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65             pName
15980 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
15990 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
159a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
159b0 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
159c0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
159d0 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f     /// Enables o
159e0 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e  r disabled exten
159f0 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20  sion loading by 
15a00 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f  SQLite...    ///
15a10 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
15a20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
15a30 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20  ="bOnOff">..    
15a40 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62  /// True to enab
15a50 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78  le loading of ex
15a60 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20  tensions, false 
15a70 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20  to disable...   
15a80 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
15a90 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
15aa0 72 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f 61  ride void SetLoa
15ab0 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20  dExtension(bool 
15ac0 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a  bOnOff)..    {..
15ad0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
15ae0 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
15af0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
15b00 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c  sqlite3_enable_l
15b10 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a  oad_extension(..
15b20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
15b30 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
15b40 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   0));....       
15b50 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
15b60 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
15b70 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
15b80 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
15b90 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
15ba0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
15bb0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
15bc0 20 4c 6f 61 64 73 20 61 20 53 51 4c 69 74 65 20   Loads a SQLite 
15bd0 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72  extension librar
15be0 79 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64  y from the named
15bf0 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   file...    /// 
15c00 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
15c10 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
15c20 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
15c30 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
15c40 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c 69 6e   the dynamic lin
15c50 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 63  k library file c
15c60 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78  ontaining the ex
15c70 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  tension...    //
15c80 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
15c90 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
15ca0 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20 20  "procName">..   
15cb0 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
15cc0 20 74 68 65 20 65 78 70 6f 72 74 65 64 20 66 75   the exported fu
15cd0 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 69  nction used to i
15ce0 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 65 78  nitialize the ex
15cf0 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  tension...    //
15d00 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20 64  / If null, the d
15d10 65 66 61 75 6c 74 20 22 73 71 6c 69 74 65 33 5f  efault "sqlite3_
15d20 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22 20  extension_init" 
15d30 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20  will be used... 
15d40 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
15d50 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
15d60 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 61 64  erride void Load
15d70 45 78 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e 67  Extension(string
15d80 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69 6e   fileName, strin
15d90 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20 20  g procName)..   
15da0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
15db0 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  fileName == null
15dc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
15dd0 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
15de0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
15df0 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  fileName");.... 
15e00 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 45         IntPtr pE
15e10 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
15e20 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
15e30 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
15e40 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
15e50 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 20 3d  ] utf8FileName =
15e60 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54   UTF8Encoding.UT
15e70 46 38 2e 47 65 74 42 79 74 65 73 28 66 69 6c 65  F8.GetBytes(file
15e80 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 20  Name + '\0');.. 
15e90 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
15ea0 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d  ] utf8ProcName =
15eb0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
15ec0 20 20 20 20 20 20 69 66 20 28 70 72 6f 63 4e 61        if (procNa
15ed0 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66               utf
15ef0 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46 38  8ProcName = UTF8
15f00 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65  Encoding.UTF8.Ge
15f10 74 42 79 74 65 73 28 70 72 6f 63 4e 61 6d 65 20  tBytes(procName 
15f20 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20 20  + '\0');....    
15f30 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
15f40 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
15f50 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
15f60 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
15f70 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ension(..       
15f80 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 75           _sql, u
15f90 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74 66  tf8FileName, utf
15fa0 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20 70  8ProcName, ref p
15fb0 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
15fc0 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
15fd0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
15fe0 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
15ff0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
16000 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
16010 2c 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  , UTF8ToString(p
16020 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20 20  Error, -1));..  
16030 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16040 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
16050 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16060 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20 49   if (pError != I
16070 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
16080 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16090 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
160a0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
160b0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 45 72  sqlite3_free(pEr
160c0 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
160d0 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
160e0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
160f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16100 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
16110 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73  .    /// Enables
16120 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74   or disabled ext
16130 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64  ended result cod
16140 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 53  es returned by S
16150 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65 72  QLite..    inter
16160 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
16170 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65 73  d SetExtendedRes
16180 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f  ultCodes(bool bO
16190 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nOff)..    {..  
161a0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
161b0 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
161c0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
161d0 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73  te3_extended_res
161e0 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20 20  ult_codes(..    
161f0 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e        _sql, (bOn
16200 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d  Off ? -1 : 0));.
16210 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ...      if (n !
16220 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
16230 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
16240 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
16250 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
16260 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ));..    }..    
16270 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73  /// Gets the las
16280 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63  t SQLite error c
16290 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ode..    interna
162a0 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
162b0 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 75 6c  eErrorCode Resul
162c0 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a  tCode()..    {..
162d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
162e0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
162f0 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65  .sqlite3_errcode
16300 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (_sql);..    }..
16310 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65      /// Gets the
16320 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78 74   last SQLite ext
16330 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65  ended error code
16340 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
16350 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
16360 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65 64  rorCode Extended
16370 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20  ResultCode()..  
16380 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
16390 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
163a0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
163b0 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 5f  tended_errcode(_
163c0 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
163d0 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f      /// Add a lo
163e0 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68  g message via th
163f0 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33  e SQLite sqlite3
16400 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d  _log interface..
16410 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
16420 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d  erride void LogM
16430 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72 72  essage(SQLiteErr
16440 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c  orCode iErrCode,
16450 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65   string zMessage
16460 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
16470 53 74 61 74 69 63 4c 6f 67 4d 65 73 73 61 67 65  StaticLogMessage
16480 28 69 45 72 72 43 6f 64 65 2c 20 7a 4d 65 73 73  (iErrCode, zMess
16490 61 67 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  age);..    }....
164a0 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f      /// Add a lo
164b0 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68  g message via th
164c0 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33  e SQLite sqlite3
164d0 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d  _log interface..
164e0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
164f0 61 74 69 63 20 76 6f 69 64 20 53 74 61 74 69 63  atic void Static
16500 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74  LogMessage(SQLit
16510 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72 43  eErrorCode iErrC
16520 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73  ode, string zMes
16530 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sage)..    {..  
16540 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
16550 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16560 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c 20 54 6f  log(iErrCode, To
16570 55 54 46 38 28 7a 4d 65 73 73 61 67 65 29 29 3b  UTF8(zMessage));
16580 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49  ..    }....#if I
16590 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 7c 7c 20  NTEROP_CODEC || 
165a0 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
165b0 53 45 45 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  SEE..    interna
165c0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
165d0 53 65 74 50 61 73 73 77 6f 72 64 28 62 79 74 65  SetPassword(byte
165e0 5b 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  [] passwordBytes
165f0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
16600 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
16610 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
16620 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16630 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f  key(_sql, passwo
16640 72 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72  rdBytes, passwor
16650 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d  dBytes.Length);.
16660 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
16670 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
16680 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
16690 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
166a0 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
166b0 3b 0d 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f  ;..      _usePoo
166c0 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  l = false;..    
166d0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
166e0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
166f0 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62  ChangePassword(b
16700 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72  yte[] newPasswor
16710 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a  dBytes)..    {..
16720 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
16730 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
16740 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
16750 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c  lite3_rekey(_sql
16760 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  , newPasswordByt
16770 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64  es, (newPassword
16780 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f  Bytes == null) ?
16790 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64   0 : newPassword
167a0 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  Bytes.Length);..
167b0 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
167c0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
167d0 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
167e0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
167f0 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
16800 0d 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c  ..      _usePool
16810 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d   = false;..    }
16820 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
16830 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
16840 65 20 76 6f 69 64 20 53 65 74 50 72 6f 67 72 65  e void SetProgre
16850 73 73 48 6f 6f 6b 28 69 6e 74 20 6e 4f 70 73 2c  ssHook(int nOps,
16860 20 53 51 4c 69 74 65 50 72 6f 67 72 65 73 73 43   SQLiteProgressC
16870 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
16880 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 55 6e     {..        Un
16890 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
168a0 73 2e 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65  s.sqlite3_progre
168b0 73 73 5f 68 61 6e 64 6c 65 72 28 5f 73 71 6c 2c  ss_handler(_sql,
168c0 20 6e 4f 70 73 2c 20 66 75 6e 63 2c 20 49 6e 74   nOps, func, Int
168d0 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
168e0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
168f0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
16900 53 65 74 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f  SetAuthorizerHoo
16910 6b 28 53 51 4c 69 74 65 41 75 74 68 6f 72 69 7a  k(SQLiteAuthoriz
16920 65 72 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  erCallback func)
16930 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
16940 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
16950 64 73 2e 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ds.sqlite3_set_a
16960 75 74 68 6f 72 69 7a 65 72 28 5f 73 71 6c 2c 20  uthorizer(_sql, 
16970 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
16980 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
16990 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
169a0 69 64 65 20 76 6f 69 64 20 53 65 74 55 70 64 61  ide void SetUpda
169b0 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64  teHook(SQLiteUpd
169c0 61 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  ateCallback func
169d0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
169e0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
169f0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75 70 64 61  ods.sqlite3_upda
16a00 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75  te_hook(_sql, fu
16a10 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
16a20 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
16a30 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
16a40 65 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74  e void SetCommit
16a50 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69  Hook(SQLiteCommi
16a60 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  tCallback func).
16a70 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
16a80 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
16a90 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74  s.sqlite3_commit
16aa0 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63  _hook(_sql, func
16ab0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
16ac0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
16ad0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
16ae0 76 6f 69 64 20 53 65 74 54 72 61 63 65 43 61 6c  void SetTraceCal
16af0 6c 62 61 63 6b 28 53 51 4c 69 74 65 54 72 61 63  lback(SQLiteTrac
16b00 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  eCallback func).
16b10 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
16b20 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
16b30 73 2e 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  s.sqlite3_trace(
16b40 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
16b50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
16b60 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
16b70 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
16b80 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53  etRollbackHook(S
16b90 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c  QLiteRollbackCal
16ba0 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
16bb0 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
16bc0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
16bd0 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68  lite3_rollback_h
16be0 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20  ook(_sql, func, 
16bf0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
16c00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
16c10 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
16c20 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20 73 65  // Allows the se
16c30 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69  tting of a loggi
16c40 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f  ng callback invo
16c50 6b 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68  ked by SQLite wh
16c60 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f  en a..    /// lo
16c70 67 20 65 76 65 6e 74 20 6f 63 63 75 72 73 2e 20  g event occurs. 
16c80 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61   Only one callba
16c90 63 6b 20 6d 61 79 20 62 65 20 73 65 74 2e 20 20  ck may be set.  
16ca0 49 66 20 4e 55 4c 4c 20 69 73 20 70 61 73 73 65  If NULL is passe
16cb0 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20  d,..    /// the 
16cc0 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
16cd0 20 69 73 20 75 6e 72 65 67 69 73 74 65 72 65 64   is unregistered
16ce0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
16cf0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
16d00 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
16d10 22 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 66  ">The callback f
16d20 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b  unction to invok
16d30 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
16d40 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
16d50 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f  urns a result co
16d60 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  de</returns>..  
16d70 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
16d80 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
16d90 6f 64 65 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61  ode SetLogCallba
16da0 63 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c  ck(SQLiteLogCall
16db0 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
16dc0 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
16dd0 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
16de0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
16df0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66  ods.sqlite3_conf
16e00 69 67 5f 6c 6f 67 28 0d 0a 20 20 20 20 20 20 20  ig_log(..       
16e10 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
16e20 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  gOpsEnum.SQLITE_
16e30 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66 75 6e 63  CONFIG_LOG, func
16e40 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
16e50 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
16e60 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n rc;..    }....
16e70 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ed0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
16ee0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
16ef0 2f 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 20  / Creates a new 
16f00 53 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f 62  SQLite backup ob
16f10 6a 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74 68  ject based on th
16f20 65 20 70 72 6f 76 69 64 65 64 20 64 65 73 74 69  e provided desti
16f30 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  nation..    /// 
16f40 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
16f50 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63 65  ion.  The source
16f60 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
16f70 74 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d  tion is the one.
16f80 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61  .    /// associa
16f90 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 62  ted with this ob
16fa0 6a 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72 63  ject.  The sourc
16fb0 65 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69 6f  e and destinatio
16fc0 6e 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  n database..    
16fd0 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  /// connections 
16fe0 63 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73 61  cannot be the sa
16ff0 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  me...    /// </s
17000 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
17010 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65   <param name="de
17020 73 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74 69  stCnn">The desti
17030 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20  nation database 
17040 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72  connection.</par
17050 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
17060 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61  ram name="destNa
17070 6d 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74  me">The destinat
17080 69 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61 6d  ion database nam
17090 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
170a0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
170b0 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68 65  "sourceName">The
170c0 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
170d0 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a   name.</param>..
170e0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
170f0 3e 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74  >The newly creat
17100 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  ed backup object
17110 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
17120 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
17130 64 65 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20  de SQLiteBackup 
17140 49 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75 70  InitializeBackup
17150 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
17160 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74  eConnection dest
17170 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  Cnn,..        st
17180 72 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a  ring destName,..
17190 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
171a0 6f 75 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20 20  ourceName..     
171b0 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
171c0 20 20 20 20 20 69 66 20 28 64 65 73 74 43 6e 6e       if (destCnn
171d0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
171e0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
171f0 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
17200 65 70 74 69 6f 6e 28 22 64 65 73 74 43 6e 6e 22  eption("destCnn"
17210 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
17220 20 28 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e 75   (destName == nu
17230 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
17240 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
17250 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
17260 28 22 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d  ("destName");...
17270 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f 75  .        if (sou
17280 72 63 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  rceName == null)
17290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
172a0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
172b0 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 73  NullException("s
172c0 6f 75 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a  ourceName");....
172d0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 33 20          SQLite3 
172e0 64 65 73 74 53 71 6c 69 74 65 33 20 3d 20 64 65  destSqlite3 = de
172f0 73 74 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53 51  stCnn._sql as SQ
17300 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20 20  Lite3;....      
17310 20 20 69 66 20 28 64 65 73 74 53 71 6c 69 74 65    if (destSqlite
17320 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  3 == null)..    
17330 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
17340 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74  w ArgumentExcept
17350 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
17360 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74 69        "Destinati
17370 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  on connection ha
17380 73 20 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c 0d  s no wrapper.",.
17390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
173a0 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a   "destCnn");....
173b0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
173c0 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64  nnectionHandle d
173d0 65 73 74 48 61 6e 64 6c 65 20 3d 20 64 65 73 74  estHandle = dest
173e0 53 71 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d  Sqlite3._sql;...
173f0 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73  .        if (des
17400 74 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  tHandle == null)
17410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
17420 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
17430 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
17440 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73              "Des
17450 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  tination connect
17460 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
17470 69 64 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20  id handle.",..  
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64                "d
17490 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20  estCnn");....   
174a0 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
174b0 63 74 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75 72  ctionHandle sour
174c0 63 65 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b  ceHandle = _sql;
174d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
174e0 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d 20  sourceHandle == 
174f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17500 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
17510 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
17520 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
17530 20 20 20 20 20 20 20 20 20 22 53 6f 75 72 63 65           "Source
17540 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
17550 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
17560 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
17570 20 62 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61 6d   byte[] zDestNam
17580 65 20 3d 20 54 6f 55 54 46 38 28 64 65 73 74 4e  e = ToUTF8(destN
17590 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62  ame);..        b
175a0 79 74 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61 6d  yte[] zSourceNam
175b0 65 20 3d 20 54 6f 55 54 46 38 28 73 6f 75 72 63  e = ToUTF8(sourc
175c0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
175d0 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
175e0 61 6e 64 6c 65 20 62 61 63 6b 75 70 48 61 6e 64  andle backupHand
175f0 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  le = null;....  
17600 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
17610 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17620 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
17630 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
17640 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
17650 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
17660 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
17670 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
17680 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
17690 74 72 20 62 61 63 6b 75 70 20 3d 20 55 6e 73 61  tr backup = Unsa
176a0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
176b0 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69  sqlite3_backup_i
176c0 6e 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  nit(..          
176d0 20 20 20 20 20 20 64 65 73 74 48 61 6e 64 6c 65        destHandle
176e0 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75  , zDestName, sou
176f0 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72  rceHandle, zSour
17700 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  ceName);....    
17710 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
17720 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  up == IntPtr.Zer
17730 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
17740 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17750 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
17760 64 65 20 72 65 73 75 6c 74 43 6f 64 65 20 3d 20  de resultCode = 
17770 52 65 73 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d  ResultCode();...
17780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17790 20 69 66 20 28 72 65 73 75 6c 74 43 6f 64 65 20   if (resultCode 
177a0 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
177b0 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
177c0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
177d0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
177e0 70 74 69 6f 6e 28 72 65 73 75 6c 74 43 6f 64 65  ption(resultCode
177f0 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
17800 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
17810 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
17830 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
17840 63 65 70 74 69 6f 6e 28 22 66 61 69 6c 65 64 20  ception("failed 
17850 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 62 61  to initialize ba
17860 63 6b 75 70 22 29 3b 0d 0a 20 20 20 20 20 20 20  ckup");..       
17870 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
17880 20 20 20 20 20 20 62 61 63 6b 75 70 48 61 6e 64        backupHand
17890 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 42  le = new SQLiteB
178a0 61 63 6b 75 70 48 61 6e 64 6c 65 28 64 65 73 74  ackupHandle(dest
178b0 48 61 6e 64 6c 65 2c 20 62 61 63 6b 75 70 29 3b  Handle, backup);
178c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
178d0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
178e0 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
178f0 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e  d(null, new Conn
17900 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28  ectionEventArgs(
17910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
17920 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
17930 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
17940 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
17950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 75  ..            nu
17960 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20  ll, null, null, 
17970 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 6e 75  backupHandle, nu
17980 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  ll, new object[]
17990 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
179a0 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c  typeof(SQLite3),
179b0 20 64 65 73 74 43 6e 6e 2c 20 64 65 73 74 4e 61   destCnn, destNa
179c0 6d 65 2c 20 73 6f 75 72 63 65 4e 61 6d 65 20 7d  me, sourceName }
179d0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ));....        r
179e0 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65  eturn new SQLite
179f0 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
17a00 20 20 20 20 20 74 68 69 73 2c 20 62 61 63 6b 75       this, backu
17a10 70 48 61 6e 64 6c 65 2c 20 64 65 73 74 48 61 6e  pHandle, destHan
17a20 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20  dle, zDestName, 
17a30 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d 0a 20  sourceHandle,.. 
17a40 20 20 20 20 20 20 20 20 20 20 20 7a 53 6f 75 72             zSour
17a50 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d  ceName);..    }.
17a60 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
17a70 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f  ary>..    /// Co
17a80 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70 61 67  pies up to N pag
17a90 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72  es from the sour
17aa0 63 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  ce database to t
17ab0 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a  he destination..
17ac0 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
17ad0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
17ae0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62   the specified b
17af0 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
17b00 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
17b10 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
17b20 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
17b30 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
17b40 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d  t to use.</param
17b50 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
17b60 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d  m name="nPage">.
17b70 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d  .    /// The num
17b80 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
17b90 63 6f 70 79 2c 20 6e 65 67 61 74 69 76 65 20 74  copy, negative t
17ba0 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69  o copy all remai
17bb0 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20 20  ning pages...   
17bc0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
17bd0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
17be0 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20 20  me="retry">..   
17bf0 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72 75 65   /// Set to true
17c00 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   if the operatio
17c10 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  n needs to be re
17c20 74 72 69 65 64 20 64 75 65 20 74 6f 20 64 61 74  tried due to dat
17c30 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c  abase..    /// l
17c40 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 3b 20 6f  ocking issues; o
17c50 74 68 65 72 77 69 73 65 2c 20 73 65 74 20 74 6f  therwise, set to
17c60 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f   false...    ///
17c70 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
17c80 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
17c90 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74 68    /// True if th
17ca0 65 72 65 20 61 72 65 20 6d 6f 72 65 20 70 61 67  ere are more pag
17cb0 65 73 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2c  es to be copied,
17cc0 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65   false otherwise
17cd0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
17ce0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
17cf0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
17d00 6c 20 53 74 65 70 42 61 63 6b 75 70 28 0d 0a 20  l StepBackup(.. 
17d10 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
17d20 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20  kup backup,..   
17d30 20 20 20 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d       int nPage,.
17d40 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
17d50 6c 20 72 65 74 72 79 0d 0a 20 20 20 20 20 20 20  l retry..       
17d60 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
17d70 20 20 20 72 65 74 72 79 20 3d 20 66 61 6c 73 65     retry = false
17d80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
17d90 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
17da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
17db0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
17dc0 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
17dd0 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
17de0 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
17df0 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
17e00 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
17e10 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
17e20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
17e30 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17e40 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
17e50 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
17e60 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
17e70 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
17e80 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
17e90 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
17ea0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
17eb0 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
17ec0 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
17ed0 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
17ee0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
17ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
17f00 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
17f10 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
17f20 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
17f30 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
17f40 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
17f50 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
17f60 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
17f70 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
17f80 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
17f90 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
17fa0 62 61 63 6b 75 70 5f 73 74 65 70 28 68 61 6e 64  backup_step(hand
17fb0 6c 65 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a  lePtr, nPage);..
17fc0 20 20 20 20 20 20 20 20 62 61 63 6b 75 70 2e 5f          backup._
17fd0 73 74 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20  stepResult = n; 
17fe0 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f  /* NOTE: Save fo
17ff0 72 20 75 73 65 20 62 79 20 46 69 6e 69 73 68 42  r use by FinishB
18000 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20  ackup. */....   
18010 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
18020 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
18030 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
18040 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18050 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
18060 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20  }..        else 
18070 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
18080 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a  rrorCode.Busy)..
18090 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
180a0 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74         retry = t
180b0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
180c0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
180d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
180e0 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
180f0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
18100 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20 20  .Locked)..      
18110 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18120 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a   retry = true;..
18130 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18140 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
18150 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
18160 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
18170 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29  eErrorCode.Done)
18180 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
18190 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
181a0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
181b0 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
181c0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
181d0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
181e0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
181f0 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
18200 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  r());..        }
18210 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
18220 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
18230 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
18240 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
18250 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62  s remaining to b
18260 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  e copied from th
18270 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f  e source..    //
18280 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  / database to th
18290 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  e destination da
182a0 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
182b0 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  d with the speci
182c0 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61  fied..    /// ba
182d0 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  ckup object...  
182e0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
182f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
18300 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
18310 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
18320 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61   to check.</para
18330 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
18340 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20  urns>The number 
18350 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69  of pages remaini
18360 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2e  ng to be copied.
18370 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
18380 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
18390 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42  e int RemainingB
183a0 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
183b0 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63  SQLiteBackup bac
183c0 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  kup..        )..
183d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
183e0 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
183f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
18400 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
18410 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
18420 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
18430 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
18440 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
18450 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
18460 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
18470 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
18480 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
18490 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
184a0 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
184b0 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
184c0 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
184d0 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
184e0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
184f0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
18500 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
18510 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
18520 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
18530 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
18540 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
18550 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
18560 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
18570 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
18580 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
18590 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
185a0 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
185b0 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  er.");....      
185c0 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
185d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
185e0 69 74 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61  ite3_backup_rema
185f0 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74 72 29  ining(handlePtr)
18600 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
18610 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
18620 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
18630 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
18640 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
18650 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
18660 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
18670 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70 65  /// with the spe
18680 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62  cified backup ob
18690 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
186a0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
186b0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
186c0 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
186d0 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65  up object to che
186e0 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ck.</param>..   
186f0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
18700 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
18710 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
18720 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 2e 3c  ource database.<
18730 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
18740 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
18750 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74 42 61   int PageCountBa
18760 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
18770 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
18780 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  up..        ).. 
18790 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
187a0 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
187b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
187c0 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
187d0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
187e0 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
187f0 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
18800 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
18810 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
18820 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
18830 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
18840 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18850 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
18860 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
18870 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
18880 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
18890 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
188a0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
188b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
188c0 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
188d0 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
188e0 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
188f0 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
18900 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
18910 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
18920 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
18930 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
18940 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
18950 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
18960 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
18970 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r.");....       
18980 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
18990 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
189a0 74 65 33 5f 62 61 63 6b 75 70 5f 70 61 67 65 63  te3_backup_pagec
189b0 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74 72 29 3b  ount(handlePtr);
189c0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
189d0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
189e0 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20 74    /// Destroys t
189f0 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
18a00 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61  , rolling back a
18a10 6e 79 20 62 61 63 6b 75 70 20 74 68 61 74 20 6d  ny backup that m
18a20 61 79 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f  ay be in..    //
18a30 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20  / progess...    
18a40 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
18a50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
18a60 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
18a70 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
18a80 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61  o destroy.</para
18a90 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
18aa0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 46   override void F
18ab0 69 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a 20 20  inishBackup(..  
18ac0 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
18ad0 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20  up backup..     
18ae0 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
18af0 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
18b00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
18b10 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
18b20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
18b30 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
18b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
18b50 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
18b60 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
18b70 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
18b80 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
18b90 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
18ba0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
18bb0 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
18bc0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
18bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18be0 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
18bf0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
18c00 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
18c10 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
18c20 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
18c30 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
18c40 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
18c50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
18c60 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
18c70 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
18c80 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
18c90 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
18ca0 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
18cb0 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
18cc0 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
18cd0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
18ce0 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51  DARD..        SQ
18cf0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
18d00 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
18d10 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
18d20 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65  ckup_finish_inte
18d30 72 6f 70 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  rop(handlePtr);.
18d40 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
18d50 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
18d60 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
18d70 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
18d80 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61  backup_finish(ha
18d90 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6e 64 69  ndlePtr);..#endi
18da0 66 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c  f..        handl
18db0 65 2e 53 65 74 48 61 6e 64 6c 65 41 73 49 6e 76  e.SetHandleAsInv
18dc0 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66 20 43  alid();....#if C
18dd0 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20 20 20  OUNT_HANDLE..   
18de0 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53       if ((n == S
18df0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
18e00 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20 62 61 63 6b  k) || (n == back
18e10 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29  up._stepResult))
18e20 20 68 61 6e 64 6c 65 2e 57 61 73 52 65 6c 65 61   handle.WasRelea
18e30 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69 66  sedOk();..#endif
18e40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
18e50 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
18e60 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e 20  rCode.Ok) && (n 
18e70 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52  != backup._stepR
18e80 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20  esult))..       
18e90 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
18ea0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
18eb0 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
18ec0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
18ed0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f30 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
18f40 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
18f50 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65  etermines if the
18f60 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
18f70 72 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e  rary has been in
18f80 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68  itialized for th
18f90 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65  e..    /// curre
18fa0 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20  nt process...   
18fb0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
18fc0 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
18fd0 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f  s>..    /// A bo
18fe0 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67  olean indicating
18ff0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
19000 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
19010 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
19020 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61  ..    /// initia
19030 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75  lized for the cu
19040 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
19050 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
19060 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
19070 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49   override bool I
19080 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a  sInitialized()..
19090 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
190a0 65 74 75 72 6e 20 53 74 61 74 69 63 49 73 49 6e  eturn StaticIsIn
190b0 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20 20  itialized();..  
190c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
190d0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
190e0 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
190f0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
19100 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
19110 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
19120 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
19130 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
19140 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
19150 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
19160 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
19170 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74   boolean indicat
19180 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
19190 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ot the SQLite co
191a0 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
191b0 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69  een..    /// ini
191c0 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
191d0 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
191e0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
191f0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
19200 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  nal static bool 
19210 53 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69  StaticIsInitiali
19220 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  zed()..    {..  
19230 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19240 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 50 72 65    // BUGFIX: Pre
19250 76 65 6e 74 20 72 61 63 65 73 20 77 69 74 68 20  vent races with 
19260 6f 74 68 65 72 20 74 68 72 65 61 64 73 20 66 6f  other threads fo
19270 72 20 74 68 69 73 20 65 6e 74 69 72 65 20 62 6c  r this entire bl
19280 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20 20  ock, due..      
19290 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74 6f 20    //         to 
192a0 74 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79 20  the try/finally 
192b0 73 65 6d 61 6e 74 69 63 73 2e 20 20 53 65 65 20  semantics.  See 
192c0 74 69 63 6b 65 74 20 5b 37 32 39 30 35 63 39 61  ticket [72905c9a
192d0 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  77]...        //
192e0 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28  ..        lock (
192f0 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
19300 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19310 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
19320 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65 20    // NOTE: Save 
19330 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
19340 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73 20 61   logging class a
19350 6e 64 20 74 68 65 6e 20 72 65 73 74 6f 72 65 20  nd then restore 
19360 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  it..            
19370 2f 2f 20 20 20 20 20 20 20 61 66 74 65 72 20 77  //       after w
19380 65 20 61 72 65 20 64 6f 6e 65 20 74 6f 20 61 76  e are done to av
19390 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f 20  oid logging too 
193a0 6d 61 6e 79 20 66 61 6c 73 65 20 65 72 72 6f 72  many false error
193b0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
193c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
193d0 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c 65  bool savedEnable
193e0 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e  d = SQLiteLog.En
193f0 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  abled;..        
19400 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e      SQLiteLog.En
19410 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a  abled = false;..
19420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
19430 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
19440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19450 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
19460 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
19470 68 69 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d 75  his method [ab]u
19480 73 65 73 20 74 68 65 20 66 61 63 74 20 74 68 61  ses the fact tha
19490 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c  t SQLite will al
194a0 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ways..          
194b0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
194c0 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
194d0 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f  OR for any unkno
194e0 77 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  wn configuration
194f0 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20   option..       
19500 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
19510 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20 53    *unless* the S
19520 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 68 61  QLite library ha
19530 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69  s already been i
19540 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20  nitialized...   
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
19560 20 20 20 20 20 20 49 6e 20 74 68 61 74 20 63 61        In that ca
19570 73 65 20 69 74 20 77 69 6c 6c 20 61 6c 77 61 79  se it will alway
19580 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  s return SQLITE_
19590 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20 20 20 20  MISUSE...       
195a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
195c0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
195d0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
195e0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
195f0 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20  nfig_none(..    
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
19620 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
19630 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20  G_NONE);....    
19640 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19650 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  rn (rc == SQLite
19660 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65  ErrorCode.Misuse
19670 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
19680 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  }..            f
19690 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
196a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
196b0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
196c0 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64  .Enabled = saved
196d0 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20  Enabled;..      
196e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
196f0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
19700 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
19710 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66      /// Helper f
19720 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69  unction to retri
19730 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20  eve a column of 
19740 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74  data from an act
19750 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  ive statement...
19760 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
19770 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
19780 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54  am name="stmt">T
19790 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
197a0 6e 67 20 73 74 65 70 28 29 27 64 20 74 68 72 6f  ng step()'d thro
197b0 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ugh</param>..   
197c0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
197d0 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c 61  ="flags">The fla
197e0 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
197f0 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  th the connectio
19800 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
19810 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
19820 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c 75  "index">The colu
19830 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74 72  mn index to retr
19840 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ieve</param>..  
19850 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
19860 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65  e="typ">The type
19870 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e   of data contain
19880 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ed in the column
19890 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c 69  .  If Uninitiali
198a0 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74 69  zed, this functi
198b0 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76 65  on will retrieve
198c0 20 74 68 65 20 64 61 74 61 74 79 70 65 20 69 6e   the datatype in
198d0 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72 61  formation.</para
198e0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
198f0 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68 65  urns>Returns the
19900 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f 6c   data in the col
19910 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  umn</returns>.. 
19920 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
19930 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56  ride object GetV
19940 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74 65  alue(SQLiteState
19950 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
19960 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
19970 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
19980 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74 79  x, SQLiteType ty
19990 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  p)..    {..     
199a0 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66   TypeAffinity af
199b0 66 20 3d 20 74 79 70 2e 41 66 66 69 6e 69 74 79  f = typ.Affinity
199c0 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 61 66 66  ;..      if (aff
199d0 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
199e0 2e 4e 75 6c 6c 29 20 72 65 74 75 72 6e 20 44 42  .Null) return DB
199f0 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20  Null.Value;..   
19a00 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c     Type t = null
19a10 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74  ;....      if (t
19a20 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70  yp.Type != DbTyp
19a30 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20  e.Object)..     
19a40 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20   {..        t = 
19a50 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51  SQLiteConvert.SQ
19a60 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74  LiteTypeToType(t
19a70 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66  yp);..        af
19a80 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69  f = TypeToAffini
19a90 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ty(t);..      }.
19aa0 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c  ...      if ((fl
19ab0 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
19ac0 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41  ectionFlags.GetA
19ad0 6c 6c 41 73 54 65 78 74 29 20 3d 3d 20 53 51 4c  llAsText) == SQL
19ae0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
19af0 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29  gs.GetAllAsText)
19b00 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
19b10 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c  rn GetText(stmt,
19b20 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
19b30 20 20 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a    switch (aff)..
19b40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19b50 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
19b60 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20  ty.Blob:..      
19b70 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65      if (typ.Type
19b80 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20   == DbType.Guid 
19b90 26 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20  && typ.Affinity 
19ba0 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
19bb0 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Text)..         
19bc0 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
19bd0 69 64 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c  id(GetText(stmt,
19be0 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20   index));....   
19bf0 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28         int n = (
19c00 69 6e 74 29 47 65 74 42 79 74 65 73 28 73 74 6d  int)GetBytes(stm
19c10 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c  t, index, 0, nul
19c20 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20  l, 0, 0);..     
19c30 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
19c40 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20  new byte[n];..  
19c50 20 20 20 20 20 20 20 20 47 65 74 42 79 74 65 73          GetBytes
19c60 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c  (stmt, index, 0,
19c70 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20   b, 0, n);....  
19c80 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e          if (typ.
19c90 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47  Type == DbType.G
19ca0 75 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d  uid && n == 16).
19cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
19cc0 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b  urn new Guid(b);
19cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
19ce0 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20  turn b;..       
19cf0 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
19d00 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20  ty.DateTime:..  
19d10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
19d20 65 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c  etDateTime(stmt,
19d30 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
19d40 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
19d50 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20  ity.Double:..   
19d60 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
19d70 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74  null) return Get
19d80 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64  Double(stmt, ind
19d90 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
19da0 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43  return Convert.C
19db0 68 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75  hangeType(GetDou
19dc0 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ble(stmt, index)
19dd0 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  , t, null);..   
19de0 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
19df0 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20  finity.Int64:.. 
19e00 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
19e10 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47  = null) return G
19e20 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  etInt64(stmt, in
19e30 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
19e40 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
19e50 28 42 6f 6f 6c 65 61 6e 29 29 20 72 65 74 75 72  (Boolean)) retur
19e60 6e 20 47 65 74 42 6f 6f 6c 65 61 6e 28 73 74 6d  n GetBoolean(stm
19e70 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
19e80 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
19e90 79 70 65 6f 66 28 53 42 79 74 65 29 29 20 72 65  ypeof(SByte)) re
19ea0 74 75 72 6e 20 47 65 74 53 42 79 74 65 28 73 74  turn GetSByte(st
19eb0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
19ec0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
19ed0 74 79 70 65 6f 66 28 42 79 74 65 29 29 20 72 65  typeof(Byte)) re
19ee0 74 75 72 6e 20 47 65 74 42 79 74 65 28 73 74 6d  turn GetByte(stm
19ef0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
19f00 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
19f10 79 70 65 6f 66 28 49 6e 74 31 36 29 29 20 72 65  ypeof(Int16)) re
19f20 74 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73 74  turn GetInt16(st
19f30 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
19f40 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
19f50 74 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29 20  typeof(UInt16)) 
19f60 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31 36  return GetUInt16
19f70 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
19f80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
19f90 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29  == typeof(Int32)
19fa0 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 33  ) return GetInt3
19fb0 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  2(stmt, index);.
19fc0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
19fd0 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 33   == typeof(UInt3
19fe0 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49  2)) return GetUI
19ff0 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
1a000 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
1a010 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e   (t == typeof(In
1a020 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65 74  t64)) return Get
1a030 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
1a040 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
1a050 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55  f (t == typeof(U
1a060 49 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20 47  Int64)) return G
1a070 65 74 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  etUInt64(stmt, i
1a080 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
1a090 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
1a0a0 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 49  .ChangeType(GetI
1a0b0 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
1a0c0 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  ), t, null);..  
1a0d0 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a        default:..
1a0e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1a0f0 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
1a100 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ndex);..      }.
1a110 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
1a120 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1a130 69 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72  int GetCursorFor
1a140 54 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74  Table(SQLiteStat
1a150 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
1a160 64 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65  db, int rootPage
1a170 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
1a180 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
1a190 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
1a1a0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1a1b0 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63  .sqlite3_table_c
1a1c0 75 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74  ursor_interop(st
1a1d0 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
1a1e0 20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d   db, rootPage);.
1a1f0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
1a200 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66  turn -1;..#endif
1a210 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1a220 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1a230 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f   long GetRowIdFo
1a240 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74  rCursor(SQLiteSt
1a250 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
1a260 74 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b  t cursor)..    {
1a270 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
1a280 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f  ANDARD..      lo
1a290 6e 67 20 72 6f 77 69 64 20 3d 20 30 3b 0d 0a 20  ng rowid = 0;.. 
1a2a0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1a2b0 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
1a2c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1a2d0 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77  lite3_cursor_row
1a2e0 69 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  id_interop(stmt.
1a2f0 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75  _sqlite_stmt, cu
1a300 72 73 6f 72 2c 20 72 65 66 20 72 6f 77 69 64 29  rsor, ref rowid)
1a310 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20  ;..      if (rc 
1a320 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
1a330 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f  de.Ok) return ro
1a340 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  wid;....      re
1a350 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a  turn 0;..#else..
1a360 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
1a370 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
1a380 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1a390 76 65 72 72 69 64 65 20 76 6f 69 64 20 47 65 74  verride void Get
1a3a0 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e  IndexColumnExten
1a3b0 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64  dedInfo(string d
1a3c0 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20  atabase, string 
1a3d0 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f  index, string co
1a3e0 6c 75 6d 6e 2c 20 72 65 66 20 69 6e 74 20 73 6f  lumn, ref int so
1a3f0 72 74 4d 6f 64 65 2c 20 72 65 66 20 69 6e 74 20  rtMode, ref int 
1a400 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20 73 74 72  onError, ref str
1a410 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71  ing collationSeq
1a420 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  uence)..    {..#
1a430 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
1a440 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ARD..      IntPt
1a450 72 20 63 6f 6c 6c 20 3d 20 49 6e 74 50 74 72 2e  r coll = IntPtr.
1a460 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74  Zero;..      int
1a470 20 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d 0a 20   colllen = 0;.. 
1a480 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1a490 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20  Code rc;....    
1a4a0 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74    rc = UnsafeNat
1a4b0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1a4c0 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f  e3_index_column_
1a4d0 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71  info_interop(_sq
1a4e0 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62 61  l, ToUTF8(databa
1a4f0 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65  se), ToUTF8(inde
1a500 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d  x), ToUTF8(colum
1a510 6e 29 2c 20 72 65 66 20 73 6f 72 74 4d 6f 64 65  n), ref sortMode
1a520 2c 20 72 65 66 20 6f 6e 45 72 72 6f 72 2c 20 72  , ref onError, r
1a530 65 66 20 63 6f 6c 6c 2c 20 72 65 66 20 63 6f 6c  ef coll, ref col
1a540 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66  llen);..      if
1a550 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
1a560 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
1a570 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
1a580 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b  ption(rc, null);
1a590 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74  ....      collat
1a5a0 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54  ionSequence = UT
1a5b0 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c  F8ToString(coll,
1a5c0 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73   colllen);..#els
1a5d0 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64  e..      sortMod
1a5e0 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e  e = 0;..      on
1a5f0 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20  Error = 2;..    
1a600 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65    collationSeque
1a610 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d  nce = "BINARY";.
1a620 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
1a630 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1a640 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
1a650 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74  rorCode FileCont
1a660 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61  rol(string zDbNa
1a670 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50  me, int op, IntP
1a680 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d  tr pArg)..    {.
1a690 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
1a6a0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1a6b0 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  s.sqlite3_file_c
1a6c0 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44  ontrol(_sql, (zD
1a6d0 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f  bName != null) ?
1a6e0 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29   ToUTF8(zDbName)
1a6f0 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72   : null, op, pAr
1a700 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  g);..    }..  }.
1a710 0a 7d 0d 0a                                      .}..