System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact b843c4d3c13b99cc76df554b748a299adee45f8a:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a 23  ns.Generic;....#
0180: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
0190: 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f 4e  20 && (TRACE_CON
01a0: 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43 45  NECTION || TRACE
01b0: 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20 75  _STATEMENT)..  u
01c0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67  sing System.Diag
01d0: 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69 66  nostics;..#endif
01e0: 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  ....  using Syst
01f0: 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e  em.Globalization
0200: 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  ;..  using Syste
0210: 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f  m.Runtime.Intero
0220: 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75 73  pServices;..  us
0230: 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b  ing System.Text;
0240: 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ..  using System
0250: 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 0d 0a 20  .Threading;.... 
0260: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0270: 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68    /// This is th
0280: 65 20 6d 65 74 68 6f 64 20 73 69 67 6e 61 74 75  e method signatu
0290: 72 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  re for the SQLit
02a0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 6c  e core library l
02b0: 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 0d  ogging callback.
02c0: 0a 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20  .  /// function 
02d0: 66 6f 72 20 75 73 65 20 77 69 74 68 20 73 71 6c  for use with sql
02e0: 69 74 65 33 5f 6c 6f 67 28 29 20 61 6e 64 20 74  ite3_log() and t
02f0: 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  he SQLITE_CONFIG
0300: 5f 4c 4f 47 2e 0d 0a 20 20 2f 2f 2f 0d 0a 20 20  _LOG...  ///..  
0310: 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68 69  /// WARNING: Thi
0320: 73 20 64 65 6c 65 67 61 74 65 20 69 73 20 75 73  s delegate is us
0330: 65 64 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20  ed more-or-less 
0340: 64 69 72 65 63 74 6c 79 20 62 79 20 6e 61 74 69  directly by nati
0350: 76 65 20 63 6f 64 65 2c 20 64 6f 0d 0a 20 20 2f  ve code, do..  /
0360: 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20  //          not 
0370: 6d 6f 64 69 66 79 20 69 74 73 20 74 79 70 65 20  modify its type 
0380: 73 69 67 6e 61 74 75 72 65 2e 0d 0a 20 20 2f 2f  signature...  //
0390: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
03a0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
03b0: 22 70 55 73 65 72 44 61 74 61 22 3e 0d 0a 20 20  "pUserData">..  
03c0: 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20 64 61  /// The extra da
03d0: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
03e0: 74 68 20 74 68 69 73 20 6d 65 73 73 61 67 65 2c  th this message,
03f0: 20 69 66 20 61 6e 79 2e 0d 0a 20 20 2f 2f 2f 20   if any...  /// 
0400: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20  </param>..  /// 
0410: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
0420: 6f 72 43 6f 64 65 22 3e 0d 0a 20 20 2f 2f 2f 20  orCode">..  /// 
0430: 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61  The error code a
0440: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
0450: 68 69 73 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  his message...  
0460: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0470: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0480: 22 70 4d 65 73 73 61 67 65 22 3e 0d 0a 20 20 2f  "pMessage">..  /
0490: 2f 2f 20 54 68 65 20 6d 65 73 73 61 67 65 20 73  // The message s
04a0: 74 72 69 6e 67 20 74 6f 20 62 65 20 6c 6f 67 67  tring to be logg
04b0: 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72  ed...  /// </par
04c0: 61 6d 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  am>..#if !PLATFO
04d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
04e0: 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67 65  ORK..  [Unmanage
04f0: 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74 65 72  dFunctionPointer
0500: 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69  (CallingConventi
0510: 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65 6e 64  on.Cdecl)]..#end
0520: 69 66 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 64  if..  internal d
0530: 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53 51 4c  elegate void SQL
0540: 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 49  iteLogCallback(I
0550: 6e 74 50 74 72 20 70 55 73 65 72 44 61 74 61 2c  ntPtr pUserData,
0560: 20 69 6e 74 20 65 72 72 6f 72 43 6f 64 65 2c 20   int errorCode, 
0570: 49 6e 74 50 74 72 20 70 4d 65 73 73 61 67 65 29  IntPtr pMessage)
0580: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0590: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
05a0: 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74   class implement
05b0: 73 20 53 51 4c 69 74 65 42 61 73 65 20 63 6f 6d  s SQLiteBase com
05c0: 70 6c 65 74 65 6c 79 2c 20 61 6e 64 20 69 73 20  pletely, and is 
05d0: 74 68 65 20 67 75 74 73 20 6f 66 20 74 68 65 20  the guts of the 
05e0: 63 6f 64 65 20 74 68 61 74 20 69 6e 74 65 72 6f  code that intero
05f0: 70 27 73 20 53 51 4c 69 74 65 20 77 69 74 68 20  p's SQLite with 
0600: 2e 4e 45 54 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  .NET..  /// </su
0610: 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72 6e  mmary>..  intern
0620: 61 6c 20 63 6c 61 73 73 20 53 51 4c 69 74 65 33  al class SQLite3
0630: 20 3a 20 53 51 4c 69 74 65 42 61 73 65 0d 0a 20   : SQLiteBase.. 
0640: 20 7b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20   {..    private 
0650: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
0660: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
0670: 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  ect();....    //
0680: 0d 0a 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54  ..    // NOTE: T
0690: 68 69 73 20 69 73 20 74 68 65 20 70 75 62 6c 69  his is the publi
06a0: 63 20 6b 65 79 20 66 6f 72 20 74 68 65 20 53 79  c key for the Sy
06b0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
06c0: 20 61 73 73 65 6d 62 6c 79 2e 20 20 49 66 20 79   assembly.  If y
06d0: 6f 75 20 63 68 61 6e 67 65 20 74 68 65 0d 0a 20  ou change the.. 
06e0: 20 20 20 2f 2f 20 20 20 20 20 20 20 53 4e 4b 20     //       SNK 
06f0: 66 69 6c 65 2c 20 79 6f 75 20 77 69 6c 6c 20 6e  file, you will n
0700: 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68  eed to change th
0710: 69 73 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20 20  is as well...   
0720: 20 2f 2f 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61   //..    interna
0730: 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50  l const string P
0740: 75 62 6c 69 63 4b 65 79 20 3d 0d 0a 20 20 20 20  ublicKey =..    
0750: 20 20 20 20 22 30 30 32 34 30 30 30 30 30 34 38      "00240000048
0760: 30 30 30 30 30 39 34 30 30 30 30 30 30 30 36 30  0000094000000060
0770: 32 30 30 30 30 30 30 32 34 30 30 30 30 35 32 35  2000000240000525
0780: 33 34 31 33 31 30 30 30 34 30 30 30 30 30 31 30  3413100040000010
0790: 30 30 31 30 30 30 35 61 32 38 38 64 65 35 36 38  0010005a288de568
07a0: 37 63 34 65 31 22 20 2b 0d 0a 20 20 20 20 20 20  7c4e1" +..      
07b0: 20 20 22 62 36 32 31 64 64 66 66 35 64 38 34 34    "b621ddff5d844
07c0: 37 32 37 34 31 38 39 35 36 39 39 37 66 34 37 35  727418956997f475
07d0: 65 62 38 32 39 34 32 39 65 34 31 31 61 66 66 33  eb829429e411aff3
07e0: 65 39 33 66 39 37 62 37 30 64 65 36 39 38 62 39  e93f97b70de698b9
07f0: 37 32 36 34 30 39 32 35 62 64 64 34 34 32 38 30  72640925bdd44280
0800: 64 66 30 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  df0" +..        
0810: 22 61 32 35 61 38 34 33 32 36 36 39 37 33 37 30  "a25a84326697370
0820: 34 31 33 37 63 62 62 30 65 37 34 34 31 63 31 66  4137cbb0e7441c1f
0830: 65 37 63 61 65 34 65 32 34 34 30 61 65 39 31 61  e7cae4e2440ae91a
0840: 62 38 63 64 65 33 39 33 33 66 65 62 63 62 31 61  b8cde3933febcb1a
0850: 63 34 38 64 64 33 33 62 34 30 65 31 33 63 34 32  c48dd33b40e13c42
0860: 31 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 22 64  1" +..        "d
0870: 38 32 31 35 63 31 38 61 34 33 34 39 61 34 33 36  8215c18a4349a436
0880: 64 64 34 39 39 65 33 63 33 38 35 63 63 36 38 33  dd499e3c385cc683
0890: 30 31 35 66 38 38 36 66 36 63 31 30 62 64 39 30  015f886f6c10bd90
08a0: 31 31 35 65 62 32 62 64 36 31 62 36 37 37 35 30  115eb2bd61b67750
08b0: 38 33 39 65 33 61 31 39 39 34 31 64 63 39 63 22  839e3a19941dc9c"
08c0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
08d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
08e0: 4f 52 4b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ORK..    interna
08f0: 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44  l const string D
0900: 65 73 69 67 6e 65 72 56 65 72 73 69 6f 6e 20 3d  esignerVersion =
0910: 20 22 31 2e 30 2e 39 38 2e 30 22 3b 0d 0a 23 65   "1.0.98.0";..#e
0920: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ndif....    /// 
0930: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0940: 2f 2f 20 54 68 65 20 6f 70 61 71 75 65 20 70 6f  // The opaque po
0950: 69 6e 74 65 72 20 72 65 74 75 72 6e 65 64 20 74  inter returned t
0960: 6f 20 75 73 20 62 79 20 74 68 65 20 73 71 6c 69  o us by the sqli
0970: 74 65 20 70 72 6f 76 69 64 65 72 0d 0a 20 20 20  te provider..   
0980: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0990: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 69  .    protected i
09a0: 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 43 6f  nternal SQLiteCo
09b0: 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 5f  nnectionHandle _
09c0: 73 71 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63  sql;..    protec
09d0: 74 65 64 20 73 74 72 69 6e 67 20 5f 66 69 6c 65  ted string _file
09e0: 4e 61 6d 65 3b 0d 0a 20 20 20 20 70 72 6f 74 65  Name;..    prote
09f0: 63 74 65 64 20 53 51 4c 69 74 65 43 6f 6e 6e 65  cted SQLiteConne
0a00: 63 74 69 6f 6e 46 6c 61 67 73 20 5f 66 6c 61 67  ctionFlags _flag
0a10: 73 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  s;..    protecte
0a20: 64 20 62 6f 6f 6c 20 5f 75 73 65 50 6f 6f 6c 3b  d bool _usePool;
0a30: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
0a40: 69 6e 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e  int _poolVersion
0a50: 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 69  ;..    private i
0a60: 6e 74 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 3b  nt _cancelCount;
0a70: 0d 0a 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35 20  ....#if (NET_35 
0a80: 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54  || NET_40 || NET
0a90: 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 20 7c  _45 || NET_451 |
0aa0: 7c 20 4e 45 54 5f 34 36 29 20 26 26 20 21 50 4c  | NET_46) && !PL
0ab0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
0ac0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 70 72 69  AMEWORK..    pri
0ad0: 76 61 74 65 20 62 6f 6f 6c 20 5f 62 75 69 6c 64  vate bool _build
0ae0: 69 6e 67 53 63 68 65 6d 61 3b 0d 0a 23 65 6e 64  ingSchema;..#end
0af0: 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  if....    /// <s
0b00: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
0b10: 20 54 68 65 20 75 73 65 72 2d 64 65 66 69 6e 65   The user-define
0b20: 64 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 67 69  d functions regi
0b30: 73 74 65 72 65 64 20 6f 6e 20 74 68 69 73 20 63  stered on this c
0b40: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f  onnection..    /
0b50: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0b60: 20 20 20 70 72 6f 74 65 63 74 65 64 20 44 69 63     protected Dic
0b70: 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46 75  tionary<SQLiteFu
0b80: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
0b90: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e   SQLiteFunction>
0ba0: 20 5f 66 75 6e 63 74 69 6f 6e 73 3b 0d 0a 0d 0a   _functions;....
0bb0: 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54  #if INTEROP_VIRT
0bc0: 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f  UAL_TABLE..    /
0bd0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0be0: 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65    /// The module
0bf0: 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
0c00: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  this connection.
0c10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0c20: 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63  ary>..    protec
0c30: 74 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c 73  ted Dictionary<s
0c40: 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64  tring, SQLiteMod
0c50: 75 6c 65 3e 20 5f 6d 6f 64 75 6c 65 73 3b 0d 0a  ule> _modules;..
0c60: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f  #endif....    //
0c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0cd0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0ce0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 73  y>..    /// Cons
0cf0: 74 72 75 63 74 73 20 74 68 65 20 6f 62 6a 65 63  tructs the objec
0d00: 74 20 75 73 65 64 20 74 6f 20 69 6e 74 65 72 61  t used to intera
0d10: 63 74 20 77 69 74 68 20 74 68 65 20 53 51 4c 69  ct with the SQLi
0d20: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 0d  te core library.
0d30: 0a 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20 74  .    /// using t
0d40: 68 65 20 55 54 46 2d 38 20 74 65 78 74 20 65 6e  he UTF-8 text en
0d50: 63 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f  coding...    ///
0d60: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0d70: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0d80: 3d 22 66 6d 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ="fmt">..    ///
0d90: 20 54 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f   The DateTime fo
0da0: 72 6d 61 74 20 74 6f 20 62 65 20 75 73 65 64 20  rmat to be used 
0db0: 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67 20  when converting 
0dc0: 73 74 72 69 6e 67 20 76 61 6c 75 65 73 20 74 6f  string values to
0dd0: 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 44 61 74 65   a..    /// Date
0de0: 54 69 6d 65 20 61 6e 64 20 62 69 6e 64 69 6e 67  Time and binding
0df0: 20 44 61 74 65 54 69 6d 65 20 70 61 72 61 6d 65   DateTime parame
0e00: 74 65 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ters...    /// <
0e10: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
0e20: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b 69   <param name="ki
0e30: 6e 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  nd">..    /// Th
0e40: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 61 74  e <see cref="Dat
0e50: 65 54 69 6d 65 4b 69 6e 64 22 20 2f 3e 20 74 6f  eTimeKind" /> to
0e60: 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 72   be used when cr
0e70: 65 61 74 69 6e 67 20 44 61 74 65 54 69 6d 65 0d  eating DateTime.
0e80: 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e  .    /// values.
0e90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
0ea0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
0eb0: 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 53 74 72 69  am name="fmtStri
0ec0: 6e 67 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ng">..    /// Th
0ed0: 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
0ee0: 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
0ef0: 70 61 72 73 69 6e 67 20 61 6e 64 20 66 6f 72 6d  parsing and form
0f00: 61 74 74 69 6e 67 20 44 61 74 65 54 69 6d 65 0d  atting DateTime.
0f10: 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e  .    /// values.
0f20: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
0f30: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
0f40: 61 6d 20 6e 61 6d 65 3d 22 64 62 22 3e 0d 0a 20  am name="db">.. 
0f50: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
0f60: 65 20 68 61 6e 64 6c 65 20 74 6f 20 62 65 20 61  e handle to be a
0f70: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
0f80: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
0f90: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
0fa0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
0fb0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0fc0: 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20  fileName">..    
0fd0: 2f 2f 2f 20 54 68 65 20 66 75 6c 6c 79 20 71 75  /// The fully qu
0fe0: 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d  alified file nam
0ff0: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
1000: 68 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65  h <paramref name
1010: 3d 22 64 62 20 22 2f 3e 2e 0d 0a 20 20 20 20 2f  ="db "/>...    /
1020: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1030: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1040: 3d 22 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d 0a 20  ="ownHandle">.. 
1050: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
1060: 69 66 20 74 68 65 20 6e 65 77 6c 79 20 63 72 65  if the newly cre
1070: 61 74 65 64 20 6f 62 6a 65 63 74 20 69 6e 73 74  ated object inst
1080: 61 6e 63 65 20 77 69 6c 6c 20 6e 65 65 64 20 74  ance will need t
1090: 6f 20 64 69 73 70 6f 73 65 0d 0a 20 20 20 20 2f  o dispose..    /
10a0: 2f 2f 20 6f 66 20 3c 70 61 72 61 6d 72 65 66 20  // of <paramref 
10b0: 6e 61 6d 65 3d 22 64 62 22 20 2f 3e 20 77 68 65  name="db" /> whe
10c0: 6e 20 69 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65  n it is no longe
10d0: 72 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 2f  r needed...    /
10e0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
10f0: 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65   internal SQLite
1100: 33 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  3(..        SQLi
1110: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66 6d  teDateFormats fm
1120: 74 2c 0d 0a 20 20 20 20 20 20 20 20 44 61 74 65  t,..        Date
1130: 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d 0a  TimeKind kind,..
1140: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
1150: 6d 74 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20 20  mtString,..     
1160: 20 20 20 49 6e 74 50 74 72 20 64 62 2c 0d 0a 20     IntPtr db,.. 
1170: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
1180: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
1190: 20 62 6f 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65 0d   bool ownHandle.
11a0: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
11b0: 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b 69    : base(fmt, ki
11c0: 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 29 0d 0a  nd, fmtString)..
11d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
11e0: 66 20 28 64 62 20 21 3d 20 49 6e 74 50 74 72 2e  f (db != IntPtr.
11f0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 7b  Zero)..        {
1200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73  ..            _s
1210: 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  ql = new SQLiteC
1220: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28  onnectionHandle(
1230: 64 62 2c 20 6f 77 6e 48 61 6e 64 6c 65 29 3b 0d  db, ownHandle);.
1240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 69  .            _fi
1250: 6c 65 4e 61 6d 65 20 3d 20 66 69 6c 65 4e 61 6d  leName = fileNam
1260: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1270: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
1280: 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c  on.OnChanged(nul
1290: 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f  l, new Connectio
12a0: 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  nEventArgs(..   
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
12c0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  iteConnectionEve
12d0: 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63  ntType.NewCritic
12e0: 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d  alHandle, null,.
12f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1300: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c   null, null, nul
1310: 6c 2c 20 5f 73 71 6c 2c 20 66 69 6c 65 4e 61 6d  l, _sql, fileNam
1320: 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20  e, new object[] 
1330: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1340: 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
1350: 33 29 2c 20 66 6d 74 2c 20 6b 69 6e 64 2c 20 66  3), fmt, kind, f
1360: 6d 74 53 74 72 69 6e 67 2c 20 64 62 2c 20 66 69  mtString, db, fi
1370: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
1380: 20 20 20 20 20 20 20 20 20 6f 77 6e 48 61 6e 64           ownHand
1390: 6c 65 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20  le }));..       
13a0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
13b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1410: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
1420: 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74  IDisposable "Pat
1430: 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20  tern" Members.. 
1440: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1450: 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 70  disposed;..    p
1460: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
1470: 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74  kDisposed() /* t
1480: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a  hrow */..    {..
1490: 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53  #if THROW_ON_DIS
14a0: 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20 69  POSED..        i
14b0: 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20  f (disposed)..  
14c0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
14d0: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
14e0: 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70 65  edException(type
14f0: 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d 65  of(SQLite3).Name
1500: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
1510: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1570: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1580: 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69  protected overri
1590: 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  de void Dispose(
15a0: 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d  bool disposing).
15b0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
15c0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
15d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15e0: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
15f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1600: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20             //if 
1610: 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20  (disposing)..   
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b               //{
1630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1640: 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f    //    ////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
1670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1680: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
1690: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
16a0: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
16b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
16c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
16f0: 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20        //}....   
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
1740: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
1750: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
1760: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
1770: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
1780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a0: 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52  ///....#if INTER
17b0: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
17c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17d0: 20 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73    DisposeModules
17e0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  ();..#endif.... 
17f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1800: 6c 6f 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a 20  lose(false); /* 
1810: 44 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f  Disposing, canno
1820: 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 20 20 20  t throw. */..   
1830: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1840: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
1850: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
1860: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
1870: 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70  ase.Dispose(disp
1880: 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20  osing);....     
1890: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
18a0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
18b0: 45 76 65 72 79 74 68 69 6e 67 20 73 68 6f 75 6c  Everything shoul
18c0: 64 20 62 65 20 66 75 6c 6c 79 20 64 69 73 70 6f  d be fully dispo
18d0: 73 65 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e  sed at this poin
18e0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
18f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1900: 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
1910: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1920: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
1930: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
19a0: 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c   INTEROP_VIRTUAL
19b0: 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20  _TABLE..    /// 
19c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
19d0: 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61  // This method a
19e0: 74 74 65 6d 70 74 73 20 74 6f 20 64 69 73 70 6f  ttempts to dispo
19f0: 73 65 20 6f 66 20 61 6c 6c 20 74 68 65 20 3c 73  se of all the <s
1a00: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d  ee cref="SQLiteM
1a10: 6f 64 75 6c 65 22 20 2f 3e 20 64 65 72 69 76 65  odule" /> derive
1a20: 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63  d..    /// objec
1a30: 74 20 69 6e 73 74 61 6e 63 65 73 20 63 75 72 72  t instances curr
1a40: 65 6e 74 6c 79 20 61 73 73 6f 63 69 61 74 65 64  ently associated
1a50: 20 77 69 74 68 20 74 68 65 20 6e 61 74 69 76 65   with the native
1a60: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
1a70: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
1a80: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
1a90: 72 69 76 61 74 65 20 76 6f 69 64 20 44 69 73 70  rivate void Disp
1aa0: 6f 73 65 4d 6f 64 75 6c 65 73 28 29 0d 0a 20 20  oseModules()..  
1ab0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d    {..        //.
1ac0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
1ad0: 3a 20 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65 73  : If any modules
1ae0: 20 77 65 72 65 20 63 72 65 61 74 65 64 2c 20 61   were created, a
1af0: 74 74 65 6d 70 74 20 74 6f 20 64 69 73 70 6f 73  ttempt to dispos
1b00: 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e of..        //
1b10: 20 20 20 20 20 20 20 74 68 65 6d 20 6e 6f 77 2e         them now.
1b20: 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 64    This code is d
1b30: 65 73 69 67 6e 65 64 20 74 6f 20 61 76 6f 69 64  esigned to avoid
1b40: 20 74 68 72 6f 77 69 6e 67 0d 0a 20 20 20 20 20   throwing..     
1b50: 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65     //       exce
1b60: 70 74 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74 68  ptions unless th
1b70: 65 20 44 69 73 70 6f 73 65 20 6d 65 74 68 6f 64  e Dispose method
1b80: 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a   of the module..
1b90: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1ba0: 20 69 74 73 65 6c 66 20 74 68 72 6f 77 73 20 61   itself throws a
1bb0: 6e 20 65 78 63 65 70 74 69 6f 6e 2e 0d 0a 20 20  n exception...  
1bc0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1bd0: 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 21    if (_modules !
1be0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1bf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c00: 66 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75  foreach (KeyValu
1c10: 65 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 53 51  ePair<string, SQ
1c20: 4c 69 74 65 4d 6f 64 75 6c 65 3e 20 70 61 69 72  LiteModule> pair
1c30: 20 69 6e 20 5f 6d 6f 64 75 6c 65 73 29 0d 0a 20   in _modules).. 
1c40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1c60: 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
1c70: 65 20 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b 0d  e = pair.Value;.
1c80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c90: 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
1ca0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1cb0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1cc0: 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
1cd0: 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e           module.
1ce0: 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
1cf0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d00: 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65           _module
1d10: 73 2e 43 6c 65 61 72 28 29 3b 0d 0a 20 20 20 20  s.Clear();..    
1d20: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
1d30: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  ndif....    ////
1d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1da0: 20 20 20 2f 2f 20 49 74 20 69 73 6e 27 74 20 6e     // It isn't n
1db0: 65 63 65 73 73 61 72 79 20 74 6f 20 63 6c 65 61  ecessary to clea
1dc0: 6e 75 70 20 61 6e 79 20 66 75 6e 63 74 69 6f 6e  nup any function
1dd0: 73 20 77 65 27 76 65 20 72 65 67 69 73 74 65 72  s we've register
1de0: 65 64 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 6e  ed.  If the conn
1df0: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 20 67  ection..    // g
1e00: 6f 65 73 20 74 6f 20 74 68 65 20 70 6f 6f 6c 20  oes to the pool 
1e10: 61 6e 64 20 69 73 20 72 65 73 75 72 72 65 63 74  and is resurrect
1e20: 65 64 20 6c 61 74 65 72 2c 20 72 65 2d 72 65 67  ed later, re-reg
1e30: 69 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e  istered function
1e40: 73 20 77 69 6c 6c 20 6f 76 65 72 77 72 69 74 65  s will overwrite
1e50: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 20 70 72 65   the..    // pre
1e60: 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 2e  vious functions.
1e70: 20 20 54 68 65 20 53 51 4c 69 74 65 46 75 6e 63    The SQLiteFunc
1e80: 74 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65  tionCookieHandle
1e90: 20 77 69 6c 6c 20 74 61 6b 65 20 63 61 72 65 20   will take care 
1ea0: 6f 66 20 66 72 65 65 69 6e 67 20 75 6e 6d 61 6e  of freeing unman
1eb0: 61 67 65 64 0d 0a 20 20 20 20 2f 2f 20 72 65 73  aged..    // res
1ec0: 6f 75 72 63 65 73 20 62 65 6c 6f 6e 67 69 6e 67  ources belonging
1ed0: 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
1ee0: 6c 79 2d 72 65 67 69 73 74 65 72 65 64 20 66 75  ly-registered fu
1ef0: 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 69 6e  nctions...    in
1f00: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1f10: 76 6f 69 64 20 43 6c 6f 73 65 28 62 6f 6f 6c 20  void Close(bool 
1f20: 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b  canThrow)..    {
1f30: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c  ..      if (_sql
1f40: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1f50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
1f60: 20 28 21 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c   (!_sql.OwnHandl
1f70: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  e)..          {.
1f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
1f90: 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  sql = null;..   
1fa0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1fb0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n;..          }.
1fc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f  ...          boo
1fd0: 6c 20 75 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e  l unbindFunction
1fe0: 73 20 3d 20 28 28 5f 66 6c 61 67 73 20 26 20 53  s = ((_flags & S
1ff0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
2000: 6c 61 67 73 2e 55 6e 62 69 6e 64 46 75 6e 63 74  lags.UnbindFunct
2010: 69 6f 6e 73 4f 6e 43 6c 6f 73 65 29 0d 0a 20 20  ionsOnClose)..  
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d                ==
2030: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2040: 6e 46 6c 61 67 73 2e 55 6e 62 69 6e 64 46 75 6e  nFlags.UnbindFun
2050: 63 74 69 6f 6e 73 4f 6e 43 6c 6f 73 65 29 3b 0d  ctionsOnClose);.
2060: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
2070: 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20  (_usePool)..    
2080: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2090: 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74         if (SQLit
20a0: 65 42 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e 65  eBase.ResetConne
20b0: 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 5f 73 71 6c  ction(_sql, _sql
20c0: 2c 20 63 61 6e 54 68 72 6f 77 29 29 0d 0a 20 20  , canThrow))..  
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f0: 20 69 66 20 28 75 6e 62 69 6e 64 46 75 6e 63 74   if (unbindFunct
2100: 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ions)..         
2110: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2130: 20 20 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63    if (SQLiteFunc
2140: 74 69 6f 6e 2e 55 6e 62 69 6e 64 41 6c 6c 46 75  tion.UnbindAllFu
2150: 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 5f 66  nctions(this, _f
2160: 6c 61 67 73 2c 20 66 61 6c 73 65 29 29 0d 0a 20  lags, false)).. 
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2180: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54       {..#if !NET
2190: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
21a0: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
21b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21c0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
21d0: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
21e0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2200: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
2210: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
2220: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2240: 20 20 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74      "UnbindFunct
2250: 69 6f 6e 73 20 28 50 6f 6f 6c 29 20 53 75 63 63  ions (Pool) Succ
2260: 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ess: {0}",..    
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2280: 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
2290: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
22a0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
22b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f0: 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
2300: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2310: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2330: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2340: 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46  iteLine(String.F
2350: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2370: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
2380: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
2390: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b0: 20 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e   "UnbindFunction
23c0: 73 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65  s (Pool) Failure
23d0: 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f0: 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53         HandleToS
2400: 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64  tring()));..#end
2410: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
2420: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2440: 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
2450: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20  VIRTUAL_TABLE.. 
2460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2470: 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28   DisposeModules(
2480: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
24b0: 50 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c 65 4e 61  Pool.Add(_fileNa
24c0: 6d 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f 6f 6c 56  me, _sql, _poolV
24d0: 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ersion);....    
24e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
24f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f  LiteConnection.O
2500: 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e  nChanged(null, n
2510: 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  ew ConnectionEve
2520: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
2530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2540: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45  QLiteConnectionE
2550: 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73 65 64 54  ventType.ClosedT
2560: 6f 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c  oPool, null, nul
2570: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
2580: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
2590: 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 5f 66 69 6c  null, _sql, _fil
25a0: 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63  eName, new objec
25b0: 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  t[] {..         
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
25d0: 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 63 61  eof(SQLite3), ca
25e0: 6e 54 68 72 6f 77 2c 20 5f 66 69 6c 65 4e 61 6d  nThrow, _fileNam
25f0: 65 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 20  e, _poolVersion 
2600: 7d 29 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54  }));....#if !NET
2610: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
2620: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
2630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2640: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
2650: 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ne(String.Format
2660: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2670: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
2680: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
2690: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6c 6f              "Clo
26b0: 73 65 20 28 50 6f 6f 6c 29 20 53 75 63 63 65 73  se (Pool) Succes
26c0: 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  s: {0}",..      
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e0: 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29  HandleToString()
26f0: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
2700: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69             }..#i
2710: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
2720: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
2730: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
2740: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
2750: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2770: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
2780: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a0: 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
27b0: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
27c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d0: 20 20 20 20 20 20 20 22 43 6c 6f 73 65 20 28 50         "Close (P
27e0: 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b 30  ool) Failure: {0
27f0: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2800: 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c             Handl
2810: 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a  eToString()));..
2820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2830: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
2840: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2850: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2860: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2870: 20 69 66 20 28 75 6e 62 69 6e 64 46 75 6e 63 74   if (unbindFunct
2880: 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ions)..         
2890: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 51            if (SQ
28b0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62  LiteFunction.Unb
28c0: 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f 6e 73 28  indAllFunctions(
28d0: 74 68 69 73 2c 20 5f 66 6c 61 67 73 2c 20 66 61  this, _flags, fa
28e0: 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lse))..         
28f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20           {..#if 
2900: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
2910: 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
2920: 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ION..           
2930: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2940: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
2950: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2970: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
2980: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
2990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29a0: 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 62              "Unb
29b0: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 53 75 63  indFunctions Suc
29c0: 63 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  cess: {0}",..   
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 48 61 6e 64 6c 65 54 6f 53         HandleToS
29f0: 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64  tring()));..#end
2a00: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
2a10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2a20: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
2a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a40: 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43     {..#if !NET_C
2a50: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
2a60: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
2a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a80: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
2a90: 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Line(String.Form
2aa0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
2ac0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
2ad0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af0: 20 20 20 20 20 20 22 55 6e 62 69 6e 64 46 75 6e        "UnbindFun
2b00: 63 74 69 6f 6e 73 20 46 61 69 6c 75 72 65 3a 20  ctions Failure: 
2b10: 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
2b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b30: 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28   HandleToString(
2b40: 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  )));..#endif..  
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b60: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2b70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2b80: 20 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73 65      _sql.Dispose
2b90: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ();..          }
2ba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c  ..          _sql
2bb0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
2bc0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
2bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2c30: 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
2c40: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
2c50: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
2c60: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
2c70: 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28   HandleToString(
2c80: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
2c90: 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
2ca0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2cb0: 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22   return "<null>"
2cc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
2cd0: 75 72 6e 20 5f 73 71 6c 2e 54 6f 53 74 72 69 6e  urn _sql.ToStrin
2ce0: 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e  g();..    }..#en
2cf0: 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  dif....    /////
2d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2d60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2d70: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2d80: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74   the number of t
2d90: 69 6d 65 73 20 74 68 65 20 3c 73 65 65 20 63 72  imes the <see cr
2da0: 65 66 3d 22 43 61 6e 63 65 6c 22 20 2f 3e 20 6d  ef="Cancel" /> m
2db0: 65 74 68 6f 64 20 68 61 73 20 62 65 65 6e 0d 0a  ethod has been..
2dc0: 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 2e 0d      /// called..
2dd0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2de0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
2df0: 20 69 6e 74 20 47 65 74 43 61 6e 63 65 6c 43 6f   int GetCancelCo
2e00: 75 6e 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  unt()..    {..  
2e10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
2e20: 65 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70 61 72 65  erlocked.Compare
2e30: 45 78 63 68 61 6e 67 65 28 72 65 66 20 5f 63 61  Exchange(ref _ca
2e40: 6e 63 65 6c 43 6f 75 6e 74 2c 20 30 2c 20 30 29  ncelCount, 0, 0)
2e50: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2ec0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2ed0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
2ee0: 69 73 20 6d 65 74 68 6f 64 20 64 65 74 65 72 6d  is method determ
2ef0: 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
2f00: 6e 6f 74 20 61 20 3c 73 65 65 20 63 72 65 66 3d  not a <see cref=
2f10: 22 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  "SQLiteException
2f20: 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 77 69  " />..    /// wi
2f30: 74 68 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65  th a return code
2f40: 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53   of <see cref="S
2f50: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49  QLiteErrorCode.I
2f60: 6e 74 65 72 72 75 70 74 22 20 2f 3e 20 73 68 6f  nterrupt" /> sho
2f70: 75 6c 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20  uld..    /// be 
2f80: 74 68 72 6f 77 6e 20 61 66 74 65 72 20 6d 61 6b  thrown after mak
2f90: 69 6e 67 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20  ing a call into 
2fa0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
2fb0: 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f  library...    //
2fc0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2fd0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
2fe0: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
2ff0: 6f 20 69 66 20 61 20 3c 73 65 65 20 63 72 65 66  o if a <see cref
3000: 3d 22 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  ="SQLiteExceptio
3010: 6e 22 20 2f 3e 20 74 6f 20 62 65 20 74 68 72 6f  n" /> to be thro
3020: 77 6e 2e 20 20 54 68 69 73 20 6d 65 74 68 6f 64  wn.  This method
3030: 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 6f  ..    /// will o
3040: 6e 6c 79 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a  nly return non-z
3050: 65 72 6f 20 69 66 20 74 68 65 20 3c 73 65 65 20  ero if the <see 
3060: 63 72 65 66 3d 22 43 61 6e 63 65 6c 22 20 2f 3e  cref="Cancel" />
3070: 20 6d 65 74 68 6f 64 20 77 61 73 20 63 61 6c 6c   method was call
3080: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f 6e 65 20  ed..    /// one 
3090: 6f 72 20 6d 6f 72 65 20 74 69 6d 65 73 20 64 75  or more times du
30a0: 72 69 6e 67 20 61 20 63 61 6c 6c 20 69 6e 74 6f  ring a call into
30b0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
30c0: 20 6c 69 62 72 61 72 79 20 28 65 2e 67 2e 20 77   library (e.g. w
30d0: 68 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  hen..    /// the
30e0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
30f0: 2a 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f 73  *() or sqlite3_s
3100: 74 65 70 28 29 20 41 50 49 73 20 61 72 65 20 75  tep() APIs are u
3110: 73 65 64 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sed)...    /// <
3120: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
3130: 72 69 76 61 74 65 20 62 6f 6f 6c 20 53 68 6f 75  rivate bool Shou
3140: 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c  ldThrowForCancel
3150: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
3160: 20 20 20 72 65 74 75 72 6e 20 47 65 74 43 61 6e     return GetCan
3170: 63 65 6c 43 6f 75 6e 74 28 29 20 3e 20 30 3b 0d  celCount() > 0;.
3180: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
3190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
31f0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3200: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 73 65  y>..    /// Rese
3210: 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ts the value of 
3220: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 5f  the <see cref="_
3230: 63 61 6e 63 65 6c 43 6f 75 6e 74 22 20 2f 3e 20  cancelCount" /> 
3240: 66 69 65 6c 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  field...    /// 
3250: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3260: 70 72 69 76 61 74 65 20 69 6e 74 20 52 65 73 65  private int Rese
3270: 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d 0a  tCancelCount()..
3280: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
3290: 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65  eturn Interlocke
32a0: 64 2e 43 6f 6d 70 61 72 65 45 78 63 68 61 6e 67  d.CompareExchang
32b0: 65 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75  e(ref _cancelCou
32c0: 6e 74 2c 20 30 2c 20 5f 63 61 6e 63 65 6c 43 6f  nt, 0, _cancelCo
32d0: 75 6e 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  unt);..    }....
32e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
32f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3340: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
3350: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
3360: 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 69 6e  / Attempts to in
3370: 74 65 72 72 75 70 74 20 74 68 65 20 71 75 65 72  terrupt the quer
3380: 79 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63  y currently exec
3390: 75 74 69 6e 67 20 6f 6e 20 74 68 65 20 61 73 73  uting on the ass
33a0: 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f  ociated..    ///
33b0: 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65   native database
33c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
33d0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
33e0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
33f0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 61 6e  verride void Can
3400: 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  cel()..    {..  
3410: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 7b      try..      {
3420: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20  ..        // do 
3430: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
3440: 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  }..      finally
3450: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
3460: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
3470: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 7b  ion. */..      {
3480: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 65 72 6c  ..        Interl
3490: 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28  ocked.Increment(
34a0: 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74  ref _cancelCount
34b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61  );..        Unsa
34c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
34d0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
34e0: 74 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20  t(_sql);..      
34f0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
3500: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
3510: 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63     /// This func
3520: 74 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73 65  tion binds a use
3530: 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  r-defined functi
3540: 6f 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63  on to the connec
3550: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
3560: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
3570: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3580: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
3590: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
35a0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
35b0: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
35c0: 75 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  ute"/> object in
35d0: 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e  stance containin
35e0: 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d  g..    /// the m
35f0: 65 74 61 64 61 74 61 20 66 6f 72 20 74 68 65 20  etadata for the 
3600: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62  function to be b
3610: 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ound...    /// <
3620: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
3630: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
3640: 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f  nction">..    //
3650: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
3660: 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22  "SQLiteFunction"
3670: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
3680: 63 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  ce that implemen
3690: 74 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  ts the..    /// 
36a0: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62  function to be b
36b0: 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ound...    /// <
36c0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
36d0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c   <param name="fl
36e0: 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ags">..    /// T
36f0: 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61  he flags associa
3700: 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72  ted with the par
3710: 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f  ent connection o
3720: 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bject...    /// 
3730: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
3740: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
3750: 76 6f 69 64 20 42 69 6e 64 46 75 6e 63 74 69 6f  void BindFunctio
3760: 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  n(..        SQLi
3770: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
3780: 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  ute functionAttr
3790: 69 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20  ibute,..        
37a0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
37b0: 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  unction,..      
37c0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
37d0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20  onFlags flags.. 
37e0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
37f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 75 6e  .        if (fun
3800: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 3d  ctionAttribute =
3810: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3820: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
3830: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
3840: 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 41 74  tion("functionAt
3850: 74 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a 20 20  tribute");....  
3860: 20 20 20 20 20 20 69 66 20 28 66 75 6e 63 74 69        if (functi
3870: 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
3880: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
3890: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
38a0: 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63 74 69  xception("functi
38b0: 6f 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  on");....       
38c0: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e   SQLiteFunction.
38d0: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 74 68 69  BindFunction(thi
38e0: 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  s, functionAttri
38f0: 62 75 74 65 2c 20 66 75 6e 63 74 69 6f 6e 2c 20  bute, function, 
3900: 66 6c 61 67 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  flags);....     
3910: 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e     if (_function
3920: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
3930: 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f          _functio
3940: 6e 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e  ns = new Diction
3950: 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69  ary<SQLiteFuncti
3960: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c  onAttribute, SQL
3970: 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d  iteFunction>();.
3980: 0a 0d 0a 20 20 20 20 20 20 20 20 5f 66 75 6e 63  ...        _func
3990: 74 69 6f 6e 73 5b 66 75 6e 63 74 69 6f 6e 41 74  tions[functionAt
39a0: 74 72 69 62 75 74 65 5d 20 3d 20 66 75 6e 63 74  tribute] = funct
39b0: 69 6f 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ion;..    }.... 
39c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
39d0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66  ..    /// This f
39e0: 75 6e 63 74 69 6f 6e 20 62 69 6e 64 73 20 61 20  unction binds a 
39f0: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
3a00: 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 63 6f 6e  ction to the con
3a10: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
3a20: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3a30: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
3a40: 65 3d 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  e="functionAttri
3a50: 62 75 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  bute">..    /// 
3a60: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
3a70: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
3a80: 72 69 62 75 74 65 22 2f 3e 20 6f 62 6a 65 63 74  ribute"/> object
3a90: 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69   instance contai
3aa0: 6e 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68  ning..    /// th
3ab0: 65 20 6d 65 74 61 64 61 74 61 20 66 6f 72 20 74  e metadata for t
3ac0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62  he function to b
3ad0: 65 20 75 6e 62 6f 75 6e 64 2e 0d 0a 20 20 20 20  e unbound...    
3ae0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
3af0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
3b00: 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20  e="flags">..    
3b10: 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 61 73  /// The flags as
3b20: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
3b30: 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63 74  e parent connect
3b40: 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  ion object...   
3b50: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
3b60: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
3b70: 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  Non-zero if the 
3b80: 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 75 6e 62  function was unb
3b90: 6f 75 6e 64 20 61 6e 64 20 72 65 6d 6f 76 65 64  ound and removed
3ba0: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
3bb0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
3bc0: 64 65 20 62 6f 6f 6c 20 55 6e 62 69 6e 64 46 75  de bool UnbindFu
3bd0: 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
3be0: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41   SQLiteFunctionA
3bf0: 74 74 72 69 62 75 74 65 20 66 75 6e 63 74 69 6f  ttribute functio
3c00: 6e 41 74 74 72 69 62 75 74 65 2c 0d 0a 20 20 20  nAttribute,..   
3c10: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
3c20: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
3c30: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
3c40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
3c50: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
3c60: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
3c70: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
3c80: 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
3c90: 63 65 70 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f  ception("functio
3ca0: 6e 41 74 74 72 69 62 75 74 65 22 29 3b 0d 0a 0d  nAttribute");...
3cb0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 66 75  .        if (_fu
3cc0: 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  nctions == null)
3cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
3ce0: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
3cf0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e         SQLiteFun
3d00: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 3b 0d  ction function;.
3d10: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  ...        if (_
3d20: 66 75 6e 63 74 69 6f 6e 73 2e 54 72 79 47 65 74  functions.TryGet
3d30: 56 61 6c 75 65 28 66 75 6e 63 74 69 6f 6e 41 74  Value(functionAt
3d40: 74 72 69 62 75 74 65 2c 20 6f 75 74 20 66 75 6e  tribute, out fun
3d50: 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  ction))..       
3d60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3d70: 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74 69  if (SQLiteFuncti
3d80: 6f 6e 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f  on.UnbindFunctio
3d90: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
3da0: 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 66 75          this, fu
3db0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
3dc0: 20 66 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67 73   function, flags
3dd0: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
3de0: 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73        _functions
3df0: 2e 52 65 6d 6f 76 65 28 66 75 6e 63 74 69 6f 6e  .Remove(function
3e00: 41 74 74 72 69 62 75 74 65 29 29 0d 0a 20 20 20  Attribute))..   
3e10: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3e30: 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
3e40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3e50: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
3e60: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
3e70: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3e80: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
3e90: 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  ng Version..    
3ea0: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
3eb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
3ec0: 65 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72 73  eturn SQLiteVers
3ed0: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ion;..      }.. 
3ee0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
3ef0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
3f00: 74 20 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d  t VersionNumber.
3f10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
3f20: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
3f30: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
3f40: 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d  eVersionNumber;.
3f50: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3f60: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
3f70: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
3f80: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  fineConstants.. 
3f90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
3fa0: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
3fb0: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
3fc0: 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d  Builder result =
3fd0: 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64   new StringBuild
3fe0: 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  er();..         
3ff0: 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67 3e     IList<string>
4000: 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44 65   list = SQLiteDe
4010: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f 70  fineConstants.Op
4020: 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20  tionList;....   
4030: 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 73           if (lis
4040: 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
4050: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4060: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
4070: 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65  ch (string eleme
4080: 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20 20  nt in list)..   
4090: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40b0: 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20      if (element 
40c0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40e0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
40f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4100: 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65     if (result.Le
4110: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
4120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4130: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
4140: 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  (' ');....      
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4160: 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65 6d  sult.Append(elem
4170: 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ent);..         
4180: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4190: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
41a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
41b0: 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b  sult.ToString();
41c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
41d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
41e0: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
41f0: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a   SQLiteVersion..
4200: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
4210: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
4220: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
4230: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
4240: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
4250: 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c  e3_libversion(),
4260: 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   -1);..      }..
4270: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4280: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e 74  ernal static int
4290: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75   SQLiteVersionNu
42a0: 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  mber..    {..   
42b0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
42c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
42d0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
42e0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76  ods.sqlite3_libv
42f0: 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 3b  ersion_number();
4300: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
4310: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
4320: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 53   static string S
4330: 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20  QLiteSourceId.. 
4340: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
4350: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
4360: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
4370: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
4380: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4390: 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d 31  3_sourceid(), -1
43a0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
43b0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
43c0: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
43d0: 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70   SQLiteCompileOp
43e0: 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  tions..    {..  
43f0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
4400: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4410: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
4420: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
4430: 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20  ingBuilder();.. 
4440: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
4450: 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ndex = 0;..     
4460: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a 56         IntPtr zV
4470: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
4480: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
4490: 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  e3_compileoption
44a0: 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a  _get(index++);..
44b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68  ..            wh
44c0: 69 6c 65 20 28 7a 56 61 6c 75 65 20 21 3d 20 49  ile (zValue != I
44d0: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
44e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4500: 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20  result.Length > 
4510: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
4520: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
4530: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20  ppend(' ');.... 
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4550: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 55 54 46  esult.Append(UTF
4560: 38 54 6f 53 74 72 69 6e 67 28 7a 56 61 6c 75 65  8ToString(zValue
4570: 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  , -1));..       
4580: 20 20 20 20 20 20 20 20 20 7a 56 61 6c 75 65 20           zValue 
4590: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
45a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
45b0: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
45c0: 69 6e 64 65 78 2b 2b 29 3b 0d 0a 20 20 20 20 20  index++);..     
45d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
45e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
45f0: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
4600: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
4610: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4620: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
4630: 67 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f 6e  g InteropVersion
4640: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4650: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
4660: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
4670: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
4680: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
4690: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
46a0: 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72  iveMethods.inter
46b0: 6f 70 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c  op_libversion(),
46c0: 20 2d 31 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   -1);..#else..  
46d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
46e0: 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a   null;..#endif..
46f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
4700: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
4710: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 49   static string I
4720: 6e 74 65 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a  nteropSourceId..
4730: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
4740: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  et..        {..#
4750: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
4760: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
4770: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
4780: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
4790: 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70  eMethods.interop
47a0: 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d 31 29  _sourceid(), -1)
47b0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
47c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
47d0: 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l;..#endif..    
47e0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
47f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4800: 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72  tic string Inter
4810: 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73  opCompileOptions
4820: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4830: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
4840: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
4850: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
4860: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
4870: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
4880: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a  ringBuilder();..
4890: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
48a0: 69 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20 20  index = 0;..    
48b0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a          IntPtr z
48c0: 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  Value = UnsafeNa
48d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65  tiveMethods.inte
48e0: 72 6f 70 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  rop_compileoptio
48f0: 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b 0d  n_get(index++);.
4900: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ...            w
4910: 68 69 6c 65 20 28 7a 56 61 6c 75 65 20 21 3d 20  hile (zValue != 
4920: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
4930: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4950: 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e  (result.Length >
4960: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
4970: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
4980: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a  Append(' ');....
4990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49a0: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 55 54  result.Append(UT
49b0: 46 38 54 6f 53 74 72 69 6e 67 28 7a 56 61 6c 75  F8ToString(zValu
49c0: 65 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  e, -1));..      
49d0: 20 20 20 20 20 20 20 20 20 20 7a 56 61 6c 75 65            zValue
49e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
49f0: 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 63  ethods.interop_c
4a00: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
4a10: 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 20 20 20 20  (index++);..    
4a20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4a30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4a40: 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28  result.ToString(
4a50: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
4a60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
4a70: 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ll;..#endif..   
4a80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4a90: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
4aa0: 65 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f  erride bool Auto
4ab0: 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20  Commit..    {.. 
4ac0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
4ad0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
4ae0: 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f  n IsAutocommit(_
4af0: 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20  sql, _sql);..   
4b00: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4b10: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4b20: 72 69 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e  ride long LastIn
4b30: 73 65 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b  sertRowId..    {
4b40: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
4b50: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
4b60: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
4b70: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65  WORK..        re
4b80: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
4b90: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
4ba0: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
4bb0: 69 64 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 69 66  id(_sql);..#elif
4bc0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
4bd0: 44 0d 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20  D..        long 
4be0: 72 6f 77 49 64 20 3d 20 30 3b 0d 0a 20 20 20 20  rowId = 0;..    
4bf0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
4c00: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4c10: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
4c20: 64 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  d_interop(_sql, 
4c30: 72 65 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20  ref rowId);..   
4c40: 20 20 20 20 20 72 65 74 75 72 6e 20 72 6f 77 49       return rowI
4c50: 64 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  d;..#else..     
4c60: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
4c70: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
4c80: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
4c90: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
4ca0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4cb0: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 68 61  override int Cha
4cc0: 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nges..    {..   
4cd0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
4ce0: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
4cf0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72  NDARD..        r
4d00: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
4d10: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4d20: 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f  3_changes_intero
4d30: 70 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d  p(_sql);..#else.
4d40: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4d50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4d60: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e  ods.sqlite3_chan
4d70: 67 65 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64  ges(_sql);..#end
4d80: 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  if..      }..   
4d90: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
4da0: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
4db0: 20 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20   MemoryUsed..   
4dc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
4dd0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4de0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
4df0: 74 61 74 69 63 4d 65 6d 6f 72 79 55 73 65 64 3b  taticMemoryUsed;
4e00: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
4e10: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
4e20: 61 6c 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 53  al static long S
4e30: 74 61 74 69 63 4d 65 6d 6f 72 79 55 73 65 64 0d  taticMemoryUsed.
4e40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4e50: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
4e60: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
4e70: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
4e80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4e90: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
4ea0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
4eb0: 65 6d 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a 23  emory_used();..#
4ec0: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
4ed0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
4ee0: 20 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20     long bytes = 
4ef0: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
4f00: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4f10: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ods.sqlite3_memo
4f20: 72 79 5f 75 73 65 64 5f 69 6e 74 65 72 6f 70 28  ry_used_interop(
4f30: 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20  ref bytes);..   
4f40: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4f50: 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20  bytes;..#else.. 
4f60: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
4f70: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
4f80: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
4f90: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
4fa0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
4fb0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
4fc0: 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 48 69  de long MemoryHi
4fd0: 67 68 77 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a  ghwater..    {..
4fe0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
4ff0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5000: 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
5010: 63 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72  cMemoryHighwater
5020: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
5030: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5040: 6e 61 6c 20 73 74 61 74 69 63 20 6c 6f 6e 67 20  nal static long 
5050: 53 74 61 74 69 63 4d 65 6d 6f 72 79 48 69 67 68  StaticMemoryHigh
5060: 77 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  water..    {..  
5070: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
5080: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
5090: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
50a0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
50b0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
50c0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
50d0: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
50e0: 77 61 74 65 72 28 30 29 3b 0d 0a 23 65 6c 69 66  water(0);..#elif
50f0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
5100: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  D..            l
5110: 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a  ong bytes = 0;..
5120: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
5130: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5140: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68  sqlite3_memory_h
5150: 69 67 68 77 61 74 65 72 5f 69 6e 74 65 72 6f 70  ighwater_interop
5160: 28 30 2c 20 72 65 66 20 62 79 74 65 73 29 3b 0d  (0, ref bytes);.
5170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5180: 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73  urn bytes;..#els
5190: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  e..            t
51a0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
51b0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
51c0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
51d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
51e0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
51f0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
5200: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20  rns non-zero if 
5210: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e  the underlying n
5220: 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ative connection
5230: 20 68 61 6e 64 6c 65 20 69 73 20 6f 77 6e 65 64   handle is owned
5240: 0d 0a 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 69  ..    /// by thi
5250: 73 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  s instance...   
5260: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5270: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
5280: 65 72 72 69 64 65 20 62 6f 6f 6c 20 4f 77 6e 48  erride bool OwnH
5290: 61 6e 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20  andle..    {..  
52a0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
52b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
52c0: 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
52d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
52e0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
52f0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
5300: 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  no connection ha
5310: 6e 64 6c 65 20 61 76 61 69 6c 61 62 6c 65 22 29  ndle available")
5320: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5330: 20 72 65 74 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e   return _sql.Own
5340: 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20  Handle;..       
5350: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
5360: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5370: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
5380: 74 68 65 20 6c 6f 67 69 63 61 6c 20 6c 69 73 74  the logical list
5390: 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 20 61 73   of functions as
53a0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
53b0: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  is connection...
53c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
53d0: 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
53e0: 20 6f 76 65 72 72 69 64 65 20 49 44 69 63 74 69   override IDicti
53f0: 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63  onary<SQLiteFunc
5400: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53  tionAttribute, S
5410: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20 46  QLiteFunction> F
5420: 75 6e 63 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d  unctions..    {.
5430: 0a 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72  .        get { r
5440: 65 74 75 72 6e 20 5f 66 75 6e 63 74 69 6f 6e 73  eturn _functions
5450: 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ; }..    }....  
5460: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
5470: 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
5480: 6f 64 65 20 53 65 74 4d 65 6d 6f 72 79 53 74 61  ode SetMemorySta
5490: 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d  tus(bool value).
54a0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
54b0: 72 65 74 75 72 6e 20 53 74 61 74 69 63 53 65 74  return StaticSet
54c0: 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 76 61 6c  MemoryStatus(val
54d0: 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ue);..    }.... 
54e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
54f0: 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
5500: 64 65 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f  de StaticSetMemo
5510: 72 79 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61  ryStatus(bool va
5520: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
5530: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
5540: 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
5550: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5560: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 69 6e 74  lite3_config_int
5570: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
5580: 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e  QLiteConfigOpsEn
5590: 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  um.SQLITE_CONFIG
55a0: 5f 4d 45 4d 53 54 41 54 55 53 2c 20 76 61 6c 75  _MEMSTATUS, valu
55b0: 65 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20  e ? 1 : 0);.... 
55c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
55d0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
55e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
55f0: 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20     /// Attempts 
5600: 74 6f 20 66 72 65 65 20 61 73 20 6d 75 63 68 20  to free as much 
5610: 68 65 61 70 20 6d 65 6d 6f 72 79 20 61 73 20 70  heap memory as p
5620: 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20  ossible for the 
5630: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
5640: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
5650: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5660: 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 73 74 61  / <returns>A sta
5670: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
5680: 75 72 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a  urn code (i.e. z
5690: 65 72 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20  ero for success 
56a0: 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72  and non-zero for
56b0: 20 66 61 69 6c 75 72 65 29 2e 3c 2f 72 65 74 75   failure).</retu
56c0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
56d0: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
56e0: 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 6c 65  teErrorCode Rele
56f0: 61 73 65 4d 65 6d 6f 72 79 28 29 0d 0a 20 20 20  aseMemory()..   
5700: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
5710: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
5720: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5730: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f  hods.sqlite3_db_
5740: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 5f  release_memory(_
5750: 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  sql);..        r
5760: 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d  eturn rc;..    }
5770: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
5780: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
5790: 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20  ttempts to free 
57a0: 4e 20 62 79 74 65 73 20 6f 66 20 68 65 61 70 20  N bytes of heap 
57b0: 6d 65 6d 6f 72 79 20 62 79 20 64 65 61 6c 6c 6f  memory by deallo
57c0: 63 61 74 69 6e 67 20 6e 6f 6e 2d 65 73 73 65 6e  cating non-essen
57d0: 74 69 61 6c 20 6d 65 6d 6f 72 79 0d 0a 20 20 20  tial memory..   
57e0: 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 69 6f 6e 73   /// allocations
57f0: 20 68 65 6c 64 20 62 79 20 74 68 65 20 64 61 74   held by the dat
5800: 61 62 61 73 65 20 6c 69 62 72 61 72 79 2e 20 4d  abase library. M
5810: 65 6d 6f 72 79 20 75 73 65 64 20 74 6f 20 63 61  emory used to ca
5820: 63 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67  che database pag
5830: 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 69  es..    /// to i
5840: 6d 70 72 6f 76 65 20 70 65 72 66 6f 72 6d 61 6e  mprove performan
5850: 63 65 20 69 73 20 61 6e 20 65 78 61 6d 70 6c 65  ce is an example
5860: 20 6f 66 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61   of non-essentia
5870: 6c 20 6d 65 6d 6f 72 79 2e 20 20 54 68 69 73 20  l memory.  This 
5880: 69 73 20 61 20 6e 6f 2d 6f 70 0d 0a 20 20 20 20  is a no-op..    
5890: 2f 2f 2f 20 72 65 74 75 72 6e 69 6e 67 20 7a 65  /// returning ze
58a0: 72 6f 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  ro if the SQLite
58b0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61   core library wa
58c0: 73 20 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 77  s not compiled w
58d0: 69 74 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d  ith the compile-
58e0: 74 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 70  time..    /// op
58f0: 74 69 6f 6e 20 53 51 4c 49 54 45 5f 45 4e 41 42  tion SQLITE_ENAB
5900: 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45  LE_MEMORY_MANAGE
5910: 4d 45 4e 54 2e 20 20 4f 70 74 69 6f 6e 61 6c 6c  MENT.  Optionall
5920: 79 2c 20 61 74 74 65 6d 70 74 73 20 74 6f 20 72  y, attempts to r
5930: 65 73 65 74 20 61 6e 64 2f 6f 72 0d 0a 20 20 20  eset and/or..   
5940: 20 2f 2f 2f 20 63 6f 6d 70 61 63 74 20 74 68 65   /// compact the
5950: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
5960: 61 70 2c 20 69 66 20 61 70 70 6c 69 63 61 62 6c  ap, if applicabl
5970: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
5980: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
5990: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 42 79  <param name="nBy
59a0: 74 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  tes">..    /// T
59b0: 68 65 20 72 65 71 75 65 73 74 65 64 20 6e 75 6d  he requested num
59c0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20  ber of bytes to 
59d0: 66 72 65 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  free...    /// <
59e0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
59f0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65   <param name="re
5a00: 73 65 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  set">..    /// N
5a10: 6f 6e 2d 7a 65 72 6f 20 74 6f 20 61 74 74 65 6d  on-zero to attem
5a20: 70 74 20 61 20 68 65 61 70 20 72 65 73 65 74 2e  pt a heap reset.
5a30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
5a40: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
5a50: 61 6d 20 6e 61 6d 65 3d 22 63 6f 6d 70 61 63 74  am name="compact
5a60: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  ">..    /// Non-
5a70: 7a 65 72 6f 20 74 6f 20 61 74 74 65 6d 70 74 20  zero to attempt 
5a80: 68 65 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 2e  heap compaction.
5a90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
5aa0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
5ab0: 61 6d 20 6e 61 6d 65 3d 22 6e 46 72 65 65 22 3e  am name="nFree">
5ac0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
5ad0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 61 63  mber of bytes ac
5ae0: 74 75 61 6c 6c 79 20 66 72 65 65 64 2e 20 20 54  tually freed.  T
5af0: 68 69 73 20 76 61 6c 75 65 20 6d 61 79 20 62 65  his value may be
5b00: 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20   zero...    /// 
5b10: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
5b20: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
5b30: 65 73 65 74 4f 6b 22 3e 0d 0a 20 20 20 20 2f 2f  esetOk">..    //
5b40: 2f 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c  / This value wil
5b50: 6c 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  l be non-zero if
5b60: 20 74 68 65 20 68 65 61 70 20 72 65 73 65 74 20   the heap reset 
5b70: 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2e 0d  was successful..
5b80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
5b90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
5ba0: 6d 20 6e 61 6d 65 3d 22 6e 4c 61 72 67 65 73 74  m name="nLargest
5bb0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
5bc0: 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67  size of the larg
5bd0: 65 73 74 20 63 6f 6d 6d 69 74 74 65 64 20 66 72  est committed fr
5be0: 65 65 20 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20  ee block in the 
5bf0: 68 65 61 70 2c 20 69 6e 20 62 79 74 65 73 2e 0d  heap, in bytes..
5c00: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61  .    /// This va
5c10: 6c 75 65 20 77 69 6c 6c 20 62 65 20 7a 65 72 6f  lue will be zero
5c20: 20 75 6e 6c 65 73 73 20 68 65 61 70 20 63 6f 6d   unless heap com
5c30: 70 61 63 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c  paction is enabl
5c40: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
5c50: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5c60: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
5c70: 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
5c80: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ite return code 
5c90: 28 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73  (i.e. zero for s
5ca0: 75 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a  uccess and non-z
5cb0: 65 72 6f 0d 0a 20 20 20 20 2f 2f 2f 20 66 6f 72  ero..    /// for
5cc0: 20 66 61 69 6c 75 72 65 29 2e 0d 0a 20 20 20 20   failure)...    
5cd0: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
5ce0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
5cf0: 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  tic SQLiteErrorC
5d00: 6f 64 65 20 53 74 61 74 69 63 52 65 6c 65 61 73  ode StaticReleas
5d10: 65 4d 65 6d 6f 72 79 28 0d 0a 20 20 20 20 20 20  eMemory(..      
5d20: 20 20 69 6e 74 20 6e 42 79 74 65 73 2c 0d 0a 20    int nBytes,.. 
5d30: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 65         bool rese
5d40: 74 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  t,..        bool
5d50: 20 63 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20   compact,..     
5d60: 20 20 20 72 65 66 20 69 6e 74 20 6e 46 72 65 65     ref int nFree
5d70: 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 62  ,..        ref b
5d80: 6f 6f 6c 20 72 65 73 65 74 4f 6b 2c 0d 0a 20 20  ool resetOk,..  
5d90: 20 20 20 20 20 20 72 65 66 20 75 69 6e 74 20 6e        ref uint n
5da0: 4c 61 72 67 65 73 74 0d 0a 20 20 20 20 20 20 20  Largest..       
5db0: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
5dc0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
5dd0: 64 65 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72  de rc = SQLiteEr
5de0: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20  rorCode.Ok;.... 
5df0: 20 20 20 20 20 20 20 69 6e 74 20 6e 46 72 65 65         int nFree
5e00: 4c 6f 63 61 6c 20 3d 20 55 6e 73 61 66 65 4e 61  Local = UnsafeNa
5e10: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5e20: 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  te3_release_memo
5e30: 72 79 28 6e 42 79 74 65 73 29 3b 0d 0a 20 20 20  ry(nBytes);..   
5e40: 20 20 20 20 20 75 69 6e 74 20 6e 4c 61 72 67 65       uint nLarge
5e50: 73 74 4c 6f 63 61 6c 20 3d 20 30 3b 0d 0a 20 20  stLocal = 0;..  
5e60: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 65 74        bool reset
5e70: 4f 6b 4c 6f 63 61 6c 20 3d 20 66 61 6c 73 65 3b  OkLocal = false;
5e80: 0d 0a 0d 0a 23 69 66 20 21 44 45 42 55 47 20 26  ....#if !DEBUG &
5e90: 26 20 57 49 4e 44 4f 57 53 20 2f 2f 20 4e 4f 54  & WINDOWS // NOT
5ea0: 45 3a 20 53 68 6f 75 6c 64 20 62 65 20 22 57 49  E: Should be "WI
5eb0: 4e 33 32 48 45 41 50 20 26 26 20 21 4d 45 4d 44  N32HEAP && !MEMD
5ec0: 45 42 55 47 20 26 26 20 57 49 4e 44 4f 57 53 22  EBUG && WINDOWS"
5ed0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 72  ..        if ((r
5ee0: 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c == SQLiteError
5ef0: 43 6f 64 65 2e 4f 6b 29 20 26 26 20 72 65 73 65  Code.Ok) && rese
5f00: 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t)..        {.. 
5f10: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
5f20: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5f30: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33  ods.sqlite3_win3
5f40: 32 5f 72 65 73 65 74 5f 68 65 61 70 28 29 3b 0d  2_reset_heap();.
5f50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
5f60: 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
5f70: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
5f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5f90: 73 65 74 4f 6b 4c 6f 63 61 6c 20 3d 20 74 72 75  setOkLocal = tru
5fa0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
5fb0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 72 63  .        if ((rc
5fc0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
5fd0: 6f 64 65 2e 4f 6b 29 20 26 26 20 63 6f 6d 70 61  ode.Ok) && compa
5fe0: 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
5ff0: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
6000: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6010: 33 5f 77 69 6e 33 32 5f 63 6f 6d 70 61 63 74 5f  3_win32_compact_
6020: 68 65 61 70 28 72 65 66 20 6e 4c 61 72 67 65 73  heap(ref nLarges
6030: 74 4c 6f 63 61 6c 29 3b 0d 0a 23 65 6c 73 65 0d  tLocal);..#else.
6040: 0a 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73  .        if (res
6050: 65 74 20 7c 7c 20 63 6f 6d 70 61 63 74 29 0d 0a  et || compact)..
6060: 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
6070: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6080: 2e 4e 6f 74 46 6f 75 6e 64 3b 0d 0a 23 65 6e 64  .NotFound;..#end
6090: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6e 46  if....        nF
60a0: 72 65 65 20 3d 20 6e 46 72 65 65 4c 6f 63 61 6c  ree = nFreeLocal
60b0: 3b 0d 0a 20 20 20 20 20 20 20 20 6e 4c 61 72 67  ;..        nLarg
60c0: 65 73 74 20 3d 20 6e 4c 61 72 67 65 73 74 4c 6f  est = nLargestLo
60d0: 63 61 6c 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  cal;..        re
60e0: 73 65 74 4f 6b 20 3d 20 72 65 73 65 74 4f 6b 4c  setOk = resetOkL
60f0: 6f 63 61 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ocal;....       
6100: 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20   return rc;..   
6110: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
6120: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
6130: 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51   Shutdown the SQ
6140: 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74  Lite engine so t
6150: 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
6160: 73 74 61 72 74 65 64 20 77 69 74 68 20 64 69 66  started with dif
6170: 66 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20  ferent..    /// 
6180: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70  configuration op
6190: 74 69 6f 6e 73 2e 20 20 57 65 20 64 65 70 65 6e  tions.  We depen
61a0: 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61  d on auto initia
61b0: 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f  lization to reco
61c0: 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ver...    /// </
61d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
61e0: 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
61f0: 6e 73 20 61 20 73 74 61 6e 64 61 72 64 20 53 51  ns a standard SQ
6200: 4c 69 74 65 20 72 65 73 75 6c 74 20 63 6f 64 65  Lite result code
6210: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
6220: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
6230: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
6240: 64 65 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20  de Shutdown().. 
6250: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
6260: 74 75 72 6e 20 53 74 61 74 69 63 53 68 75 74 64  turn StaticShutd
6270: 6f 77 6e 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20  own(false);..   
6280: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
6290: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
62a0: 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51   Shutdown the SQ
62b0: 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74  Lite engine so t
62c0: 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
62d0: 73 74 61 72 74 65 64 20 77 69 74 68 20 64 69 66  started with dif
62e0: 66 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20  ferent..    /// 
62f0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70  configuration op
6300: 74 69 6f 6e 73 2e 20 20 57 65 20 64 65 70 65 6e  tions.  We depen
6310: 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61  d on auto initia
6320: 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f  lization to reco
6330: 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ver...    /// </
6340: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6350: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
6360: 69 72 65 63 74 6f 72 69 65 73 22 3e 0d 0a 20 20  irectories">..  
6370: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74    /// Non-zero t
6380: 6f 20 72 65 73 65 74 20 74 68 65 20 64 61 74 61  o reset the data
6390: 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61  base and tempora
63a0: 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 74  ry directories t
63b0: 6f 20 74 68 65 69 72 0d 0a 20 20 20 20 2f 2f 2f  o their..    ///
63c0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c   default values,
63d0: 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65   which should be
63e0: 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 20   null for both. 
63f0: 20 54 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   This parameter 
6400: 68 61 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20  has no..    /// 
6410: 65 66 66 65 63 74 20 6f 6e 20 6e 6f 6e 2d 57 69  effect on non-Wi
6420: 6e 64 6f 77 73 20 6f 70 65 72 61 74 69 6e 67 20  ndows operating 
6430: 73 79 73 74 65 6d 73 2e 0d 0a 20 20 20 20 2f 2f  systems...    //
6440: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
6450: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
6460: 75 72 6e 73 20 61 20 73 74 61 6e 64 61 72 64 20  urns a standard 
6470: 53 51 4c 69 74 65 20 72 65 73 75 6c 74 20 63 6f  SQLite result co
6480: 64 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  de.</returns>.. 
6490: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
64a0: 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
64b0: 64 65 20 53 74 61 74 69 63 53 68 75 74 64 6f 77  de StaticShutdow
64c0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  n(..        bool
64d0: 20 64 69 72 65 63 74 6f 72 69 65 73 0d 0a 20 20   directories..  
64e0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
64f0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
6500: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 53 51 4c  rorCode rc = SQL
6510: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b  iteErrorCode.Ok;
6520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
6530: 64 69 72 65 63 74 6f 72 69 65 73 29 0d 0a 20 20  directories)..  
6540: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e        {..#if WIN
6550: 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20  DOWS..          
6560: 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69    if (rc == SQLi
6570: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
6580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6590: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
65a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
65b0: 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
65c0: 63 74 6f 72 79 28 31 2c 20 6e 75 6c 6c 29 3b 0d  ctory(1, null);.
65d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
65e0: 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
65f0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
6610: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
6620: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77  ethods.sqlite3_w
6630: 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
6640: 72 79 28 32 2c 20 6e 75 6c 6c 29 3b 0d 0a 23 65  ry(2, null);..#e
6650: 6c 73 65 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  lse..#if !NET_CO
6660: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
6670: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
6680: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
6690: 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20  WriteLine(..    
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 68 75              "Shu
66b0: 74 64 6f 77 6e 3a 20 43 61 6e 6e 6f 74 20 72 65  tdown: Cannot re
66c0: 73 65 74 20 64 69 72 65 63 74 6f 72 69 65 73 20  set directories 
66d0: 6f 6e 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d  on this platform
66e0: 2e 22 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 23 65  .");..#endif..#e
66f0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
6700: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 72  ...        if (r
6710: 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c == SQLiteError
6720: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
6730: 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
6740: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6750: 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28  qlite3_shutdown(
6760: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
6770: 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d  turn rc;..    }.
6780: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
6790: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
67a0: 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20  termines if the 
67b0: 61 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76  associated nativ
67c0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
67d0: 64 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20  dle is open...  
67e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
67f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
6800: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  ns>..    /// Non
6810: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 61 73 73  -zero if the ass
6820: 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65 20 63  ociated native c
6830: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
6840: 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f   is open...    /
6850: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
6860: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
6870: 72 69 64 65 20 62 6f 6f 6c 20 49 73 4f 70 65 6e  ride bool IsOpen
6880: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
6890: 20 20 20 72 65 74 75 72 6e 20 28 5f 73 71 6c 20     return (_sql 
68a0: 21 3d 20 6e 75 6c 6c 29 20 26 26 20 21 5f 73 71  != null) && !_sq
68b0: 6c 2e 49 73 49 6e 76 61 6c 69 64 20 26 26 20 21  l.IsInvalid && !
68c0: 5f 73 71 6c 2e 49 73 43 6c 6f 73 65 64 3b 0d 0a  _sql.IsClosed;..
68d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
68e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
68f0: 6f 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20  oid Open(string 
6900: 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 73 74 72  strFilename, str
6910: 69 6e 67 20 76 66 73 4e 61 6d 65 2c 20 53 51 4c  ing vfsName, SQL
6920: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
6930: 67 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  gs connectionFla
6940: 67 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c  gs, SQLiteOpenFl
6950: 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67  agsEnum openFlag
6960: 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69  s, int maxPoolSi
6970: 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c  ze, bool usePool
6980: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6990: 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54  //..      // NOT
69a0: 45 3a 20 49 66 20 74 68 65 20 64 61 74 61 62 61  E: If the databa
69b0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
69c0: 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c   currently open,
69d0: 20 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20 20   attempt to..   
69e0: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6c 6f 73     //       clos
69f0: 65 20 69 74 20 6e 6f 77 2e 20 20 54 68 69 73 20  e it now.  This 
6a00: 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 62 65 63  must be done bec
6a10: 61 75 73 65 20 74 68 65 20 66 69 6c 65 20 6e 61  ause the file na
6a20: 6d 65 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 20  me or..      // 
6a30: 20 20 20 20 20 20 6f 74 68 65 72 20 70 61 72 61        other para
6a40: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
6a50: 69 6d 70 61 63 74 20 74 68 65 20 75 6e 64 65 72  impact the under
6a60: 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 0d 0a  lying database..
6a70: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63        //       c
6a80: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20 68 61  onnection may ha
6a90: 76 65 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20  ve changed...   
6aa0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20     //..      if 
6ab0: 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 43  (_sql != null) C
6ac0: 6c 6f 73 65 28 74 72 75 65 29 3b 0d 0a 0d 0a 20  lose(true);.... 
6ad0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f       //..      /
6ae0: 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63  / NOTE: If the c
6af0: 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6e 6f  onnection was no
6b00: 74 20 63 6c 6f 73 65 64 20 73 75 63 63 65 73 73  t closed success
6b10: 66 75 6c 6c 79 2c 20 74 68 72 6f 77 20 61 6e 0d  fully, throw an.
6b20: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
6b30: 65 78 63 65 70 74 69 6f 6e 20 6e 6f 77 2e 0d 0a  exception now...
6b40: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
6b50: 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c  if (_sql != null
6b60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68 72  )..          thr
6b70: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
6b80: 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69  eption("connecti
6b90: 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 73 74 69  on handle is sti
6ba0: 6c 6c 20 61 63 74 69 76 65 22 29 3b 0d 0a 0d 0a  ll active");....
6bb0: 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d        _usePool =
6bc0: 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20   usePool;..     
6bd0: 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74 72   _fileName = str
6be0: 46 69 6c 65 6e 61 6d 65 3b 0d 0a 20 20 20 20 20  Filename;..     
6bf0: 20 5f 66 6c 61 67 73 20 3d 20 63 6f 6e 6e 65 63   _flags = connec
6c00: 74 69 6f 6e 46 6c 61 67 73 3b 0d 0a 0d 0a 20 20  tionFlags;....  
6c10: 20 20 20 20 69 66 20 28 75 73 65 50 6f 6f 6c 29      if (usePool)
6c20: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
6c30: 20 20 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65     _sql = SQLite
6c40: 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52  ConnectionPool.R
6c50: 65 6d 6f 76 65 28 73 74 72 46 69 6c 65 6e 61 6d  emove(strFilenam
6c60: 65 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20  e, maxPoolSize, 
6c70: 6f 75 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e  out _poolVersion
6c80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
6c90: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f  LiteConnection.O
6ca0: 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e  nChanged(null, n
6cb0: 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  ew ConnectionEve
6cc0: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
6cd0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
6ce0: 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4f  ctionEventType.O
6cf0: 70 65 6e 65 64 46 72 6f 6d 50 6f 6f 6c 2c 20 6e  penedFromPool, n
6d00: 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20  ull, null,..    
6d10: 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75          null, nu
6d20: 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74 72 46 69 6c  ll, _sql, strFil
6d30: 65 6e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63  ename, new objec
6d40: 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  t[] {..         
6d50: 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
6d60: 33 29 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c  3), strFilename,
6d70: 20 76 66 73 4e 61 6d 65 2c 20 63 6f 6e 6e 65 63   vfsName, connec
6d80: 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a 20 20 20 20  tionFlags,..    
6d90: 20 20 20 20 20 20 20 20 6f 70 65 6e 46 6c 61 67          openFlag
6da0: 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20  s, maxPoolSize, 
6db0: 75 73 65 50 6f 6f 6c 2c 20 5f 70 6f 6f 6c 56 65  usePool, _poolVe
6dc0: 72 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23 69  rsion }));....#i
6dd0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
6de0: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
6df0: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54  CTION..        T
6e00: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53  race.WriteLine(S
6e10: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
6e20: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
6e30: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
6e40: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
6e50: 20 20 20 20 22 4f 70 65 6e 20 28 50 6f 6f 6c 29      "Open (Pool)
6e60: 3a 20 7b 30 7d 22 2c 20 48 61 6e 64 6c 65 54 6f  : {0}", HandleTo
6e70: 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e  String()));..#en
6e80: 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  dif..      }....
6e90: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
6ea0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
6eb0: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
6ec0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6ed0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
6ee0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
6ef0: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
6f00: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
6f10: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
6f20: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
6f30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 49 6e   {..          In
6f40: 74 50 74 72 20 64 62 20 3d 20 49 6e 74 50 74 72  tPtr db = IntPtr
6f50: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
6f60: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
6f70: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
6f80: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
6f90: 20 20 20 20 20 20 20 20 69 6e 74 20 65 78 74 46          int extF
6fa0: 75 6e 63 73 20 3d 20 28 28 63 6f 6e 6e 65 63 74  uncs = ((connect
6fb0: 69 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74  ionFlags & SQLit
6fc0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6fd0: 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63  .NoExtensionFunc
6fe0: 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74 65  tions) != SQLite
6ff0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7000: 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74  NoExtensionFunct
7010: 69 6f 6e 73 29 20 3f 20 31 20 3a 20 30 3b 0d 0a  ions) ? 1 : 0;..
7020: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
7030: 65 78 74 46 75 6e 63 73 20 21 3d 20 30 29 0d 0a  extFuncs != 0)..
7040: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7050: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
7060: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7070: 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e  .sqlite3_open_in
7080: 74 65 72 6f 70 28 54 6f 55 54 46 38 28 73 74 72  terop(ToUTF8(str
7090: 46 69 6c 65 6e 61 6d 65 29 2c 20 54 6f 55 54 46  Filename), ToUTF
70a0: 38 28 76 66 73 4e 61 6d 65 29 2c 20 6f 70 65 6e  8(vfsName), open
70b0: 46 6c 61 67 73 2c 20 65 78 74 46 75 6e 63 73 2c  Flags, extFuncs,
70c0: 20 72 65 66 20 64 62 29 3b 0d 0a 20 20 20 20 20   ref db);..     
70d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
70e0: 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a    else..#endif..
70f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7100: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
7110: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7120: 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32  .sqlite3_open_v2
7130: 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e  (ToUTF8(strFilen
7140: 61 6d 65 29 2c 20 72 65 66 20 64 62 2c 20 6f 70  ame), ref db, op
7150: 65 6e 46 6c 61 67 73 2c 20 54 6f 55 54 46 38 28  enFlags, ToUTF8(
7160: 76 66 73 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20  vfsName));..    
7170: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
7180: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
7190: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
71a0: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72  ON..          Tr
71b0: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
71c0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
71d0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
71e0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
71f0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
7200: 20 20 20 20 20 20 20 22 4f 70 65 6e 3a 20 7b 30         "Open: {0
7210: 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e 64 69  }", db));..#endi
7220: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  f....          i
7230: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
7240: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
7250: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
7260: 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d  ption(n, null);.
7270: 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20  .          _sql 
7280: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e  = new SQLiteConn
7290: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62 2c  ectionHandle(db,
72a0: 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20   true);..       
72b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b   }..        lock
72c0: 20 28 5f 73 71 6c 29 20 7b 20 2f 2a 20 48 41 43   (_sql) { /* HAC
72d0: 4b 3a 20 46 6f 72 63 65 20 74 68 65 20 53 79 6e  K: Force the Syn
72e0: 63 42 6c 6f 63 6b 20 74 6f 20 62 65 20 22 63 72  cBlock to be "cr
72f0: 65 61 74 65 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d  eated" now. */ }
7300: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
7310: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43  teConnection.OnC
7320: 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77  hanged(null, new
7330: 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74   ConnectionEvent
7340: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
7350: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
7360: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
7370: 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
7380: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
7390: 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e     null, null, n
73a0: 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74 72 46 69  ull, _sql, strFi
73b0: 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a 65  lename, new obje
73c0: 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ct[] {..        
73d0: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
73e0: 65 33 29 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65  e3), strFilename
73f0: 2c 20 76 66 73 4e 61 6d 65 2c 20 63 6f 6e 6e 65  , vfsName, conne
7400: 63 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a 20 20 20  ctionFlags,..   
7410: 20 20 20 20 20 20 20 20 20 6f 70 65 6e 46 6c 61           openFla
7420: 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c  gs, maxPoolSize,
7430: 20 75 73 65 50 6f 6f 6c 20 7d 29 29 3b 0d 0a 20   usePool }));.. 
7440: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7450: 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e  // Bind function
7460: 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63  s to this connec
7470: 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70 72  tion.  If any pr
7480: 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73  evious functions
7490: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
74a0: 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72 65  e..      // were
74b0: 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c 20   already bound, 
74c0: 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69 6e  then the new bin
74d0: 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74 68  dings replace th
74e0: 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 69 66  e old...      if
74f0: 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61   ((connectionFla
7500: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
7510: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e  ctionFlags.NoBin
7520: 64 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53  dFunctions) != S
7530: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7540: 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e 63 74  lags.NoBindFunct
7550: 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  ions)..      {..
7560: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 66            if (_f
7570: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
7580: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7590: 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65   _functions = ne
75a0: 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c  w Dictionary<SQL
75b0: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
75c0: 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63  bute, SQLiteFunc
75d0: 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  tion>();....    
75e0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b        foreach (K
75f0: 65 79 56 61 6c 75 65 50 61 69 72 3c 53 51 4c 69  eyValuePair<SQLi
7600: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
7610: 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74  ute, SQLiteFunct
7620: 69 6f 6e 3e 20 70 61 69 72 0d 0a 20 20 20 20 20  ion> pair..     
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20               in 
7640: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42  SQLiteFunction.B
7650: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68 69  indFunctions(thi
7660: 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  s, connectionFla
7670: 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gs))..          
7680: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7690: 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 70 61 69 72   _functions[pair
76a0: 2e 4b 65 79 5d 20 3d 20 70 61 69 72 2e 56 61 6c  .Key] = pair.Val
76b0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ue;..          }
76c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
76d0: 20 20 20 53 65 74 54 69 6d 65 6f 75 74 28 30 29     SetTimeout(0)
76e0: 3b 0d 0a 20 20 20 20 20 20 47 43 2e 4b 65 65 70  ;..      GC.Keep
76f0: 41 6c 69 76 65 28 5f 73 71 6c 29 3b 0d 0a 20 20  Alive(_sql);..  
7700: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
7710: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
7720: 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29 0d 0a 20  d ClearPool().. 
7730: 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
7740: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c  teConnectionPool
7750: 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66 69 6c 65  .ClearPool(_file
7760: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Name);..    }...
7770: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
7780: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 75 6e 74  erride int Count
7790: 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Pool()..    {.. 
77a0: 20 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61 72         Dictionar
77b0: 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 20 63  y<string, int> c
77c0: 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  ounts = null;.. 
77d0: 20 20 20 20 20 20 20 69 6e 74 20 6f 70 65 6e 43         int openC
77e0: 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ount = 0;..     
77f0: 20 20 20 69 6e 74 20 63 6c 6f 73 65 43 6f 75 6e     int closeCoun
7800: 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  t = 0;..        
7810: 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e 74 20 3d  int totalCount =
7820: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53   0;....        S
7830: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
7840: 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73 28 5f 66  ool.GetCounts(_f
7850: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
7860: 20 20 20 20 20 20 72 65 66 20 63 6f 75 6e 74 73        ref counts
7870: 2c 20 72 65 66 20 6f 70 65 6e 43 6f 75 6e 74 2c  , ref openCount,
7880: 20 72 65 66 20 63 6c 6f 73 65 43 6f 75 6e 74 2c   ref closeCount,
7890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
78a0: 66 20 74 6f 74 61 6c 43 6f 75 6e 74 29 3b 0d 0a  f totalCount);..
78b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
78c0: 20 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d 0a 20 20   totalCount;..  
78d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
78e0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
78f0: 64 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e 74  d SetTimeout(int
7900: 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20   nTimeoutMS)..  
7910: 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74    {..      IntPt
7920: 72 20 64 62 20 3d 20 5f 73 71 6c 3b 0d 0a 20 20  r db = _sql;..  
7930: 20 20 20 20 69 66 20 28 64 62 20 3d 3d 20 49 6e      if (db == In
7940: 74 50 74 72 2e 5a 65 72 6f 29 20 74 68 72 6f 77  tPtr.Zero) throw
7950: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
7960: 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63 74  tion("no connect
7970: 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76 61 69 6c  ion handle avail
7980: 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20 20 53  able");..      S
7990: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
79a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
79b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
79c0: 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20  usy_timeout(db, 
79d0: 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20 20  nTimeoutMS);..  
79e0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
79f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
7a00: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
7a10: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
7a20: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
7a30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
7a40: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
7a50: 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74 65 53  ool Step(SQLiteS
7a60: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a  tatement stmt)..
7a70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
7a80: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
7a90: 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e  .      Random rn
7aa0: 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  d = null;..     
7ab0: 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20   uint starttick 
7ac0: 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d  = (uint)Environm
7ad0: 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a  ent.TickCount;..
7ae0: 20 20 20 20 20 20 75 69 6e 74 20 74 69 6d 65 6f        uint timeo
7af0: 75 74 20 3d 20 28 75 69 6e 74 29 28 73 74 6d 74  ut = (uint)(stmt
7b00: 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61  ._command._comma
7b10: 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30  ndTimeout * 1000
7b20: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65 73 65  );....      Rese
7b30: 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 3b 0d  tCancelCount();.
7b40: 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28  ...      while (
7b50: 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  true)..      {..
7b60: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
7b70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7b80: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
7b90: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
7ba0: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f         finally /
7bb0: 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41  * NOTE: Thread.A
7bc0: 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f  bort() protectio
7bd0: 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  n. */..        {
7be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20  ..          n = 
7bf0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7c00: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 74 65 70  ods.sqlite3_step
7c10: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
7c20: 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  mt);..        }.
7c30: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ...        if (S
7c40: 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e  houldThrowForCan
7c50: 63 65 6c 28 29 29 0d 0a 20 20 20 20 20 20 20 20  cel())..        
7c60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
7c70: 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  f ((n == SQLiteE
7c80: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d  rrorCode.Ok) ||.
7c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7ca0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
7cb0: 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a  orCode.Row) ||..
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cd0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
7ce0: 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20  rCode.Done))..  
7cf0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d               n =
7d10: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7d20: 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20 20  .Interrupt;..   
7d30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7d40: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7d50: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
7d60: 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20  ion(n, null);.. 
7d70: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7d80: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
7d90: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74  iteErrorCode.Int
7da0: 65 72 72 75 70 74 29 20 72 65 74 75 72 6e 20 66  errupt) return f
7db0: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 69  alse;..        i
7dc0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
7dd0: 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 72 65 74  rorCode.Row) ret
7de0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
7df0: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
7e00: 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65  teErrorCode.Done
7e10: 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d  ) return false;.
7e20: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
7e30: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
7e40: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
7e50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51   {..          SQ
7e60: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 3b  LiteErrorCode r;
7e70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
7e80: 20 41 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72   An error occurr
7e90: 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 72  ed, attempt to r
7ea0: 65 73 65 74 20 74 68 65 20 73 74 61 74 65 6d 65  eset the stateme
7eb0: 6e 74 2e 20 20 49 66 20 74 68 65 20 72 65 73 65  nt.  If the rese
7ec0: 74 20 77 6f 72 6b 65 64 20 62 65 63 61 75 73 65  t worked because
7ed0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
7ee0: 2f 2f 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  // schema has ch
7ef0: 61 6e 67 65 64 2c 20 72 65 2d 74 72 79 20 74 68  anged, re-try th
7f00: 65 20 73 74 65 70 20 61 67 61 69 6e 2e 20 20 49  e step again.  I
7f10: 66 20 69 74 20 65 72 72 6f 72 65 64 20 6f 75 72  f it errored our
7f20: 20 62 65 63 61 75 73 65 20 74 68 65 20 64 61 74   because the dat
7f30: 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20  abase..         
7f40: 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64 2c 20 74   // is locked, t
7f50: 68 65 6e 20 6b 65 65 70 20 72 65 74 72 79 69 6e  hen keep retryin
7f60: 67 20 75 6e 74 69 6c 20 74 68 65 20 63 6f 6d 6d  g until the comm
7f70: 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f 63 63 75  and timeout occu
7f80: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 72  rs...          r
7f90: 20 3d 20 52 65 73 65 74 28 73 74 6d 74 29 3b 0d   = Reset(stmt);.
7fa0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
7fb0: 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (r == SQLiteErro
7fc0: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
7fd0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7fe0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
7ff0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
8000: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ());....        
8010: 20 20 65 6c 73 65 20 69 66 20 28 28 72 20 3d 3d    else if ((r ==
8020: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8030: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20 3d 3d 20  .Locked || r == 
8040: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
8050: 42 75 73 79 29 20 26 26 20 73 74 6d 74 2e 5f 63  Busy) && stmt._c
8060: 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d  ommand != null).
8070: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
8080: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65            // Kee
8090: 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20  p trying..      
80a0: 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d        if (rnd ==
80b0: 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20   null) // First 
80c0: 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75  time we've encou
80d0: 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d  ntered the lock.
80e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
80f0: 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28  nd = new Random(
8100: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8110: 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78    // If we've ex
8120: 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61  ceeded the comma
8130: 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69  nd's timeout, gi
8140: 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20  ve up and throw 
8150: 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  an error..      
8160: 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74 29        if ((uint)
8170: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
8180: 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63  Count - starttic
8190: 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20 20  k > timeout)..  
81a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
81b0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
81c0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
81d0: 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61 73 74 45  tion(r, GetLastE
81e0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
81f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8200: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
8210: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8220: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
8230: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
8240: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
8250: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
8260: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
8270: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
8280: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
8290: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
82a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
82b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
82c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
82d0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
82e0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
82f0: 20 20 20 20 2f 2f 2f 20 48 61 73 20 74 68 65 20      /// Has the 
8300: 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28 29  sqlite3_errstr()
8310: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 41 50   core library AP
8320: 49 20 62 65 65 6e 20 63 68 65 63 6b 65 64 20 66  I been checked f
8330: 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f  or yet?..    ///
8340: 20 49 66 20 73 6f 2c 20 69 73 20 69 74 20 70 72   If so, is it pr
8350: 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20  esent?..    /// 
8360: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8370: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
8380: 6f 6f 6c 3f 20 68 61 76 65 5f 65 72 72 73 74 72  ool? have_errstr
8390: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
83a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
83b0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
83c0: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
83d0: 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
83e0: 65 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  ed SQLite return
83f0: 20 63 6f 64 65 20 75 73 69 6e 67 0d 0a 20 20 20   code using..   
8400: 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74 65 33   /// the sqlite3
8410: 5f 65 72 72 73 74 72 28 29 20 66 75 6e 63 74 69  _errstr() functi
8420: 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20 62 61 63 6b  on, falling back
8430: 20 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c   to the internal
8440: 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20 20 2f 2f 2f   lookup..    ///
8450: 20 74 61 62 6c 65 20 69 66 20 6e 65 63 65 73 73   table if necess
8460: 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ary...    /// </
8470: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
8480: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
8490: 63 22 3e 54 68 65 20 53 51 4c 69 74 65 20 72 65  c">The SQLite re
84a0: 74 75 72 6e 20 63 6f 64 65 2e 3c 2f 70 61 72 61  turn code.</para
84b0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
84c0: 75 72 6e 73 3e 54 68 65 20 65 72 72 6f 72 20 6d  urns>The error m
84d0: 65 73 73 61 67 65 20 6f 72 20 6e 75 6c 6c 20 69  essage or null i
84e0: 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 66  f it cannot be f
84f0: 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ound.</returns>.
8500: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
8510: 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 45  atic string GetE
8520: 72 72 6f 72 53 74 72 69 6e 67 28 53 51 4c 69 74  rrorString(SQLit
8530: 65 45 72 72 6f 72 43 6f 64 65 20 72 63 29 0d 0a  eErrorCode rc)..
8540: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
8550: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
8560: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 68             if (h
8570: 61 76 65 5f 65 72 72 73 74 72 20 3d 3d 20 6e 75  ave_errstr == nu
8580: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
8590: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
85a0: 20 20 20 20 69 6e 74 20 76 65 72 73 69 6f 6e 4e      int versionN
85b0: 75 6d 62 65 72 20 3d 20 53 51 4c 69 74 65 56 65  umber = SQLiteVe
85c0: 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20  rsionNumber;..  
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
85e0: 76 65 5f 65 72 72 73 74 72 20 3d 20 28 76 65 72  ve_errstr = (ver
85f0: 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30  sionNumber >= 30
8600: 30 37 30 31 35 29 3b 0d 0a 20 20 20 20 20 20 20  07015);..       
8610: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8620: 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c 29        if ((bool)
8630: 68 61 76 65 5f 65 72 72 73 74 72 29 0d 0a 20 20  have_errstr)..  
8640: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
8660: 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65  Ptr ptr = Unsafe
8670: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
8680: 6c 69 74 65 33 5f 65 72 72 73 74 72 28 72 63 29  lite3_errstr(rc)
8690: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
86a0: 20 20 20 20 20 69 66 20 28 70 74 72 20 21 3d 20       if (ptr != 
86b0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
86c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
86d0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
86e0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
86f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8700: 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72 73       return Mars
8710: 68 61 6c 2e 50 74 72 54 6f 53 74 72 69 6e 67 41  hal.PtrToStringA
8720: 6e 73 69 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65  nsi(ptr);..#else
8730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8740: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
8750: 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 2d  8ToString(ptr, -
8760: 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
8770: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
8780: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8790: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
87a0: 20 20 63 61 74 63 68 20 28 45 6e 74 72 79 50 6f    catch (EntryPo
87b0: 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78 63 65 70  intNotFoundExcep
87c0: 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b  tion)..        {
87d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
87e0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
87f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8800: 20 20 20 72 65 74 75 72 6e 20 46 61 6c 6c 62 61     return Fallba
8810: 63 6b 47 65 74 45 72 72 6f 72 53 74 72 69 6e 67  ckGetErrorString
8820: 28 72 63 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  (rc);..    }....
8830: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8840: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20 74  >..    /// Has t
8850: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  he sqlite3_stmt_
8860: 72 65 61 64 6f 6e 6c 79 28 29 20 63 6f 72 65 20  readonly() core 
8870: 6c 69 62 72 61 72 79 20 41 50 49 20 62 65 65 6e  library API been
8880: 20 63 68 65 63 6b 65 64 20 66 6f 72 20 79 65 74   checked for yet
8890: 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73 6f  ?..    /// If so
88a0: 2c 20 69 73 20 69 74 20 70 72 65 73 65 6e 74 3f  , is it present?
88b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
88c0: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
88d0: 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 68  e static bool? h
88e0: 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c  ave_stmt_readonl
88f0: 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  y = null;....   
8900: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8910: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
8920: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
8930: 73 70 65 63 69 66 69 65 64 20 73 74 61 74 65 6d  specified statem
8940: 65 6e 74 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ent is read-only
8950: 20 69 6e 20 6e 61 74 75 72 65 2e 0d 0a 20 20 20   in nature...   
8960: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8970: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
8980: 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20  name="stmt">The 
8990: 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 63 68 65  statement to che
89a0: 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ck.</param>..   
89b0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72   /// <returns>Tr
89c0: 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 20  ue if the outer 
89d0: 71 75 65 72 79 20 69 73 20 72 65 61 64 2d 6f 6e  query is read-on
89e0: 6c 79 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ly.</returns>.. 
89f0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8a00: 72 69 64 65 20 62 6f 6f 6c 20 49 73 52 65 61 64  ride bool IsRead
8a10: 4f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 53  Only(..        S
8a20: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
8a30: 74 6d 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  tmt..        )..
8a40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
8a50: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
8a60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 68             if (h
8a70: 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c  ave_stmt_readonl
8a80: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
8a90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8aa0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 76             int v
8ab0: 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3d 20 53  ersionNumber = S
8ac0: 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62  QLiteVersionNumb
8ad0: 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er;..           
8ae0: 20 20 20 20 20 68 61 76 65 5f 73 74 6d 74 5f 72       have_stmt_r
8af0: 65 61 64 6f 6e 6c 79 20 3d 20 28 76 65 72 73 69  eadonly = (versi
8b00: 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30 30 37  onNumber >= 3007
8b10: 30 30 34 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  004);..         
8b20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8b30: 20 20 20 20 69 66 20 28 28 62 6f 6f 6c 29 68 61      if ((bool)ha
8b40: 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79  ve_stmt_readonly
8b50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8b70: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
8b80: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8b90: 69 74 65 33 5f 73 74 6d 74 5f 72 65 61 64 6f 6e  ite3_stmt_readon
8ba0: 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly(..           
8bb0: 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73           stmt._s
8bc0: 71 6c 69 74 65 5f 73 74 6d 74 29 20 21 3d 20 30  qlite_stmt) != 0
8bd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8be0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
8bf0: 20 20 20 20 20 63 61 74 63 68 20 28 45 6e 74 72       catch (Entr
8c00: 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78  yPointNotFoundEx
8c10: 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  ception)..      
8c20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8c30: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
8c40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
8c50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
8c60: 73 65 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55 6e 6b  se; /* NOTE: Unk
8c70: 6e 6f 77 6e 2c 20 61 73 73 75 6d 65 20 66 61 6c  nown, assume fal
8c80: 73 65 2e 20 2a 2f 0d 0a 20 20 20 20 7d 0d 0a 0d  se. */..    }...
8c90: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
8ca0: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
8cb0: 6f 72 43 6f 64 65 20 52 65 73 65 74 28 53 51 4c  orCode Reset(SQL
8cc0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
8cd0: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
8ce0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8cf0: 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49   n;....#if !SQLI
8d00: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
8d10: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
8d20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8d30: 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f 70  e3_reset_interop
8d40: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
8d50: 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  mt);..#else..   
8d60: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
8d70: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8d80: 65 33 5f 72 65 73 65 74 28 73 74 6d 74 2e 5f 73  e3_reset(stmt._s
8d90: 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65  qlite_stmt);..#e
8da0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ndif....      //
8db0: 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63   If the schema c
8dc0: 68 61 6e 67 65 64 2c 20 74 72 79 20 61 6e 64 20  hanged, try and 
8dd0: 72 65 2d 70 72 65 70 61 72 65 20 69 74 0d 0a 20  re-prepare it.. 
8de0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
8df0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63  LiteErrorCode.Sc
8e00: 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  hema)..      {..
8e10: 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63 72 65          // Recre
8e20: 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74 61 74  ate a dummy stat
8e30: 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 73  ement..        s
8e40: 74 72 69 6e 67 20 73 74 72 20 3d 20 6e 75 6c 6c  tring str = null
8e50: 3b 0d 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67  ;..        using
8e60: 20 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e   (SQLiteStatemen
8e70: 74 20 74 6d 70 20 3d 20 50 72 65 70 61 72 65 28  t tmp = Prepare(
8e80: 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c 53  null, stmt._sqlS
8e90: 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20  tatement, null, 
8ea0: 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d  (uint)(stmt._com
8eb0: 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d  mand._commandTim
8ec0: 65 6f 75 74 20 2a 20 31 30 30 30 29 2c 20 72 65  eout * 1000), re
8ed0: 66 20 73 74 72 29 29 0d 0a 20 20 20 20 20 20 20  f str))..       
8ee0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
8ef0: 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 65 78   Finalize the ex
8f00: 69 73 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  isting statement
8f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74  ..          stmt
8f20: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2e 44 69  ._sqlite_stmt.Di
8f30: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
8f40: 20 20 20 20 2f 2f 20 52 65 61 73 73 69 67 6e 20      // Reassign 
8f50: 61 20 6e 65 77 20 73 74 61 74 65 6d 65 6e 74 20  a new statement 
8f60: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f  pointer to the o
8f70: 6c 64 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ld statement and
8f80: 20 63 6c 65 61 72 20 74 68 65 20 74 65 6d 70 6f   clear the tempo
8f90: 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20 20 20 20  rary one..      
8fa0: 20 20 20 20 69 66 20 28 74 6d 70 20 21 3d 20 6e      if (tmp != n
8fb0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
8fc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
8fd0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
8fe0: 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73   = tmp._sqlite_s
8ff0: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tmt;..          
9000: 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74    tmp._sqlite_st
9010: 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  mt = null;..    
9020: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9030: 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79 20       // Reapply 
9040: 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20  parameters..    
9050: 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64 50        stmt.BindP
9060: 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20 20  arameters();..  
9070: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9080: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
9090: 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77 6e 3b  rorCode.Unknown;
90a0: 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f 4b   // Reset was OK
90b0: 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20 63 68  , with schema ch
90c0: 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ange..      }.. 
90d0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
90e0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
90f0: 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d  de.Locked || n =
9100: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
9110: 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20  e.Busy)..       
9120: 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20   return n;....  
9130: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
9140: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
9150: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
9160: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
9170: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
9180: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
9190: 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f 20 57 65   return n; // We
91a0: 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73 63   reset OK, no sc
91b0: 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20 20  hema changes..  
91c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
91d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
91e0: 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72  ing GetLastError
91f0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
9200: 20 20 20 72 65 74 75 72 6e 20 47 65 74 4c 61 73     return GetLas
9210: 74 45 72 72 6f 72 28 6e 75 6c 6c 29 3b 0d 0a 20  tError(null);.. 
9220: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
9230: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
9240: 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f  ring GetLastErro
9250: 72 28 73 74 72 69 6e 67 20 64 65 66 56 61 6c 75  r(string defValu
9260: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
9270: 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74     string result
9280: 20 3d 20 53 51 4c 69 74 65 42 61 73 65 2e 47 65   = SQLiteBase.Ge
9290: 74 4c 61 73 74 45 72 72 6f 72 28 5f 73 71 6c 2c  tLastError(_sql,
92a0: 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20   _sql);..       
92b0: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
92c0: 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73 75 6c 74  llOrEmpty(result
92d0: 29 29 20 72 65 73 75 6c 74 20 3d 20 64 65 66 56  )) result = defV
92e0: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 72  alue;..        r
92f0: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
9300: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
9310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9370: 20 20 20 23 72 65 67 69 6f 6e 20 51 75 65 72 79     #region Query
9380: 20 44 69 61 67 6e 6f 73 74 69 63 73 20 53 75 70   Diagnostics Sup
9390: 70 6f 72 74 0d 0a 23 69 66 20 21 50 4c 41 54 46  port..#if !PLATF
93a0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
93b0: 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  WORK..    /// <s
93c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
93d0: 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20 75   This field is u
93e0: 73 65 64 20 74 6f 20 6b 65 65 70 20 74 72 61 63  sed to keep trac
93f0: 6b 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  k of whether or 
9400: 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  not the..    ///
9410: 20 22 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c 6f   "SQLite_ForceLo
9420: 67 50 72 65 70 61 72 65 22 20 65 6e 76 69 72 6f  gPrepare" enviro
9430: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 68  nment variable h
9440: 61 73 20 62 65 65 6e 20 71 75 65 72 69 65 64 2e  as been queried.
9450: 20 20 49 66 20 73 6f 2c 0d 0a 20 20 20 20 2f 2f    If so,..    //
9460: 2f 20 69 74 20 77 69 6c 6c 20 6f 6e 6c 79 20 62  / it will only b
9470: 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  e non-zero if th
9480: 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61  e environment va
9490: 72 69 61 62 6c 65 20 77 61 73 20 70 72 65 73 65  riable was prese
94a0: 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt...    /// </s
94b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
94c0: 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
94d0: 3f 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72  ? forceLogPrepar
94e0: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
94f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9550: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
9560: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
9570: 65 74 65 72 6d 69 6e 65 73 20 69 66 20 61 6c 6c  etermines if all
9580: 20 63 61 6c 6c 73 20 74 6f 20 70 72 65 70 61 72   calls to prepar
9590: 65 20 61 20 53 51 4c 20 71 75 65 72 79 20 77 69  e a SQL query wi
95a0: 6c 6c 20 62 65 20 6c 6f 67 67 65 64 2c 0d 0a 20  ll be logged,.. 
95b0: 20 20 20 2f 2f 2f 20 72 65 67 61 72 64 6c 65 73     /// regardles
95c0: 73 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20 66  s of the flags f
95d0: 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  or the associate
95e0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  d connection... 
95f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9600: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
9610: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  rns>..    /// No
9620: 6e 2d 7a 65 72 6f 20 74 6f 20 6c 6f 67 20 61 6c  n-zero to log al
9630: 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65 70 61  l calls to prepa
9640: 72 65 20 61 20 53 51 4c 20 71 75 65 72 79 2e 0d  re a SQL query..
9650: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
9660: 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
9670: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72   static bool For
9680: 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 0d 0a  ceLogPrepare()..
9690: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c      {..        l
96a0: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a  ock (syncRoot)..
96b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
96c0: 20 20 20 20 20 20 20 69 66 20 28 66 6f 72 63 65         if (force
96d0: 4c 6f 67 50 72 65 70 61 72 65 20 3d 3d 20 6e 75  LogPrepare == nu
96e0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
96f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9700: 20 20 20 20 69 66 20 28 55 6e 73 61 66 65 4e 61      if (UnsafeNa
9710: 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 53  tiveMethods.GetS
9720: 65 74 74 69 6e 67 56 61 6c 75 65 28 0d 0a 20 20  ettingValue(..  
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9740: 20 20 20 20 20 20 22 53 51 4c 69 74 65 5f 46 6f        "SQLite_Fo
9750: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 22 2c 20  rceLogPrepare", 
9760: 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a  null) != null)..
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9780: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9790: 20 20 20 20 20 20 20 66 6f 72 63 65 4c 6f 67 50         forceLogP
97a0: 72 65 70 61 72 65 20 3d 20 74 72 75 65 3b 0d 0a  repare = true;..
97b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
97d0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
97e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
97f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9800: 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20  forceLogPrepare 
9810: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
9820: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
9830: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9840: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9850: 20 28 62 6f 6f 6c 29 66 6f 72 63 65 4c 6f 67 50   (bool)forceLogP
9860: 72 65 70 61 72 65 3b 0d 0a 20 20 20 20 20 20 20  repare;..       
9870: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69   }..    }..#endi
9880: 66 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  f..    #endregio
9890: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98f0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9900: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
9910: 65 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e SQLiteStatemen
9920: 74 20 50 72 65 70 61 72 65 28 53 51 4c 69 74 65  t Prepare(SQLite
9930: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20  Connection cnn, 
9940: 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 53  string strSql, S
9950: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 70  QLiteStatement p
9960: 72 65 76 69 6f 75 73 2c 20 75 69 6e 74 20 74 69  revious, uint ti
9970: 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72  meoutMS, ref str
9980: 69 6e 67 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a  ing strRemain)..
9990: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20      {..      if 
99a0: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
99b0: 72 45 6d 70 74 79 28 73 74 72 53 71 6c 29 29 0d  rEmpty(strSql)).
99c0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
99d0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
99e0: 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65 20 64 6f   NOTE: SQLite do
99f0: 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74  es not support t
9a00: 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20 73 65  he concept of se
9a10: 70 61 72 61 74 65 20 73 63 68 65 6d 61 73 0d 0a  parate schemas..
9a20: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
9a30: 20 69 6e 20 6f 6e 65 20 64 61 74 61 62 61 73 65   in one database
9a40: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 6d  ; therefore, rem
9a50: 6f 76 65 20 74 68 65 20 62 61 73 65 20 73 63 68  ove the base sch
9a60: 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ema name..      
9a70: 20 20 2f 2f 20 20 20 20 20 20 20 75 73 65 64 20    //       used 
9a80: 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72  to smooth integr
9a90: 61 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 62  ation with the b
9aa0: 61 73 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ase .NET Framewo
9ab0: 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  rk..        //  
9ac0: 20 20 20 20 20 64 61 74 61 20 63 6c 61 73 73 65       data classe
9ad0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  s...        //..
9ae0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 62          string b
9af0: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20  aseSchemaName = 
9b00: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
9b10: 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e  cnn._baseSchemaN
9b20: 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ame : null;.... 
9b30: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
9b40: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
9b50: 28 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29  (baseSchemaName)
9b60: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
9b70: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
9b80: 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28   strSql.Replace(
9b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ba0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75  String.Format(Cu
9bb0: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
9bc0: 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  antCulture,..   
9bd0: 20 20 20 20 20 20 20 20 20 20 20 22 5b 7b 30 7d             "[{0}
9be0: 5d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e  ].", baseSchemaN
9bf0: 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70  ame), String.Emp
9c00: 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
9c10: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
9c20: 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20  l.Replace(..    
9c30: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
9c40: 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
9c50: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
9c60: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
9c70: 20 20 20 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73       "{0}.", bas
9c80: 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74  eSchemaName), St
9c90: 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20  ring.Empty);..  
9ca0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
9cb0: 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  ....      SQLite
9cc0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
9cd0: 66 6c 61 67 73 20 3d 0d 0a 20 20 20 20 20 20 20  flags =..       
9ce0: 20 20 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29     (cnn != null)
9cf0: 20 3f 20 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53   ? cnn.Flags : S
9d00: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9d10: 6c 61 67 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d  lags.Default;...
9d20: 0a 20 20 20 20 20 20 69 66 20 28 0d 0a 23 69 66  .      if (..#if
9d30: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
9d40: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
9d50: 20 20 20 20 20 20 20 46 6f 72 63 65 4c 6f 67 50         ForceLogP
9d60: 72 65 70 61 72 65 28 29 20 7c 7c 0d 0a 23 65 6e  repare() ||..#en
9d70: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 28  dif..          (
9d80: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
9d90: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
9da0: 6f 67 50 72 65 70 61 72 65 29 20 3d 3d 20 53 51  ogPrepare) == SQ
9db0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
9dc0: 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 29  ags.LogPrepare))
9dd0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
9de0: 20 20 20 20 20 69 66 20 28 28 73 74 72 53 71 6c       if ((strSql
9df0: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74   == null) || (st
9e00: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  rSql.Length == 0
9e10: 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 54 72 69  ) || (strSql.Tri
9e20: 6d 28 29 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29  m().Length == 0)
9e30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9e40: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
9e50: 73 73 61 67 65 28 22 50 72 65 70 61 72 69 6e 67  ssage("Preparing
9e60: 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22   {<nothing>}..."
9e70: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  );..          el
9e80: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
9e90: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
9ea0: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
9eb0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
9ec0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
9ed0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
9ee0: 75 72 65 2c 20 22 50 72 65 70 61 72 69 6e 67 20  ure, "Preparing 
9ef0: 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72  {{{0}}}...", str
9f00: 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  Sql));..      }.
9f10: 0a 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ...      IntPtr 
9f20: 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65  stmt = IntPtr.Ze
9f30: 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ro;..      IntPt
9f40: 72 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a  r ptr = IntPtr.Z
9f50: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
9f60: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
9f70: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
9f80: 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  n = SQLiteErrorC
9f90: 6f 64 65 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20  ode.Schema;..   
9fa0: 20 20 20 69 6e 74 20 72 65 74 72 69 65 73 20 3d     int retries =
9fb0: 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6d   0;..      int m
9fc0: 61 78 69 6d 75 6d 52 65 74 72 69 65 73 20 3d 20  aximumRetries = 
9fd0: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
9fe0: 63 6e 6e 2e 5f 70 72 65 70 61 72 65 52 65 74 72  cnn._prepareRetr
9ff0: 69 65 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e  ies : SQLiteConn
a000: 65 63 74 69 6f 6e 2e 44 65 66 61 75 6c 74 50 72  ection.DefaultPr
a010: 65 70 61 72 65 52 65 74 72 69 65 73 3b 0d 0a 20  epareRetries;.. 
a020: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
a030: 54 6f 55 54 46 38 28 73 74 72 53 71 6c 29 3b 0d  ToUTF8(strSql);.
a040: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79  .      string ty
a050: 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a  pedefs = null;..
a060: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
a070: 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c  ement cmd = null
a080: 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20  ;..      Random 
a090: 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  rnd = null;..   
a0a0: 20 20 20 75 69 6e 74 20 73 74 61 72 74 74 69 63     uint starttic
a0b0: 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f  k = (uint)Enviro
a0c0: 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b  nment.TickCount;
a0d0: 0d 0a 0d 0a 20 20 20 20 20 20 52 65 73 65 74 43  ....      ResetC
a0e0: 61 6e 63 65 6c 43 6f 75 6e 74 28 29 3b 0d 0a 0d  ancelCount();...
a0f0: 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20  .      GCHandle 
a100: 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c  handle = GCHandl
a110: 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e  e.Alloc(b, GCHan
a120: 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b  dleType.Pinned);
a130: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
a140: 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64  sql = handle.Add
a150: 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28  rOfPinnedObject(
a160: 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  );..      SQLite
a170: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
a180: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
a190: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 74  = null;..      t
a1a0: 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ry..      {..   
a1b0: 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e 20 3d       while ((n =
a1c0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
a1d0: 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d  e.Schema || n ==
a1e0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a1f0: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20  .Locked || n == 
a200: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a210: 42 75 73 79 29 20 26 26 20 72 65 74 72 69 65 73  Busy) && retries
a220: 20 3c 20 6d 61 78 69 6d 75 6d 52 65 74 72 69 65   < maximumRetrie
a230: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
a240: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
a250: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a260: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
a270: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
a280: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69   }..          fi
a290: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
a2a0: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
a2b0: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
a2c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a2d0: 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20 49 6e         stmt = In
a2e0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
a2f0: 20 20 20 20 20 20 20 20 70 74 72 20 3d 20 49 6e          ptr = In
a300: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 23 69  tPtr.Zero;....#i
a310: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
a320: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
a330: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
a340: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
a350: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
a360: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e  lite3_prepare_in
a370: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c  terop(_sql, psql
a380: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
a390: 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74  ref stmt, ref pt
a3a0: 72 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65  r, ref len);..#e
a3b0: 6c 73 65 0d 0a 23 69 66 20 55 53 45 5f 50 52 45  lse..#if USE_PRE
a3c0: 50 41 52 45 5f 56 32 0d 0a 20 20 20 20 20 20 20  PARE_V2..       
a3d0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
a3e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a3f0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
a400: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
a410: 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20 73 74  ngth - 1, ref st
a420: 6d 74 2c 20 72 65 66 20 70 74 72 29 3b 0d 0a 23  mt, ref ptr);..#
a430: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
a440: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
a450: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a460: 33 5f 70 72 65 70 61 72 65 28 5f 73 71 6c 2c 20  3_prepare(_sql, 
a470: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
a480: 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65   1, ref stmt, re
a490: 66 20 70 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d  f ptr);..#endif.
a4a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e  .            len
a4b0: 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a   = -1;..#endif..
a4c0: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
a4d0: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 53  CT_20 && TRACE_S
a4e0: 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20 20 20  TATEMENT..      
a4f0: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
a500: 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72  eLine(String.For
a510: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
a520: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
a530: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
a540: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a550: 20 20 20 22 50 72 65 70 61 72 65 20 28 7b 30 7d     "Prepare ({0}
a560: 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74  ): {1}", n, stmt
a570: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  ));..#endif.... 
a580: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
a590: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
a5a0: 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73 74 6d  Code.Ok) && (stm
a5b0: 74 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  t != IntPtr.Zero
a5c0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
a5d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a5e0: 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61   if (statementHa
a5f0: 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 73 74  ndle != null) st
a600: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2e 44 69  atementHandle.Di
a610: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
a620: 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
a630: 74 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51  tHandle = new SQ
a640: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
a650: 64 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 3b  dle(_sql, stmt);
a660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a670: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
a680: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
a690: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d  atementHandle !=
a6a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
a6b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a6c0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
a6d0: 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c  n.OnChanged(null
a6e0: 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e  , new Connection
a6f0: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
a700: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
a710: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
a720: 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48  ype.NewCriticalH
a730: 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c  andle, null, nul
a740: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
a750: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 73 74    null, null, st
a760: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73  atementHandle, s
a770: 74 72 53 71 6c 2c 20 6e 65 77 20 6f 62 6a 65 63  trSql, new objec
a780: 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  t[] {..         
a790: 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
a7a0: 74 65 33 29 2c 20 63 6e 6e 2c 20 73 74 72 53 71  te3), cnn, strSq
a7b0: 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d  l, previous, tim
a7c0: 65 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a 20 20 20  eoutMS }));..   
a7d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a7e0: 20 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64        if (Should
a7f0: 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29  ThrowForCancel()
a800: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
a810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a820: 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((n == SQLiteEr
a830: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a  rorCode.Ok) ||..
a840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a850: 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72    (n == SQLiteEr
a860: 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d  rorCode.Row) ||.
a870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a880: 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45     (n == SQLiteE
a890: 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d  rrorCode.Done)).
a8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
a8b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a8c0: 20 20 20 20 6e 20 3d 20 53 51 4c 69 74 65 45 72      n = SQLiteEr
a8d0: 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70  rorCode.Interrup
a8e0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
a8f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a900: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
a910: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
a920: 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
a930: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a940: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
a950: 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65  teErrorCode.Inte
a960: 72 72 75 70 74 29 0d 0a 20 20 20 20 20 20 20 20  rrupt)..        
a970: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
a980: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
a990: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
a9a0: 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20  ode.Schema)..   
a9b0: 20 20 20 20 20 20 20 20 20 72 65 74 72 69 65 73           retries
a9c0: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65  ++;..          e
a9d0: 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
a9e0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
a9f0: 6f 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  or)..          {
aa00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
aa10: 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65   (String.Compare
aa20: 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c  (GetLastError(),
aa30: 20 22 6e 65 61 72 20 5c 22 54 59 50 45 53 5c 22   "near \"TYPES\"
aa40: 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 22 2c  : syntax error",
aa50: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
aa60: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
aa70: 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ase) == 0)..    
aa80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
aa90: 20 20 20 20 20 20 20 20 20 69 6e 74 20 70 6f 73           int pos
aaa0: 20 3d 20 73 74 72 53 71 6c 2e 49 6e 64 65 78 4f   = strSql.IndexO
aab0: 66 28 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20 20  f(';');..       
aac0: 20 20 20 20 20 20 20 69 66 20 28 70 6f 73 20 3d         if (pos =
aad0: 3d 20 2d 31 29 20 70 6f 73 20 3d 20 73 74 72 53  = -1) pos = strS
aae0: 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d 0a  ql.Length - 1;..
aaf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ab00: 74 79 70 65 64 65 66 73 20 3d 20 73 74 72 53 71  typedefs = strSq
ab10: 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 70  l.Substring(0, p
ab20: 6f 73 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20  os + 1);..      
ab30: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
ab40: 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e   strSql.Substrin
ab50: 67 28 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20  g(pos + 1);.... 
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
ab70: 52 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a  Remain = "";....
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
ab90: 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c  ile (cmd == null
aba0: 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74   && strSql.Lengt
abb0: 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  h > 0)..        
abc0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
abd0: 20 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50           cmd = P
abe0: 72 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53  repare(cnn, strS
abf0: 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69  ql, previous, ti
ac00: 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72  meoutMS, ref str
ac10: 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20  Remain);..      
ac20: 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c            strSql
ac30: 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20   = strRemain;.. 
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
ac50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac60: 69 66 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c 29  if (cmd != null)
ac70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac80: 20 20 63 6d 64 2e 53 65 74 54 79 70 65 73 28 74    cmd.SetTypes(t
ac90: 79 70 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20 20  ypedefs);....   
aca0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
acb0: 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20  n cmd;..        
acc0: 20 20 20 20 7d 0d 0a 23 69 66 20 28 4e 45 54 5f      }..#if (NET_
acd0: 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20  35 || NET_40 || 
ace0: 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35  NET_45 || NET_45
acf0: 31 20 7c 7c 20 4e 45 54 5f 34 36 29 20 26 26 20  1 || NET_46) && 
ad00: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
ad10: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
ad20: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
ad30: 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61  (_buildingSchema
ad40: 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72   == false && Str
ad50: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c  ing.Compare(GetL
ad60: 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22  astError(), 0, "
ad70: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54  no such table: T
ad80: 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20  EMP.SCHEMA", 0, 
ad90: 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  26, StringCompar
ada0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
adb0: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
adc0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
add0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52              strR
ade0: 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 20 20 20  emain = "";..   
adf0: 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c             _buil
ae00: 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72 75  dingSchema = tru
ae10: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ae20: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
ae30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ae40: 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 53          ISQLiteS
ae50: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 20  chemaExtensions 
ae60: 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63 65  ext = ((IService
ae70: 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65 46  Provider)SQLiteF
ae80: 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65 29  actory.Instance)
ae90: 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70 65  .GetService(type
aea0: 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d 61  of(ISQLiteSchema
aeb0: 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73 20  Extensions)) as 
aec0: 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74  ISQLiteSchemaExt
aed0: 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20  ensions;....    
aee0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
aef0: 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ext != null)..  
af00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af10: 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63 68  ext.BuildTempSch
af20: 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20  ema(cnn);....   
af30: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
af40: 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20  le (cmd == null 
af50: 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  && strSql.Length
af60: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 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 20 20 20 20 63 6d 64 20              cmd 
af90: 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73  = Prepare(cnn, s
afa0: 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c  trSql, previous,
afb0: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20   timeoutMS, ref 
afc0: 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20  strRemain);..   
afd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
afe0: 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69  trSql = strRemai
aff0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
b000: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b010: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
b020: 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  cmd;..          
b030: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b040: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
b050: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
b070: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
b080: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
b090: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b0a0: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
b0b0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
b0c0: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
b0d0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
b0e0: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
b0f0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
b100: 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c 6f  Code.Busy) // Lo
b110: 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20  cked -- delay a 
b120: 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66  small amount bef
b130: 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20  ore retrying..  
b140: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b150: 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74         // Keep t
b160: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
b170: 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75     if (rnd == nu
b180: 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d  ll) // First tim
b190: 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65  e we've encounte
b1a0: 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20  red the lock..  
b1b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20              rnd 
b1c0: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d  = new Random();.
b1d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
b1e0: 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65  / If we've excee
b1f0: 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27  ded the command'
b200: 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20  s timeout, give 
b210: 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  up and throw an 
b220: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
b230: 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76     if ((uint)Env
b240: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
b250: 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e  nt - starttick >
b260: 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20   timeoutMS)..   
b270: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b280: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
b290: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
b2a0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
b2b0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
b2c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b2d0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
b2e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b2f0: 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77         // Otherw
b300: 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20  ise sleep for a 
b310: 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66  random amount of
b320: 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d   time up to 150m
b330: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
b340: 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e   System.Threadin
b350: 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72  g.Thread.Sleep(r
b360: 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29  nd.Next(1, 150))
b370: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
b380: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
b390: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b3a0: 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54 68      if (ShouldTh
b3b0: 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29 0d  rowForCancel()).
b3c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
b3d0: 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d          if ((n =
b3e0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b3f0: 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20 20  e.Ok) ||..      
b400: 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20            (n == 
b410: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
b420: 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  Row) ||..       
b430: 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20 53           (n == S
b440: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44  QLiteErrorCode.D
b450: 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  one))..         
b460: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b470: 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69 74 65        n = SQLite
b480: 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72  ErrorCode.Interr
b490: 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  upt;..          
b4a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
b4b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
b4c0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
b4d0: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
b4e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
b4f0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
b500: 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 29  rCode.Interrupt)
b510: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
b520: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
b530: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
b540: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
b550: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
b560: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
b570: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72  ;....        str
b580: 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f 53  Remain = UTF8ToS
b590: 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b  tring(ptr, len);
b5a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
b5b0: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
b5c0: 21 3d 20 6e 75 6c 6c 29 20 63 6d 64 20 3d 20 6e  != null) cmd = n
b5d0: 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ew SQLiteStateme
b5e0: 6e 74 28 74 68 69 73 2c 20 66 6c 61 67 73 2c 20  nt(this, flags, 
b5f0: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c  statementHandle,
b600: 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e   strSql.Substrin
b610: 67 28 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e 67  g(0, strSql.Leng
b620: 74 68 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e 4c  th - strRemain.L
b630: 65 6e 67 74 68 29 2c 20 70 72 65 76 69 6f 75 73  ength), previous
b640: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
b650: 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20  turn cmd;..     
b660: 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c   }..      finall
b670: 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  y..      {..    
b680: 20 20 20 20 68 61 6e 64 6c 65 2e 46 72 65 65 28      handle.Free(
b690: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
b6a0: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
b6b0: 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20  ted static void 
b6c0: 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74  LogBind(SQLiteSt
b6d0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
b6e0: 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 29  ndle, int index)
b6f0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
b700: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
b710: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
b720: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
b730: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53  Log.LogMessage(S
b740: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
b750: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
b760: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
b770: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
b780: 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61      "Binding sta
b790: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
b7a0: 74 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c  ter #{1} as NULL
b7b0: 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
b7c0: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
b7d0: 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d   index));..    }
b7e0: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
b7f0: 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f  d static void Lo
b800: 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74  gBind(SQLiteStat
b810: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
b820: 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 56  le, int index, V
b830: 61 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29 0d  alueType value).
b840: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
b850: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
b860: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
b870: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
b880: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
b890: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
b8a0: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
b8b0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
b8c0: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
b8d0: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
b8e0: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
b8f0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
b900: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
b910: 64 65 78 2c 20 76 61 6c 75 65 2e 47 65 74 54 79  dex, value.GetTy
b920: 70 65 28 29 2c 20 76 61 6c 75 65 29 29 3b 0d 0a  pe(), value));..
b930: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
b940: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
b950: 6e 67 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d  ng FormatDateTim
b960: 65 28 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  e(DateTime value
b970: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
b980: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
b990: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
b9a0: 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d  ingBuilder();...
b9b0: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
b9c0: 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 6f 53  Append(value.ToS
b9d0: 74 72 69 6e 67 28 22 79 79 79 79 2d 4d 4d 2d 64  tring("yyyy-MM-d
b9e0: 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46  dTHH:mm:ss.FFFFF
b9f0: 46 46 4b 22 29 29 3b 0d 0a 20 20 20 20 20 20 20  FFK"));..       
ba00: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27   result.Append('
ba10: 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65   ');..        re
ba20: 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75  sult.Append(valu
ba30: 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20  e.Kind);..      
ba40: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
ba50: 27 20 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 72  ' ');..        r
ba60: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c  esult.Append(val
ba70: 75 65 2e 54 69 63 6b 73 29 3b 0d 0a 0d 0a 20 20  ue.Ticks);....  
ba80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
ba90: 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  ult.ToString();.
baa0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
bab0: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
bac0: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
bad0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
bae0: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
baf0: 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 76 61  dex, DateTime va
bb00: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
bb10: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
bb20: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
bb30: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
bb40: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
bb50: 67 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ge(String.Format
bb60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  (..            "
bb70: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
bb80: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
bb90: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
bba0: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
bbb0: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
bbc0: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
bbd0: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
bbe0: 28 44 61 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d  (DateTime), Form
bbf0: 61 74 44 61 74 65 54 69 6d 65 28 76 61 6c 75 65  atDateTime(value
bc00: 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  )));..    }.... 
bc10: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
bc20: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
bc30: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
bc40: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
bc50: 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  nt index, string
bc60: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
bc70: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
bc80: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
bc90: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
bca0: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
bcb0: 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f 72  ssage(String.For
bcc0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
bcd0: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
bce0: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
bcf0: 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b  r #{1} as type {
bd00: 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b  2} with value {{
bd10: 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20  {3}}}...",..    
bd20: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
bd30: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70  tPtr, index, typ
bd40: 65 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76 61  eof(String), (va
bd50: 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76  lue != null) ? v
bd60: 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29  alue : "<null>")
bd70: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
bd80: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
bd90: 73 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65 63  string ToHexadec
bda0: 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20  imalString(..   
bdb0: 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61       byte[] arra
bdc0: 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  y..        )..  
bdd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
bde0: 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d  (array == null).
bdf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
be00: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
be10: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
be20: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
be30: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61 72  StringBuilder(ar
be40: 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b  ray.Length * 2);
be50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ....        int 
be60: 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e 4c  length = array.L
be70: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
be80: 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
be90: 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65   = 0; index < le
bea0: 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ngth; index++)..
beb0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
bec0: 6c 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79 5b  lt.Append(array[
bed0: 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28  index].ToString(
bee0: 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  "x2"));....     
bef0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
bf00: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
bf10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
bf20: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
bf30: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
bf40: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
bf50: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
bf60: 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d  , byte[] value).
bf70: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
bf80: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
bf90: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
bfa0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
bfb0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 74  og.LogMessage(St
bfc0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
bfd0: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
bfe0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
bff0: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
c000: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
c010: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
c020: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
c030: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
c040: 64 65 78 2c 20 74 79 70 65 6f 66 28 42 79 74 65  dex, typeof(Byte
c050: 5b 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e  []), (value != n
c060: 75 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64 65 63  ull) ? ToHexadec
c070: 69 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c 75 65  imalString(value
c080: 29 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d  ) : "<null>"));.
c090: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
c0a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
c0b0: 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65  void Bind_Double
c0c0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
c0d0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
c0e0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
c0f0: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 64  gs, int index, d
c100: 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20  ouble value)..  
c110: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
c120: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
c130: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
c140: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
c150: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
c160: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
c170: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
c180: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
c190: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
c1a0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
c1b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c1c0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
c1d0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
c1e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66          }....#if
c1f0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
c200: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
c210: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
c220: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
c230: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c240: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
c250: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
c260: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
c270: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
c280: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
c290: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
c2a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c2b0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  .sqlite3_bind_do
c2c0: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e  uble_interop(han
c2d0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
c2e0: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
c2f0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
c300: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53 51 4c 69  rorCode n = SQLi
c310: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
c320: 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e  .        throw n
c330: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
c340: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
c350: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69  endif..        i
c360: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
c370: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
c380: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
c390: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
c3a0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
c3b0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
c3c0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
c3d0: 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65  ind_Int32(SQLite
c3e0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
c3f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
c400: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
c410: 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c 75   index, int valu
c420: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
c430: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
c440: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
c450: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
c460: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
c470: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
c480: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
c490: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
c4a0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
c4b0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
c4c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c4d0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
c4e0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
c4f0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
c500: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
c510: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
c520: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
c530: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
c540: 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  int(handle, inde
c550: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
c560: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
c570: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
c580: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
c590: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
c5a0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
c5b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
c5c0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
c5d0: 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 33 32 28  oid Bind_UInt32(
c5e0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
c5f0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
c600: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
c610: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 69  s, int index, ui
c620: 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  nt value)..    {
c630: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
c640: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
c650: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
c660: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
c670: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
c680: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
c690: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
c6a0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
c6b0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
c6c0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
c6d0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
c6e0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
c6f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
c700: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
c710: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
c720: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
c730: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
c740: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a  ErrorCode n;....
c750: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
c760: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
c770: 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55  ctionFlags.BindU
c780: 49 6e 74 33 32 41 73 49 6e 74 36 34 29 20 3d 3d  Int32AsInt64) ==
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 42 69 6e 64 55 49 6e 74 33  nFlags.BindUInt3
c7b0: 32 41 73 49 6e 74 36 34 29 0d 0a 20 20 20 20 20  2AsInt64)..     
c7c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c7d0: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 32 20 3d 20    long value2 = 
c7e0: 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20 21 50  value;....#if !P
c7f0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
c800: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
c810: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
c820: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c830: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
c840: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
c850: 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 69 66 20  value2);..#elif 
c860: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
c870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
c880: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
c890: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
c8a0: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
c8b0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
c8c0: 72 65 66 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65  ref value2);..#e
c8d0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
c8e0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
c8f0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
c900: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
c910: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c920: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
c930: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
c940: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
c950: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
c960: 69 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c 65 2c  ind_uint(handle,
c970: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
c980: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
c990: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
c9a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
c9b0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
c9c0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
c9d0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
c9e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
c9f0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
ca00: 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36 34 28 53  oid Bind_Int64(S
ca10: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
ca20: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
ca30: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
ca40: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e  , int index, lon
ca50: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
ca60: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
ca70: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
ca80: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
ca90: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
caa0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
cab0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
cac0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
cad0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
cae0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
caf0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
cb00: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
cb10: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
cb20: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
cb30: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
cb40: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
cb50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cb60: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
cb70: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
cb80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
cb90: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
cba0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
cbb0: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
cbc0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
cbd0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
cbe0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
cbf0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
cc00: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69  te3_bind_int64_i
cc10: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
cc20: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
cc30: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
cc40: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
cc50: 65 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f  e n = SQLiteErro
cc60: 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20  rCode.Ok;..     
cc70: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
cc80: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
cc90: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
cca0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
ccb0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
ccc0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
ccd0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
cce0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
ccf0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
cd00: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
cd10: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49  ide void Bind_UI
cd20: 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65  nt64(SQLiteState
cd30: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
cd40: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
cd50: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
cd60: 78 2c 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d  x, ulong value).
cd70: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
cd80: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
cd90: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
cda0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
cdb0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
cdc0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
cdd0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
cde0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
cdf0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
ce00: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
ce10: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
ce20: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
ce30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ce40: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
ce50: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
ce60: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
ce70: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
ce80: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
ce90: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
cea0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
ceb0: 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  t64(handle, inde
cec0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69  x, value);..#eli
ced0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
cee0: 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RD..        SQLi
cef0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
cf00: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
cf10: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
cf20: 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  _uint64_interop(
cf30: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
cf40: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
cf50: 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  e..        SQLit
cf60: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53  eErrorCode n = S
cf70: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
cf80: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  k;..        thro
cf90: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
cfa0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
cfb0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
cfc0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
cfd0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
cfe0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
cff0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
d000: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
d010: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
d020: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
d030: 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69  d Bind_Text(SQLi
d040: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
d050: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
d060: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
d070: 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  nt index, string
d080: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
d090: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
d0a0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
d0b0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
d0c0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
d0d0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
d0e0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
d0f0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
d100: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
d110: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
d120: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
d130: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
d140: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
d150: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
d160: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
d170: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
d180: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
d190: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
d1a0: 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29   = ToUTF8(value)
d1b0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
d1c0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
d1d0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
d1e0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
d1f0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
d200: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
d210: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
d220: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
d230: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d240: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
d250: 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20  e, index, b);.. 
d260: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
d270: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
d280: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
d290: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d2a0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
d2b0: 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e  _text(handle, in
d2c0: 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68  dex, b, b.Length
d2d0: 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d   - 1, (IntPtr)(-
d2e0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  1));..        if
d2f0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
d300: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
d310: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
d320: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
d330: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
d340: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d350: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
d360: 6e 64 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69  nd_DateTime(SQLi
d370: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
d380: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
d390: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
d3a0: 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69  nt index, DateTi
d3b0: 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  me dt)..    {.. 
d3c0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
d3d0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
d3e0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
d3f0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
d400: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
d410: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
d420: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
d430: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d440: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
d450: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
d460: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
d470: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
d480: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
d490: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
d4a0: 20 64 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d   dt);..        }
d4b0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
d4c0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
d4d0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d4e0: 6e 46 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54  nFlags.BindDateT
d4f0: 69 6d 65 57 69 74 68 4b 69 6e 64 29 20 3d 3d 20  imeWithKind) == 
d500: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d510: 46 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69  Flags.BindDateTi
d520: 6d 65 57 69 74 68 4b 69 6e 64 29 0d 0a 20 20 20  meWithKind)..   
d530: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d540: 20 20 20 20 69 66 20 28 28 5f 64 61 74 65 74 69      if ((_dateti
d550: 6d 65 4b 69 6e 64 20 21 3d 20 44 61 74 65 54 69  meKind != DateTi
d560: 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69  meKind.Unspecifi
d570: 65 64 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ed) &&..        
d580: 20 20 20 20 20 20 20 20 28 64 74 2e 4b 69 6e 64          (dt.Kind
d590: 20 21 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64   != DateTimeKind
d5a0: 2e 55 6e 73 70 65 63 69 66 69 65 64 29 20 26 26  .Unspecified) &&
d5b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d5c0: 20 20 28 64 74 2e 4b 69 6e 64 20 21 3d 20 5f 64    (dt.Kind != _d
d5d0: 61 74 65 74 69 6d 65 4b 69 6e 64 29 29 0d 0a 20  atetimeKind)).. 
d5e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d600: 20 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20   (_datetimeKind 
d610: 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  == DateTimeKind.
d620: 55 74 63 29 0d 0a 20 20 20 20 20 20 20 20 20 20  Utc)..          
d630: 20 20 20 20 20 20 20 20 20 20 64 74 20 3d 20 64            dt = d
d640: 74 2e 54 6f 55 6e 69 76 65 72 73 61 6c 54 69 6d  t.ToUniversalTim
d650: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
d660: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
d670: 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d 20  datetimeKind == 
d680: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f 63  DateTimeKind.Loc
d690: 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  al)..           
d6a0: 20 20 20 20 20 20 20 20 20 64 74 20 3d 20 64 74           dt = dt
d6b0: 2e 54 6f 4c 6f 63 61 6c 54 69 6d 65 28 29 3b 0d  .ToLocalTime();.
d6c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
d6d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d6e0: 20 20 20 20 20 73 77 69 74 63 68 20 28 5f 64 61       switch (_da
d6f0: 74 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a 20  tetimeFormat).. 
d700: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d710: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74        case SQLit
d720: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63  eDateFormats.Tic
d730: 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ks:..           
d740: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d750: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
d760: 20 76 61 6c 75 65 20 3d 20 64 74 2e 54 69 63 6b   value = dt.Tick
d770: 73 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  s;....#if !PLATF
d780: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
d790: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
d7a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
d7b0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
d7c0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
d7d0: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
d7e0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
d7f0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d820: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
d830: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
d840: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
d850: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
d860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d870: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
d880: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
d890: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d8a0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
d8b0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
d8c0: 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53  alue);..#elif !S
d8d0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
d8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8f0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
d900: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
d910: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d920: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69  te3_bind_int64_i
d930: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
d940: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
d950: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
d970: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
d980: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
d990: 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok;..         
d9a0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
d9b0: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
d9c0: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
d9d0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
d9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
d9f0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
da00: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
da10: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
da20: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
da30: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
da40: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
da50: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
da60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
da70: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
da80: 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61  ateFormats.Julia
da90: 6e 44 61 79 3a 0d 0a 20 20 20 20 20 20 20 20 20  nDay:..         
daa0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
dac0: 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a  uble value = ToJ
dad0: 75 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d  ulianDay(dt);...
dae0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
daf0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
db00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
db10: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
db20: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
db30: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
db40: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
db50: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
db60: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
db70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db90: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
dba0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
dbb0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
dbc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbe0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
dbf0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
dc00: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
dc10: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64  bind_double(hand
dc20: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
dc30: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
dc40: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
dc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc60: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
dc70: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
dc80: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
dc90: 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  bind_double_inte
dca0: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
dcb0: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
dcc0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
dcd0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
dce0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53  eErrorCode n = S
dcf0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
dd00: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
dd10: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
dd20: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
dd30: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
dd40: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
dd50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
dd60: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
dd70: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
dd80: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
dd90: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
dda0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
ddb0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
ddc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ddd0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
dde0: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
ddf0: 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63  Formats.UnixEpoc
de00: 68 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h:..            
de10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
de20: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
de30: 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e  value = Convert.
de40: 54 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72  ToInt64(dt.Subtr
de50: 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54  act(UnixEpoch).T
de60: 6f 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d  otalSeconds);...
de70: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
de80: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
de90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dea0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
deb0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
dec0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
ded0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
dee0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
def0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
df00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df20: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
df30: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
df40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
df50: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
df80: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
df90: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
dfa0: 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c  bind_int64(handl
dfb0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
dfc0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
dfd0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
dff0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
e000: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
e010: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
e020: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
e030: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
e040: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
e050: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
e060: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
e070: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53 51 4c  rrorCode n = SQL
e080: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b  iteErrorCode.Ok;
e090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0a0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
e0b0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
e0c0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
e0d0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
e0e0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
e0f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e100: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
e110: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
e120: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
e130: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
e140: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e160: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  }..            d
e170: 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
e180: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1a0: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
e1b0: 38 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  8(dt);....#if !P
e1c0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
e1d0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
e1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e1f0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
e200: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e210: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
e220: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
e230: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e250: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e260: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
e270: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
e280: 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  x, b);..        
e290: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
e2a0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
e2c0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
e2d0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e2e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
e2f0: 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69  d_text(handle, i
e300: 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74  ndex, b, b.Lengt
e310: 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28  h - 1, (IntPtr)(
e320: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  -1));..         
e330: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
e340: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
e350: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
e360: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
e370: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
e380: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
e390: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
e3a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e3b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
e3c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
e3d0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
e3e0: 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53  void Bind_Blob(S
e3f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
e400: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
e410: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
e420: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74  , int index, byt
e430: 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20  e[] blobData).. 
e440: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
e450: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
e460: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
e470: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
e480: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
e490: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
e4a0: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
e4b0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
e4c0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
e4d0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
e4e0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
e4f0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
e500: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e510: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
e520: 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61   index, blobData
e530: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  );..        }..#
e540: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
e550: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e560: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
e570: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
e580: 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c  _bind_blob(handl
e590: 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61  e, index, blobDa
e5a0: 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e  ta, blobData.Len
e5b0: 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  gth, (IntPtr)(-1
e5c0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ));..        if 
e5d0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
e5e0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
e5f0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e600: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
e610: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
e620: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
e630: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
e640: 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61  d_Null(SQLiteSta
e650: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
e660: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
e670: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
e680: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
e690: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
e6a0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
e6b0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
e6c0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
e6d0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
e6e0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
e6f0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
e700: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e710: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
e720: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e730: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
e740: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e750: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
e760: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d  handle, index);.
e770: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
e780: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  if....        SQ
e790: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
e7a0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
e7b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
e7c0: 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c 20  nd_null(handle, 
e7d0: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
e7e0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
e7f0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
e800: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
e810: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
e820: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
e830: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
e840: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
e850: 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28  Bind_ParamCount(
e860: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
e870: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
e880: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
e890: 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
e8a0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
e8b0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
e8c0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
e8d0: 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e  tmt;..        in
e8e0: 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65  t value = Unsafe
e8f0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e900: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
e910: 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64 6c  eter_count(handl
e920: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  e);....        i
e930: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
e940: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e950: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
e960: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e970: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
e980: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e990: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
e9a0: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
e9b0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
e9c0: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
e9d0: 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46 6f  essage(String.Fo
e9e0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
e9f0: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
ea00: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
ea10: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
ea20: 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b      "Statement {
ea30: 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f 75 6e  0} paramter coun
ea40: 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20  t is {1}.",..   
ea50: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
ea60: 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c 75 65  dleIntPtr, value
ea70: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
ea80: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
ea90: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a   value;..    }..
eaa0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
eab0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 42  verride string B
eac0: 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53 51  ind_ParamName(SQ
ead0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
eae0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
eaf0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
eb00: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
eb10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
eb20: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
eb30: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
eb40: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20  _sqlite_stmt;.. 
eb50: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
eb60: 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49  me;....#if !SQLI
eb70: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
eb80: 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
eb90: 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20  ;..        name 
eba0: 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  = UTF8ToString(U
ebb0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ebc0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
ebd0: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69  parameter_name_i
ebe0: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
ebf0: 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20  ndex, ref len), 
ec00: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
ec10: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46        name = UTF
ec20: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
ec30: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ec40: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
ec50: 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c 65  eter_name(handle
ec60: 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
ec70: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
ec80: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
ec90: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
eca0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
ecb0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
ecc0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
ecd0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
ece0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
ecf0: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
ed00: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
ed10: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
ed20: 6f 67 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67  ogMessage(String
ed30: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
ed40: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
ed50: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
ed60: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
ed70: 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e         "Statemen
ed80: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
ed90: 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b 32  {1} name is {{{2
eda0: 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }}}.",..        
edb0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
edc0: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61 6d  tPtr, index, nam
edd0: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e));..        }.
ede0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
edf0: 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a  n name;..    }..
ee00: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ee10: 76 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64  verride int Bind
ee20: 5f 50 61 72 61 6d 49 6e 64 65 78 28 53 51 4c 69  _ParamIndex(SQLi
ee30: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
ee40: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
ee50: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 73  onFlags flags, s
ee60: 74 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29  tring paramName)
ee70: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
ee80: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
ee90: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
eea0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
eeb0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  t;..        int 
eec0: 69 6e 64 65 78 20 3d 20 55 6e 73 61 66 65 4e 61  index = UnsafeNa
eed0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
eee0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
eef0: 65 72 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c  er_index(handle,
ef00: 20 54 6f 55 54 46 38 28 70 61 72 61 6d 4e 61 6d   ToUTF8(paramNam
ef10: 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e));....        
ef20: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
ef30: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
ef40: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
ef50: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
ef60: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
ef70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef80: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
ef90: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
efa0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
efb0: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
efc0: 4d 65 73 73 61 67 65 28 53 74 72 69 6e 67 2e 46  Message(String.F
efd0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
efe0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
eff0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
f000: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
f010: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
f020: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64  {0} paramter ind
f030: 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d  ex of name {{{1}
f040: 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20  }} is #{2}.",.. 
f050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
f060: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72  andleIntPtr, par
f070: 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b  amName, index));
f080: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
f090: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e         return in
f0a0: 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  dex;..    }.... 
f0b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
f0c0: 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43  ride int ColumnC
f0d0: 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65  ount(SQLiteState
f0e0: 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20  ment stmt)..    
f0f0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
f100: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f110: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
f120: 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73  mn_count(stmt._s
f130: 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20  qlite_stmt);..  
f140: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f150: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
f160: 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53  ing ColumnName(S
f170: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
f180: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
f190: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
f1a0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
f1b0: 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
f1c0: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
f1d0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
f1e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
f1f0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72  olumn_name_inter
f200: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
f210: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
f220: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
f230: 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
f240: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f250: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
f260: 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71  mn_name(stmt._sq
f270: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
f280: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
f290: 20 20 69 66 20 28 70 20 3d 3d 20 49 6e 74 50 74    if (p == IntPt
f2a0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
f2b0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
f2c0: 65 45 78 63 65 70 74 69 6f 6e 28 53 51 4c 69 74  eException(SQLit
f2d0: 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 4d 65 6d  eErrorCode.NoMem
f2e0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
f2f0: 29 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  );..#if !SQLITE_
f300: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
f310: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
f320: 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 23 65  ing(p, len);..#e
f330: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
f340: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  n UTF8ToString(p
f350: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
f360: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f370: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54  ernal override T
f380: 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f 6c 75  ypeAffinity Colu
f390: 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c 69 74  mnAffinity(SQLit
f3a0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
f3b0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
f3c0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
f3d0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f3e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
f3f0: 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f 73  umn_type(stmt._s
f400: 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
f410: 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  x);..    }....  
f420: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f430: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
f440: 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74 61 74  nType(SQLiteStat
f450: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
f460: 69 6e 64 65 78 2c 20 72 65 66 20 54 79 70 65 41  index, ref TypeA
f470: 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e 69 74  ffinity nAffinit
f480: 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  y)..    {..     
f490: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21   int len;..#if !
f4a0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
f4b0: 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 30 3b 0d  .      len = 0;.
f4c0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
f4d0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
f4e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
f4f0: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e  lumn_decltype_in
f500: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
f510: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
f520: 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  ref len);..#else
f530: 0d 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31  ..      len = -1
f540: 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
f550: 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
f560: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f570: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28  column_decltype(
f580: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
f590: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64  t, index);..#end
f5a0: 69 66 0d 0a 20 20 20 20 20 20 6e 41 66 66 69 6e  if..      nAffin
f5b0: 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69  ity = ColumnAffi
f5c0: 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78  nity(stmt, index
f5d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
f5e0: 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  p != IntPtr.Zero
f5f0: 29 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53  ) return UTF8ToS
f600: 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a  tring(p, len);..
f610: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
f620: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72    {..        str
f630: 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74 2e  ing[] ar = stmt.
f640: 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e 73 3b  TypeDefinitions;
f650: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72  ..        if (ar
f660: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
f670: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f680: 69 66 20 28 69 6e 64 65 78 20 3c 20 61 72 2e 4c  if (index < ar.L
f690: 65 6e 67 74 68 20 26 26 20 61 72 5b 69 6e 64 65  ength && ar[inde
f6a0: 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  x] != null)..   
f6b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f6c0: 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20  ar[index];..    
f6d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72      }..        r
f6e0: 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70  eturn String.Emp
f6f0: 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ty;....        /
f700: 2f 73 77 69 74 63 68 20 28 6e 41 66 66 69 6e 69  /switch (nAffini
f710: 74 79 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 7b  ty)..        //{
f720: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 63 61  ..        //  ca
f730: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
f740: 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20  Int64:..        
f750: 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 42 49  //    return "BI
f760: 47 49 4e 54 22 3b 0d 0a 20 20 20 20 20 20 20 20  GINT";..        
f770: 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66 66  //  case TypeAff
f780: 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20  inity.Double:.. 
f790: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
f7a0: 75 72 6e 20 22 44 4f 55 42 4c 45 22 3b 0d 0a 20  urn "DOUBLE";.. 
f7b0: 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20         //  case 
f7c0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f  TypeAffinity.Blo
f7d0: 62 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  b:..        //  
f7e0: 20 20 72 65 74 75 72 6e 20 22 42 4c 4f 42 22 3b    return "BLOB";
f7f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 64 65  ..        //  de
f800: 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
f810: 2f 2f 20 20 20 20 72 65 74 75 72 6e 20 22 54 45  //    return "TE
f820: 58 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  XT";..        //
f830: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
f840: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
f850: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
f860: 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74  olumnIndex(SQLit
f870: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
f880: 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61   string columnNa
f890: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
f8a0: 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e    int x = Column
f8b0: 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a  Count(stmt);....
f8c0: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
f8d0: 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b   = 0; n < x; n++
f8e0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
f8f0: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43      if (String.C
f900: 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d  ompare(columnNam
f910: 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74  e, ColumnName(st
f920: 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f  mt, n), StringCo
f930: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
f940: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
f950: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  )..          ret
f960: 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d  urn n;..      }.
f970: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31  .      return -1
f980: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
f990: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
f9a0: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f  e string ColumnO
f9b0: 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69  riginalName(SQLi
f9c0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
f9d0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
f9e0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
f9f0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
fa00: 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
fa10: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
fa20: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
fa30: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fa40: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
fa50: 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  in_name_interop(
fa60: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
fa70: 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  t, index, ref le
fa80: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
fa90: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
faa0: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
fab0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
fac0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
fad0: 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  rigin_name(stmt.
fae0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
faf0: 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
fb00: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
fb10: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
fb20: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
fb30: 44 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c  DatabaseName(SQL
fb40: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
fb50: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
fb60: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
fb70: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
fb80: 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
fb90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
fba0: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
fbb0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
fbc0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
fbd0: 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72  abase_name_inter
fbe0: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
fbf0: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
fc00: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
fc10: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
fc20: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
fc30: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
fc40: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
fc50: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28  n_database_name(
fc60: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
fc70: 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  t, index), -1);.
fc80: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
fc90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
fca0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
fcb0: 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 53  olumnTableName(S
fcc0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
fcd0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
fce0: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
fcf0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
fd00: 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
fd10: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
fd20: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
fd30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
fd40: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
fd50: 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  able_name_intero
fd60: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
fd70: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
fd80: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
fd90: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
fda0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
fdb0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
fdc0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
fdd0: 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74  _table_name(stmt
fde0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
fdf0: 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
fe00: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
fe10: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
fe20: 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d  ide void ColumnM
fe30: 65 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64  etaData(string d
fe40: 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20  ataBase, string 
fe50: 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f  table, string co
fe60: 6c 75 6d 6e 2c 20 72 65 66 20 73 74 72 69 6e 67  lumn, ref string
fe70: 20 64 61 74 61 54 79 70 65 2c 20 72 65 66 20 73   dataType, ref s
fe80: 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71  tring collateSeq
fe90: 75 65 6e 63 65 2c 20 72 65 66 20 62 6f 6f 6c 20  uence, ref bool 
fea0: 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62 6f 6f  notNull, ref boo
feb0: 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 72 65  l primaryKey, re
fec0: 66 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65  f bool autoIncre
fed0: 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ment)..    {..  
fee0: 20 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54      IntPtr dataT
fef0: 79 70 65 50 74 72 20 3d 20 49 6e 74 50 74 72 2e  ypePtr = IntPtr.
ff00: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74  Zero;..      Int
ff10: 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 20 3d  Ptr collSeqPtr =
ff20: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
ff30: 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c       int nnotNul
ff40: 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e  l = 0;..      in
ff50: 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 20  t nprimaryKey = 
ff60: 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61  0;..      int na
ff70: 75 74 6f 49 6e 63 20 3d 20 30 3b 0d 0a 20 20 20  utoInc = 0;..   
ff80: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
ff90: 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  de n;..      int
ffa0: 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69   dtLen;..      i
ffb0: 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66  nt csLen;....#if
ffc0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
ffd0: 44 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d  D..      dtLen =
ffe0: 20 30 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e   0;..      csLen
fff0: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6e 20 3d   = 0;..      n =
10000 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10010 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
10020 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
10030 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  ta_interop(_sql,
10040 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65   ToUTF8(dataBase
10050 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29  ), ToUTF8(table)
10060 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
10070 2c 20 72 65 66 20 64 61 74 61 54 79 70 65 50 74  , ref dataTypePt
10080 72 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74  r, ref collSeqPt
10090 72 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c  r, ref nnotNull,
100a0 20 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79   ref nprimaryKey
100b0 2c 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 2c 20  , ref nautoInc, 
100c0 72 65 66 20 64 74 4c 65 6e 2c 20 72 65 66 20 63  ref dtLen, ref c
100d0 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  sLen);..#else.. 
100e0 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b       dtLen = -1;
100f0 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20  ..      csLen = 
10100 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d  -1;....      n =
10110 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10120 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
10130 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
10140 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  ta(_sql, ToUTF8(
10150 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46  dataBase), ToUTF
10160 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38  8(table), ToUTF8
10170 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61  (column), ref da
10180 74 61 54 79 70 65 50 74 72 2c 20 72 65 66 20 63  taTypePtr, ref c
10190 6f 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e  ollSeqPtr, ref n
101a0 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72  notNull, ref npr
101b0 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61  imaryKey, ref na
101c0 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66  utoInc);..#endif
101d0 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
101e0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
101f0 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
10200 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
10210 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
10220 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74 61  );....      data
10230 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72  Type = UTF8ToStr
10240 69 6e 67 28 64 61 74 61 54 79 70 65 50 74 72 2c  ing(dataTypePtr,
10250 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20 20   dtLen);..      
10260 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 20  collateSequence 
10270 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63  = UTF8ToString(c
10280 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c 65 6e  ollSeqPtr, csLen
10290 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74 4e  );....      notN
102a0 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20  ull = (nnotNull 
102b0 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 70 72  == 1);..      pr
102c0 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70 72 69  imaryKey = (npri
102d0 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a  maryKey == 1);..
102e0 20 20 20 20 20 20 61 75 74 6f 49 6e 63 72 65 6d        autoIncrem
102f0 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63 20  ent = (nautoInc 
10300 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  == 1);..    }...
10310 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
10320 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65  erride double Ge
10330 74 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74  tDouble(SQLiteSt
10340 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
10350 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
10360 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61  .      double va
10370 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46  lue;..#if !PLATF
10380 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
10390 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75  WORK..      valu
103a0 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
103b0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
103c0 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74  column_double(st
103d0 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
103e0 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20   index);..#elif 
103f0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
10400 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20  ..      value = 
10410 30 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61  0.0;..      Unsa
10420 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10430 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
10440 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74  ouble_interop(st
10450 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
10460 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
10470 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
10480 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
10490 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
104a0 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
104b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
104c0 75 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ue;..    }....  
104d0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
104e0 69 64 65 20 73 62 79 74 65 20 47 65 74 53 42 79  ide sbyte GetSBy
104f0 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  te(SQLiteStateme
10500 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
10510 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
10520 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
10530 65 64 28 28 73 62 79 74 65 29 28 47 65 74 49 6e  ed((sbyte)(GetIn
10540 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
10550 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65   & byte.MaxValue
10560 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
10570 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
10580 69 64 65 20 62 79 74 65 20 47 65 74 42 79 74 65  ide byte GetByte
10590 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
105a0 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
105b0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
105c0 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
105d0 28 28 62 79 74 65 29 28 47 65 74 49 6e 74 33 32  ((byte)(GetInt32
105e0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
105f0 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b  byte.MaxValue));
10600 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10610 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10620 20 73 68 6f 72 74 20 47 65 74 49 6e 74 31 36 28   short GetInt16(
10630 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
10640 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
10650 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
10660 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28  eturn unchecked(
10670 28 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32  (short)(GetInt32
10680 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
10690 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29  ushort.MaxValue)
106a0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
106b0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
106c0 64 65 20 75 73 68 6f 72 74 20 47 65 74 55 49 6e  de ushort GetUIn
106d0 74 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t16(SQLiteStatem
106e0 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
106f0 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
10700 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
10710 6b 65 64 28 28 75 73 68 6f 72 74 29 28 47 65 74  ked((ushort)(Get
10720 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
10730 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56  x) & ushort.MaxV
10740 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
10750 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10760 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 49  verride int GetI
10770 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
10780 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
10790 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
107a0 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
107b0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
107c0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
107d0 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
107e0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
107f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
10800 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 69 6e  nal override uin
10810 74 20 47 65 74 55 49 6e 74 33 32 28 53 51 4c 69  t GetUInt32(SQLi
10820 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
10830 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
10840 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
10850 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 69 6e  n unchecked((uin
10860 74 29 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  t)GetInt32(stmt,
10870 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d   index));..    }
10880 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10890 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
108a0 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  etInt64(SQLiteSt
108b0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
108c0 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
108d0 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75  .      long valu
108e0 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  e;..#if !PLATFOR
108f0 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
10900 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75 65 20  RK..      value 
10910 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
10920 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
10930 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e  lumn_int64(stmt.
10940 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
10950 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  dex);..#elif !SQ
10960 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
10970 20 20 20 20 20 76 61 6c 75 65 20 3d 20 30 3b 0d       value = 0;.
10980 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
10990 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
109a0 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f  e3_column_int64_
109b0 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
109c0 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
109d0 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
109e0 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
109f0 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
10a00 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
10a10 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
10a20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
10a30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10a40 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 6c  rnal override ul
10a50 6f 6e 67 20 47 65 74 55 49 6e 74 36 34 28 53 51  ong GetUInt64(SQ
10a60 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
10a70 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
10a80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
10a90 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75  urn unchecked((u
10aa0 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34 28 73 74  long)GetInt64(st
10ab0 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20  mt, index));..  
10ac0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
10ad0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
10ae0 69 6e 67 20 47 65 74 54 65 78 74 28 53 51 4c 69  ing GetText(SQLi
10af0 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
10b00 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
10b10 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
10b20 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
10b30 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
10b40 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
10b50 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
10b60 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10b70 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
10b80 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
10b90 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
10ba0 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e  x, ref len), len
10bb0 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
10bc0 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
10bd0 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
10be0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10bf0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d  _column_text(stm
10c00 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
10c10 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20  index),..       
10c20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10c30 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
10c40 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f  umn_bytes(stmt._
10c50 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
10c60 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ex));..#endif.. 
10c70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10c80 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44 61  rnal override Da
10c90 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54 69  teTime GetDateTi
10ca0 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
10cb0 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
10cc0 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
10cd0 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46    if (_datetimeF
10ce0 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44  ormat == SQLiteD
10cf0 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73  ateFormats.Ticks
10d00 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  )..        retur
10d10 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74  n ToDateTime(Get
10d20 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
10d30 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e  x), _datetimeKin
10d40 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20  d);..      else 
10d50 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72  if (_datetimeFor
10d60 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74  mat == SQLiteDat
10d70 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44  eFormats.JulianD
10d80 61 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ay)..        ret
10d90 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47  urn ToDateTime(G
10da0 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69  etDouble(stmt, i
10db0 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65  ndex), _datetime
10dc0 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  Kind);..      el
10dd0 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65  se if (_datetime
10de0 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65  Format == SQLite
10df0 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78  DateFormats.Unix
10e00 45 70 6f 63 68 29 0d 0a 20 20 20 20 20 20 20 20  Epoch)..        
10e10 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
10e20 65 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  e(GetInt32(stmt,
10e30 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69   index), _dateti
10e40 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69 66 20  meKind);....#if 
10e50 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
10e60 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
10e70 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
10e80 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e  rn ToDateTime(Un
10e90 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10ea0 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
10eb0 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74  _text_interop(st
10ec0 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
10ed0 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29   index, ref len)
10ee0 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
10ef0 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
10f00 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61  ateTime(UnsafeNa
10f10 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10f20 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
10f30 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
10f40 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20  t, index),..    
10f50 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
10f60 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10f70 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
10f80 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
10f90 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66  index));..#endif
10fa0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10fb0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10fc0 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28 53   long GetBytes(S
10fd0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
10fe0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
10ff0 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
11000 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69   byte[] bDest, i
11010 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
11020 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
11030 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d        int nlen =
11040 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11050 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
11060 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f  umn_bytes(stmt._
11070 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
11080 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ex);....      //
11090 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69   If no destinati
110a0 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75 72  on buffer, retur
110b0 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65  n the size neede
110c0 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44  d...      if (bD
110d0 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74  est == null) ret
110e0 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20  urn nlen;....   
110f0 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d     int nCopied =
11100 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20   nLength;....   
11110 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
11120 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e   nStart > bDest.
11130 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20  Length) nCopied 
11140 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d  = bDest.Length -
11150 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20   nStart;..      
11160 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44  if (nCopied + nD
11170 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e  ataOffset > nlen
11180 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e  ) nCopied = nlen
11190 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d   - nDataOffset;.
111a0 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
111b0 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20  pied > 0)..     
111c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
111d0 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e  tr ptr = UnsafeN
111e0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
111f0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
11200 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
11210 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
11220 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
11230 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72  opy((IntPtr)(ptr
11240 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61  .ToInt64() + nDa
11250 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74  taOffset), bDest
11260 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65  , nStart, nCopie
11270 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  d);..      }..  
11280 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
11290 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69  {..        nCopi
112a0 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d  ed = 0;..      }
112b0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
112c0 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d   nCopied;..    }
112d0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
112e0 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
112f0 65 74 43 68 61 72 73 28 53 51 4c 69 74 65 53 74  etChars(SQLiteSt
11300 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
11310 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61  t index, int nDa
11320 74 61 4f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d  taOffset, char[]
11330 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
11340 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
11350 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
11360 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20  nt nlen;..      
11370 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c  int nCopied = nL
11380 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
11390 73 74 72 69 6e 67 20 73 74 72 20 3d 20 47 65 74  string str = Get
113a0 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
113b0 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d  );..      nlen =
113c0 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a   str.Length;....
113d0 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
113e0 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
113f0 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
11400 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
11410 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
11420 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
11430 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
11440 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
11450 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
11460 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
11470 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
11480 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
11490 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
114a0 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 73   > 0)..        s
114b0 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f  tr.CopyTo(nDataO
114c0 66 66 73 65 74 2c 20 62 44 65 73 74 2c 20 6e 53  ffset, bDest, nS
114d0 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
114e0 0a 20 20 20 20 20 20 65 6c 73 65 20 6e 43 6f 70  .      else nCop
114f0 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  ied = 0;....    
11500 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64    return nCopied
11510 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
11520 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
11530 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51  e bool IsNull(SQ
11540 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
11550 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
11560 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
11570 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e  urn (ColumnAffin
11580 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ity(stmt, index)
11590 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
115a0 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Null);..    }..
115b0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
115c0 76 65 72 72 69 64 65 20 69 6e 74 20 41 67 67 72  verride int Aggr
115d0 65 67 61 74 65 43 6f 75 6e 74 28 49 6e 74 50 74  egateCount(IntPt
115e0 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
115f0 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
11600 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
11610 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72  ods.sqlite3_aggr
11620 65 67 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74  egate_count(cont
11630 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ext);..    }....
11640 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11650 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
11660 72 43 6f 64 65 20 43 72 65 61 74 65 46 75 6e 63  rCode CreateFunc
11670 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 46  tion(string strF
11680 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72  unction, int nAr
11690 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c  gs, bool needCol
116a0 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c  lSeq, SQLiteCall
116b0 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74  back func, SQLit
116c0 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74  eCallback funcst
116d0 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c 43  ep, SQLiteFinalC
116e0 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61  allback funcfina
116f0 6c 2c 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77  l, bool canThrow
11700 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11710 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
11720 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  n;....#if !SQLIT
11730 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
11740 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
11750 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
11760 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
11770 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  n_interop(_sql, 
11780 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
11790 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49  on), nArgs, 4, I
117a0 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
117b0 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
117c0 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c  final, (needColl
117d0 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31  Seq == true) ? 1
117e0 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66   : 0);..      if
117f0 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
11800 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
11810 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11820 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
11830 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72  e_function_inter
11840 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
11850 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
11860 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 1, IntPtr.Z
11870 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
11880 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20  tep, funcfinal, 
11890 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20  (needCollSeq == 
118a0 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d  true) ? 1 : 0);.
118b0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20  .#else..      n 
118c0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
118d0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
118e0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73  eate_function(_s
118f0 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75  ql, ToUTF8(strFu
11900 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20  nction), nArgs, 
11910 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  4, IntPtr.Zero, 
11920 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20  func, funcstep, 
11930 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20  funcfinal);..   
11940 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
11950 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
11960 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
11970 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11980 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
11990 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
119a0 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
119b0 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
119c0 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
119d0 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23  , funcfinal);..#
119e0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20  endif..      if 
119f0 28 63 61 6e 54 68 72 6f 77 20 26 26 20 28 6e 20  (canThrow && (n 
11a00 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
11a10 64 65 2e 4f 6b 29 29 20 74 68 72 6f 77 20 6e 65  de.Ok)) throw ne
11a20 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
11a30 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
11a40 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 72 65 74  r());..      ret
11a50 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  urn n;..    }...
11a60 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11a70 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
11a80 6f 72 43 6f 64 65 20 43 72 65 61 74 65 43 6f 6c  orCode CreateCol
11a90 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74  lation(string st
11aa0 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69  rCollation, SQLi
11ab0 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63  teCollation func
11ac0 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f  , SQLiteCollatio
11ad0 6e 20 66 75 6e 63 31 36 2c 20 62 6f 6f 6c 20 63  n func16, bool c
11ae0 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d  anThrow)..    {.
11af0 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
11b00 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
11b10 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11b20 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
11b30 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  llation(_sql, To
11b40 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f  UTF8(strCollatio
11b50 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e 5a 65  n), 2, IntPtr.Ze
11b60 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20  ro, func16);..  
11b70 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
11b80 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
11b90 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
11ba0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11bb0 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
11bc0 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
11bd0 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c  trCollation), 1,
11be0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
11bf0 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  nc);..      if (
11c00 63 61 6e 54 68 72 6f 77 20 26 26 20 28 6e 20 21  canThrow && (n !
11c10 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
11c20 65 2e 4f 6b 29 29 20 74 68 72 6f 77 20 6e 65 77  e.Ok)) throw new
11c30 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
11c40 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
11c50 28 29 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  ());..      retu
11c60 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  rn n;..    }....
11c70 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11c80 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78  rride int Contex
11c90 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28  tCollateCompare(
11ca0 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
11cb0 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74  gEnum enc, IntPt
11cc0 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
11cd0 67 20 73 31 2c 20 73 74 72 69 6e 67 20 73 32 29  g s1, string s2)
11ce0 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
11cf0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
11d00 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d       byte[] b1;.
11d10 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32  .      byte[] b2
11d20 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  ;..      System.
11d30 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f  Text.Encoding co
11d40 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d  nverter = null;.
11d50 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20  ...      switch 
11d60 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  (enc)..      {..
11d70 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
11d80 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
11d90 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20  um.UTF8:..      
11da0 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
11db0 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
11dc0 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20  ding.UTF8;..    
11dd0 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
11de0 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
11df0 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
11e00 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20  .UTF16LE:..     
11e10 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
11e20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
11e30 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a  oding.Unicode;..
11e40 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
11e50 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
11e60 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
11e70 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20  Enum.UTF16BE:.. 
11e80 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
11e90 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
11ea0 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64  .Encoding.BigEnd
11eb0 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ianUnicode;..   
11ec0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
11ed0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11ee0 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47  b1 = converter.G
11ef0 65 74 42 79 74 65 73 28 73 31 29 3b 0d 0a 20 20  etBytes(s1);..  
11f00 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74      b2 = convert
11f10 65 72 2e 47 65 74 42 79 74 65 73 28 73 32 29 3b  er.GetBytes(s2);
11f20 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
11f30 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11f40 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
11f50 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65  text_collcompare
11f60 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
11f70 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c  , b1, b1.Length,
11f80 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b   b2, b2.Length);
11f90 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
11fa0 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
11fb0 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
11fc0 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
11fd0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
11fe0 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
11ff0 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f  ContextCollateCo
12000 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45  mpare(CollationE
12010 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c  ncodingEnum enc,
12020 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c   IntPtr context,
12030 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72   char[] c1, char
12040 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23  [] c2)..    {..#
12050 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
12060 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  ARD..      byte[
12070 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74  ] b1;..      byt
12080 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53  e[] b2;..      S
12090 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
120a0 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20  ing converter = 
120b0 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73  null;....      s
120c0 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20  witch (enc)..   
120d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61     {..        ca
120e0 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  se CollationEnco
120f0 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a  dingEnum.UTF8:..
12100 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
12110 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
12120 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b  t.Encoding.UTF8;
12130 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
12140 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
12150 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
12160 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d  ngEnum.UTF16LE:.
12170 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
12180 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
12190 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63  xt.Encoding.Unic
121a0 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
121b0 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
121c0 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
121d0 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
121e0 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  BE:..          c
121f0 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
12200 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
12210 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65  BigEndianUnicode
12220 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
12230 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ak;..      }....
12240 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65        b1 = conve
12250 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 31  rter.GetBytes(c1
12260 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63  );..      b2 = c
12270 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
12280 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  s(c2);....      
12290 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
122a0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
122b0 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63  e3_context_collc
122c0 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63  ompare_interop(c
122d0 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c  ontext, b1, b1.L
122e0 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65  ength, b2, b2.Le
122f0 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  ngth);..#else.. 
12300 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
12310 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
12320 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
12330 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
12340 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
12350 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  e CollationSeque
12360 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e  nce GetCollation
12370 53 65 71 75 65 6e 63 65 28 53 51 4c 69 74 65 46  Sequence(SQLiteF
12380 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e  unction func, In
12390 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
123a0 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
123b0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
123c0 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65    CollationSeque
123d0 6e 63 65 20 73 65 71 20 3d 20 6e 65 77 20 43 6f  nce seq = new Co
123e0 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28  llationSequence(
123f0 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  );..      int le
12400 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e  n = 0;..      in
12410 74 20 74 79 70 65 20 3d 20 30 3b 0d 0a 20 20 20  t type = 0;..   
12420 20 20 20 69 6e 74 20 65 6e 63 20 3d 20 30 3b 0d     int enc = 0;.
12430 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
12440 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
12450 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
12460 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e  ntext_collseq_in
12470 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72  terop(context, r
12480 65 66 20 74 79 70 65 2c 20 72 65 66 20 65 6e 63  ef type, ref enc
12490 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 0d 0a 20  , ref len);.... 
124a0 20 20 20 20 20 69 66 20 28 70 20 21 3d 20 6e 75       if (p != nu
124b0 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55  ll) seq.Name = U
124c0 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c  TF8ToString(p, l
124d0 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e  en);..      seq.
124e0 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f  Type = (Collatio
124f0 6e 54 79 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d  nTypeEnum)type;.
12500 0a 20 20 20 20 20 20 73 65 71 2e 5f 66 75 6e 63  .      seq._func
12510 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20   = func;..      
12520 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28  seq.Encoding = (
12530 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
12540 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20  gEnum)enc;....  
12550 20 20 20 20 72 65 74 75 72 6e 20 73 65 71 3b 0d      return seq;.
12560 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
12570 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
12580 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
12590 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
125a0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
125b0 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
125c0 47 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74  GetParamValueByt
125d0 65 73 28 49 6e 74 50 74 72 20 70 2c 20 69 6e 74  es(IntPtr p, int
125e0 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79   nDataOffset, by
125f0 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20  te[] bDest, int 
12600 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e  nStart, int nLen
12610 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  gth)..    {..   
12620 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e     int nlen = Un
12630 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12640 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
12650 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20  bytes(p);....   
12660 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74     // If no dest
12670 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20  ination buffer, 
12680 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20  return the size 
12690 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69  needed...      i
126a0 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c  f (bDest == null
126b0 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a  ) return nlen;..
126c0 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70  ..      int nCop
126d0 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a  ied = nLength;..
126e0 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
126f0 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62  ied + nStart > b
12700 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f  Dest.Length) nCo
12710 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e  pied = bDest.Len
12720 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20  gth - nStart;.. 
12730 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
12740 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e   + nDataOffset >
12750 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d   nlen) nCopied =
12760 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66   nlen - nDataOff
12770 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  set;....      if
12780 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a   (nCopied > 0)..
12790 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
127a0 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e   IntPtr ptr = Un
127b0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
127c0 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
127d0 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20  blob(p);....    
127e0 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79      Marshal.Copy
127f0 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f  ((IntPtr)(ptr.To
12800 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f  Int64() + nDataO
12810 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e  ffset), bDest, n
12820 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b  Start, nCopied);
12830 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
12840 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a   else..      {..
12850 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20          nCopied 
12860 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  = 0;..      }...
12870 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
12880 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
12890 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
128a0 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65  erride double Ge
128b0 74 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c  tParamValueDoubl
128c0 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  e(IntPtr ptr).. 
128d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62     {..      doub
128e0 6c 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21  le value;..#if !
128f0 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
12900 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
12910 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
12920 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12930 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
12940 65 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21  e(ptr);..#elif !
12950 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
12960 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 30  .      value = 0
12970 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  .0;..      Unsaf
12980 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12990 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
129a0 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c  ble_interop(ptr,
129b0 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
129c0 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
129d0 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
129e0 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
129f0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 72  .#endif..      r
12a00 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
12a10 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
12a20 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
12a30 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
12a40 74 33 32 28 49 6e 74 50 74 72 20 70 74 72 29 0d  t32(IntPtr ptr).
12a50 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
12a60 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
12a70 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12a80 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b  _value_int(ptr);
12a90 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12aa0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12ab0 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61   long GetParamVa
12ac0 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20  lueInt64(IntPtr 
12ad0 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
12ae0 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65 3b 0d     Int64 value;.
12af0 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
12b00 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
12b10 0a 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55  .      value = U
12b20 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12b30 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
12b40 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23 65  _int64(ptr);..#e
12b50 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
12b60 44 41 52 44 0d 0a 20 20 20 20 20 20 76 61 6c 75  DARD..      valu
12b70 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55 6e  e = 0;..      Un
12b80 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12b90 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
12ba0 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 74  int64_interop(pt
12bb0 72 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  r, ref value);..
12bc0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
12bd0 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
12be0 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
12bf0 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
12c00 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
12c10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
12c20 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
12c30 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61  tring GetParamVa
12c40 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72 20 70  lueText(IntPtr p
12c50 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  tr)..    {..#if 
12c60 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
12c70 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
12c80 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
12c90 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
12ca0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12cb0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
12cc0 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70  e_text_interop(p
12cd0 74 72 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65  tr, ref len), le
12ce0 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
12cf0 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
12d00 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
12d10 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12d20 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72  3_value_text(ptr
12d30 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61  ),..        Unsa
12d40 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12d50 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
12d60 74 65 73 28 70 74 72 29 29 3b 0d 0a 23 65 6e 64  tes(ptr));..#end
12d70 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
12d80 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
12d90 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  de TypeAffinity 
12da0 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70  GetParamValueTyp
12db0 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  e(IntPtr ptr).. 
12dc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
12dd0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
12de0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
12df0 61 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d  alue_type(ptr);.
12e00 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
12e10 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12e20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28  void ReturnBlob(
12e30 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
12e40 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20  byte[] value).. 
12e50 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
12e60 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12e70 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62  sqlite3_result_b
12e80 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  lob(context, val
12e90 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68  ue, value.Length
12ea0 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
12eb0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12ec0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12ed0 20 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75 62   void ReturnDoub
12ee0 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  le(IntPtr contex
12ef0 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29  t, double value)
12f00 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c  ..    {..#if !PL
12f10 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
12f20 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55  AMEWORK..      U
12f30 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12f40 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
12f50 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74  t_double(context
12f60 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
12f70 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
12f80 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  D..      UnsafeN
12f90 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12fa0 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62  ite3_result_doub
12fb0 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  le_interop(conte
12fc0 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  xt, ref value);.
12fd0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
12fe0 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
12ff0 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
13000 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
13010 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13020 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
13030 52 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50  ReturnError(IntP
13040 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69  tr context, stri
13050 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
13060 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
13070 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13080 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
13090 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38  (context, ToUTF8
130a0 28 76 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c  (value), value.L
130b0 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ength);..    }..
130c0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
130d0 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
130e0 75 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20  urnInt32(IntPtr 
130f0 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 76 61 6c  context, int val
13100 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
13110 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
13120 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
13130 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74  sult_int(context
13140 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d  , value);..    }
13150 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
13160 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
13170 65 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74  eturnInt64(IntPt
13180 72 20 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20  r context, long 
13190 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  value)..    {..#
131a0 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
131b0 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
131c0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
131d0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
131e0 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f  _result_int64(co
131f0 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
13200 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
13210 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e  ANDARD..      Un
13220 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13230 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
13240 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 63  _int64_interop(c
13250 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75  ontext, ref valu
13260 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
13270 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
13280 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
13290 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
132a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
132b0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
132c0 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49  oid ReturnNull(I
132d0 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a  ntPtr context)..
132e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
132f0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13300 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
13310 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a  null(context);..
13320 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
13330 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
13340 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74 28 49  oid ReturnText(I
13350 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
13360 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  tring value)..  
13370 20 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b    {..      byte[
13380 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c  ] b = ToUTF8(val
13390 75 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61  ue);..      Unsa
133a0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
133b0 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
133c0 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55  ext(context, ToU
133d0 54 46 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c 65  TF8(value), b.Le
133e0 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74  ngth - 1, (IntPt
133f0 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d  r)(-1));..    }.
13400 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56  ...#if INTEROP_V
13410 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20  IRTUAL_TABLE..  
13420 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
13430 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
13440 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
13450 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
13460 20 6f 72 64 65 72 20 74 6f 20 63 72 65 61 74 65   order to create
13470 20 61 20 64 69 73 70 6f 73 61 62 6c 65 0d 0a 20   a disposable.. 
13480 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f     /// module co
13490 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70  ntaining the imp
134a0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
134b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
134c0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
134d0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
134e0 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
134f0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
13500 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 74 6f  module object to
13510 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 72   be used when cr
13520 65 61 74 69 6e 67 20 74 68 65 20 6e 61 74 69 76  eating the nativ
13530 65 20 64 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64  e disposable mod
13540 75 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ule...    /// </
13550 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
13560 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
13570 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  gs">..    /// Th
13580 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20  e flags for the 
13590 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20  associated <see 
135a0 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e  cref="SQLiteConn
135b0 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63  ection" /> objec
135c0 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
135d0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
135e0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
135f0 72 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65  ride void Create
13600 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64  Module(SQLiteMod
13610 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69  ule module, SQLi
13620 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
13630 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d  s flags)..    {.
13640 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64  .        if (mod
13650 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
13660 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
13670 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
13680 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c  Exception("modul
13690 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
136a0 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
136b0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
136c0 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29 20  gs.NoLogModule) 
136d0 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  != SQLiteConnect
136e0 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f  ionFlags.NoLogMo
136f0 64 75 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  dule)..        {
13700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f  ..            mo
13710 64 75 6c 65 2e 4c 6f 67 45 72 72 6f 72 73 20 3d  dule.LogErrors =
13720 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
13730 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
13740 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29  .LogModuleError)
13750 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
13760 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64  tionFlags.LogMod
13770 75 6c 65 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20  uleError);..    
13780 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c          module.L
13790 6f 67 45 78 63 65 70 74 69 6f 6e 73 20 3d 20 28  ogExceptions = (
137a0 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
137b0 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
137c0 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74 69 6f  ogModuleExceptio
137d0 6e 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  n) == SQLiteConn
137e0 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d  ectionFlags.LogM
137f0 6f 64 75 6c 65 45 78 63 65 70 74 69 6f 6e 29 3b  oduleException);
13800 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
13810 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20         if (_sql 
13820 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
13830 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
13840 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
13850 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20  "connection has 
13860 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
13870 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
13880 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  SetLoadExtension
13890 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
138a0 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 55   LoadExtension(U
138b0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
138c0 64 73 2e 53 51 4c 49 54 45 5f 44 4c 4c 2c 20 22  ds.SQLITE_DLL, "
138d0 73 71 6c 69 74 65 33 5f 76 74 73 68 69 6d 5f 69  sqlite3_vtshim_i
138e0 6e 69 74 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nit");....      
138f0 20 20 69 66 20 28 6d 6f 64 75 6c 65 2e 43 72 65    if (module.Cre
13900 61 74 65 44 69 73 70 6f 73 61 62 6c 65 4d 6f 64  ateDisposableMod
13910 75 6c 65 28 5f 73 71 6c 29 29 0d 0a 20 20 20 20  ule(_sql))..    
13920 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13930 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20     if (_modules 
13940 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
13950 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c            _modul
13960 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e  es = new Diction
13970 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69  ary<string, SQLi
13980 74 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a  teModule>();....
13990 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64              _mod
139a0 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65 2e  ules.Add(module.
139b0 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a  Name, module);..
139c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
139d0 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20   (_usePool)..   
139e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
139f0 20 20 20 20 20 20 20 20 20 20 20 20 5f 75 73 65              _use
13a00 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  Pool = false;...
13a10 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
13a20 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
13a30 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
13a40 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
13a50 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67  WriteLine(String
13a60 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
13a80 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
13a90 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13ab0 43 72 65 61 74 65 4d 6f 64 75 6c 65 20 28 50 6f  CreateModule (Po
13ac0 6f 6c 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30  ol) Disabled: {0
13ad0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
13ae0 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54           HandleT
13af0 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65  oString()));..#e
13b00 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
13b10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
13b20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
13b30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13b40 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
13b50 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 47  QLiteException(G
13b60 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
13b70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
13b80 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
13b90 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
13ba0 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65  Calls the native
13bb0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
13bc0 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  rary in order to
13bd0 20 63 6c 65 61 6e 75 70 20 74 68 65 20 72 65 73   cleanup the res
13be0 6f 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20  ources..    /// 
13bf0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
13c00 61 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e  a module contain
13c10 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  ing the implemen
13c20 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74  tation of a virt
13c30 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
13c40 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
13c50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
13c60 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
13c70 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c     /// The modul
13c80 65 20 6f 62 6a 65 63 74 20 70 72 65 76 69 6f 75  e object previou
13c90 73 6c 79 20 70 61 73 73 65 64 20 74 6f 20 74 68  sly passed to th
13ca0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 72 65  e <see cref="Cre
13cb0 61 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20  ateModule" />.. 
13cc0 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a     /// method...
13cd0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
13ce0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
13cf0 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a   name="flags">..
13d00 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67      /// The flag
13d10 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69  s for the associ
13d20 61 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  ated <see cref="
13d30 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
13d40 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
13d50 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ance...    /// <
13d60 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
13d70 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
13d80 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c  oid DisposeModul
13d90 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d  e(SQLiteModule m
13da0 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e  odule, SQLiteCon
13db0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
13dc0 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  gs)..    {..    
13dd0 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d      if (module =
13de0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
13df0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
13e00 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
13e10 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d  tion("module");.
13e20 0a 0d 0a 20 20 20 20 20 20 20 20 6d 6f 64 75 6c  ...        modul
13e30 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  e.Dispose();..  
13e40 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
13e50 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13e60 72 69 64 65 20 49 6e 74 50 74 72 20 41 67 67 72  ride IntPtr Aggr
13e70 65 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74  egateContext(Int
13e80 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20  Ptr context)..  
13e90 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
13ea0 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
13eb0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67  thods.sqlite3_ag
13ec0 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28  gregate_context(
13ed0 63 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20  context, 1);..  
13ee0 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52    }....#if INTER
13ef0 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
13f00 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
13f10 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c  ry>..    /// Cal
13f20 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51  ls the native SQ
13f30 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
13f40 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65  y in order to de
13f50 63 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c 20  clare a virtual 
13f60 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69  table..    /// i
13f70 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20  n response to a 
13f80 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73  call into the <s
13f90 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
13fa0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
13fb0 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f  eate" />..    //
13fc0 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22  / or <see cref="
13fd0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
13fe0 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
13ff0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
14000 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f  ethods...    ///
14010 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
14020 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
14030 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20  ="module">..    
14040 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20  /// The virtual 
14050 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61  table module tha
14060 74 20 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f  t is to be respo
14070 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76  nsible for the v
14080 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
14090 20 20 2f 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c    /// being decl
140a0 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ared...    /// <
140b0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
140c0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74   <param name="st
140d0 72 53 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  rSql">..    /// 
140e0 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  The string conta
140f0 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
14100 61 74 65 6d 65 6e 74 20 64 65 73 63 72 69 62 69  atement describi
14110 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ng the virtual t
14120 61 62 6c 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f  able to..    ///
14130 20 62 65 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20   be declared... 
14140 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
14150 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
14160 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20  name="error">.. 
14170 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
14180 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74  ess, the content
14190 73 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65  s of this parame
141a0 74 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65  ter are undefine
141b0 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65  d.  Upon failure
141c0 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68  ,..    /// it sh
141d0 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20  ould contain an 
141e0 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f  appropriate erro
141f0 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20  r message...    
14200 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
14210 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
14220 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64  .    /// A stand
14230 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
14240 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f  n code...    ///
14250 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
14260 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
14270 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
14280 64 65 20 44 65 63 6c 61 72 65 56 69 72 74 75 61  de DeclareVirtua
14290 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20  lTable(..       
142a0 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f   SQLiteModule mo
142b0 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  dule,..        s
142c0 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20  tring strSql,.. 
142d0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
142e0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
142f0 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
14300 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
14310 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
14320 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72  .            err
14330 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e  or = "connection
14340 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
14350 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20  handle";..      
14360 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
14370 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
14380 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  or;..        }..
14390 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
143a0 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a   pSql = IntPtr.Z
143b0 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
143c0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
143d0 20 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c              pSql
143e0 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
143f0 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
14400 72 69 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d  ring(strSql);...
14410 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
14420 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
14430 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14440 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 65 63  hods.sqlite3_dec
14450 6c 61 72 65 5f 76 74 61 62 28 0d 0a 20 20 20 20  lare_vtab(..    
14460 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
14470 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20  , pSql);....    
14480 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d          if ((n =
14490 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
144a0 65 2e 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65  e.Ok) && (module
144b0 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   != null))..    
144c0 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
144d0 6c 65 2e 44 65 63 6c 61 72 65 64 20 3d 20 74 72  le.Declared = tr
144e0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
144f0 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
14500 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
14510 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45  error = GetLastE
14520 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  rror();....     
14530 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b         return n;
14540 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
14550 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
14560 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14570 20 20 20 20 20 69 66 20 28 70 53 71 6c 20 21 3d       if (pSql !=
14580 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
14590 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
145b0 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
145c0 70 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  pSql);..        
145d0 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20 49          pSql = I
145e0 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
145f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14600 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
14610 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
14620 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73  >..    /// Calls
14630 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69   the native SQLi
14640 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
14650 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c  in order to decl
14660 61 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61  are a virtual ta
14670 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e  ble..    /// fun
14680 63 74 69 6f 6e 20 69 6e 20 72 65 73 70 6f 6e 73  ction in respons
14690 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f  e to a call into
146a0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
146b0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
146c0 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d  ule.xCreate" />.
146d0 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65  .    /// or <see
146e0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
146f0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  tiveModule.xConn
14700 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20  ect" /> virtual 
14710 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a  table methods...
14720 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
14730 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
14740 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
14750 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76  >..    /// The v
14760 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64  irtual table mod
14770 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62  ule that is to b
14780 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  e responsible fo
14790 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  r the virtual ta
147a0 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e  ble..    /// fun
147b0 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c  ction being decl
147c0 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ared...    /// <
147d0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
147e0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
147f0 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20  gumentCount">.. 
14800 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
14810 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
14820 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62  o the function b
14830 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
14840 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
14850 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
14860 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20   name="name">.. 
14870 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
14880 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
14890 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d  being declared..
148a0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
148b0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
148c0 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d  m name="error">.
148d0 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75  .    /// Upon su
148e0 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65  ccess, the conte
148f0 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61 72 61  nts of this para
14900 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65 66 69  meter are undefi
14910 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75  ned.  Upon failu
14920 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20  re,..    /// it 
14930 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61  should contain a
14940 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72  n appropriate er
14950 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  ror message...  
14960 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
14970 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
14980 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61  >..    /// A sta
14990 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
149a0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f  urn code...    /
149b0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
149c0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
149d0 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
149e0 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72 74  Code DeclareVirt
149f0 75 61 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  ualFunction(..  
14a00 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75        SQLiteModu
14a10 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20  le module,..    
14a20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e 74      int argument
14a30 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  Count,..        
14a40 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
14a50 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
14a60 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
14a70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14a80 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
14a90 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ll)..        {..
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
14ab0 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20  r = "connection 
14ac0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
14ad0 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20  andle";..       
14ae0 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
14af0 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
14b00 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  r;..        }...
14b10 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
14b20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a  pName = IntPtr.Z
14b30 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
14b40 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
14b50 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d              pNam
14b60 65 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  e = SQLiteString
14b70 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53  .Utf8IntPtrFromS
14b80 74 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a  tring(name);....
14b90 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
14ba0 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
14bb0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
14bc0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 76 65 72  ods.sqlite3_over
14bd0 6c 6f 61 64 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a  load_function(..
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 61 72 67  _sql, pName, arg
14c00 75 6d 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  umentCount);....
14c10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14c20 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
14c30 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d  Code.Ok) error =
14c40 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b   GetLastError();
14c50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14c60 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20  return n;..     
14c70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
14c80 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
14c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
14ca0 20 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74   (pName != IntPt
14cb0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
14cc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14cd0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65          SQLiteMe
14ce0 6d 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d 65 29  mory.Free(pName)
14cf0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14d00 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74     pName = IntPt
14d10 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
14d20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14d30 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66  }..    }..#endif
14d40 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
14d50 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45  mary>..    /// E
14d60 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c  nables or disabl
14d70 65 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61  ed extension loa
14d80 64 69 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d  ding by SQLite..
14d90 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
14da0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
14db0 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66  ram name="bOnOff
14dc0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65  ">..    /// True
14dd0 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69   to enable loadi
14de0 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73  ng of extensions
14df0 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62  , false to disab
14e00 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  le...    /// </p
14e10 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
14e20 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
14e30 64 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69  d SetLoadExtensi
14e40 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d  on(bool bOnOff).
14e50 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
14e60 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
14e70 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
14e80 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14e90 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65  enable_load_exte
14ea0 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  nsion(..        
14eb0 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66      _sql, (bOnOf
14ec0 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d  f ? -1 : 0));...
14ed0 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
14ee0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
14ef0 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
14f00 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
14f10 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
14f20 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
14f30 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
14f40 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61  .    /// Loads a
14f50 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f   SQLite extensio
14f60 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74  n library from t
14f70 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a  he named file...
14f80 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
14f90 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
14fa0 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d  am name="fileNam
14fb0 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
14fc0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e   name of the dyn
14fd0 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72  amic link librar
14fe0 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  y file containin
14ff0 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e  g the extension.
15000 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
15010 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
15020 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d  am name="procNam
15030 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
15040 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70   name of the exp
15050 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75  orted function u
15060 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a  sed to initializ
15070 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e  e the extension.
15080 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c  ..    /// If nul
15090 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 22  l, the default "
150a0 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f  sqlite3_extensio
150b0 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20  n_init" will be 
150c0 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  used...    /// <
150d0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
150e0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
150f0 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f  oid LoadExtensio
15100 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d  n(string fileNam
15110 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61  e, string procNa
15120 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
15130 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65      if (fileName
15140 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15150 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
15160 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
15170 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65  eption("fileName
15180 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
15190 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d 20 49  ntPtr pError = I
151a0 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
151b0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
151c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
151d0 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 46 69     byte[] utf8Fi
151e0 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63  leName = UTF8Enc
151f0 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79  oding.UTF8.GetBy
15200 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27  tes(fileName + '
15210 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  \0');..         
15220 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 50 72     byte[] utf8Pr
15230 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  ocName = null;..
15240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
15250 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75   (procName != nu
15260 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
15270 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e 61 6d       utf8ProcNam
15280 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67  e = UTF8Encoding
15290 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73 28 70  .UTF8.GetBytes(p
152a0 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b  rocName + '\0');
152b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
152c0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
152d0 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
152e0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
152f0 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d  load_extension(.
15300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15310 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e   _sql, utf8FileN
15320 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d  ame, utf8ProcNam
15330 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d  e, ref pError);.
15340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
15350 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
15360 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
15380 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
15390 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f  eption(n, UTF8To
153a0 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d  String(pError, -
153b0 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  1));..        }.
153c0 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
153d0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
153e0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 45 72           if (pEr
153f0 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ror != IntPtr.Ze
15400 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
15410 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15420 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
15430 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
15440 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20  free(pError);.. 
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
15460 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a  Error = IntPtr.Z
15470 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
15480 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
15490 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
154a0 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61   Enables or disa
154b0 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20 72 65  bled extended re
154c0 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72  sult codes retur
154d0 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20  ned by SQLite.. 
154e0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
154f0 72 69 64 65 20 76 6f 69 64 20 53 65 74 45 78 74  ride void SetExt
15500 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73  endedResultCodes
15510 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20  (bool bOnOff).. 
15520 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
15530 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
15540 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
15550 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65  ods.sqlite3_exte
15560 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65  nded_result_code
15570 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73  s(..          _s
15580 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31  ql, (bOnOff ? -1
15590 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20   : 0));....     
155a0 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
155b0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
155c0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
155d0 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
155e0 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
155f0 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73   }..    /// Gets
15600 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65   the last SQLite
15610 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20   error code..   
15620 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
15630 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
15640 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d  de ResultCode().
15650 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
15660 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
15670 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
15680 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d  _errcode(_sql);.
15690 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
156a0 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51  Gets the last SQ
156b0 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20 65 72  Lite extended er
156c0 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e  ror code..    in
156d0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
156e0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
156f0 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f  ExtendedResultCo
15700 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  de()..    {..   
15710 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
15720 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
15730 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
15740 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20  rrcode(_sql);.. 
15750 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
15760 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67  Add a log messag
15770 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65  e via the SQLite
15780 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74   sqlite3_log int
15790 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74  erface...    int
157a0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
157b0 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 53  oid LogMessage(S
157c0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69  QLiteErrorCode i
157d0 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20  ErrCode, string 
157e0 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b  zMessage)..    {
157f0 0d 0a 20 20 20 20 20 20 53 74 61 74 69 63 4c 6f  ..      StaticLo
15800 67 4d 65 73 73 61 67 65 28 69 45 72 72 43 6f 64  gMessage(iErrCod
15810 65 2c 20 7a 4d 65 73 73 61 67 65 29 3b 0d 0a 20  e, zMessage);.. 
15820 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
15830 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67  Add a log messag
15840 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65  e via the SQLite
15850 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74   sqlite3_log int
15860 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74  erface...    int
15870 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69  ernal static voi
15880 64 20 53 74 61 74 69 63 4c 6f 67 4d 65 73 73 61  d StaticLogMessa
15890 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ge(SQLiteErrorCo
158a0 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72  de iErrCode, str
158b0 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20  ing zMessage).. 
158c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
158d0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
158e0 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72  sqlite3_log(iErr
158f0 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65  Code, ToUTF8(zMe
15900 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  ssage));..    }.
15910 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43  ...#if INTEROP_C
15920 4f 44 45 43 20 7c 7c 20 49 4e 54 45 52 4f 50 5f  ODEC || INTEROP_
15930 49 4e 43 4c 55 44 45 5f 53 45 45 0d 0a 20 20 20  INCLUDE_SEE..   
15940 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
15950 64 65 20 76 6f 69 64 20 53 65 74 50 61 73 73 77  de void SetPassw
15960 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77  ord(byte[] passw
15970 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b  ordBytes)..    {
15980 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
15990 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
159a0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
159b0 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c  sqlite3_key(_sql
159c0 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c  , passwordBytes,
159d0 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c   passwordBytes.L
159e0 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69  ength);..      i
159f0 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
15a00 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
15a10 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
15a20 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
15a30 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
15a40 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73   _usePool = fals
15a50 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
15a60 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
15a70 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61  de void ChangePa
15a80 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65  ssword(byte[] ne
15a90 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d  wPasswordBytes).
15aa0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
15ab0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
15ac0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
15ad0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
15ae0 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73  key(_sql, newPas
15af0 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e 65 77  swordBytes, (new
15b00 50 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d 3d  PasswordBytes ==
15b10 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77   null) ? 0 : new
15b20 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65  PasswordBytes.Le
15b30 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66  ngth);..      if
15b40 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
15b50 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
15b60 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
15b70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
15b80 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
15b90 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65  _usePool = false
15ba0 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66  ;..    }..#endif
15bb0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
15bc0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
15bd0 65 74 50 72 6f 67 72 65 73 73 48 6f 6f 6b 28 69  etProgressHook(i
15be0 6e 74 20 6e 4f 70 73 2c 20 53 51 4c 69 74 65 50  nt nOps, SQLiteP
15bf0 72 6f 67 72 65 73 73 43 61 6c 6c 62 61 63 6b 20  rogressCallback 
15c00 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
15c10 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
15c20 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
15c30 33 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c  3_progress_handl
15c40 65 72 28 5f 73 71 6c 2c 20 6e 4f 70 73 2c 20 66  er(_sql, nOps, f
15c50 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
15c60 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
15c70 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
15c80 64 65 20 76 6f 69 64 20 53 65 74 41 75 74 68 6f  de void SetAutho
15c90 72 69 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65  rizerHook(SQLite
15ca0 41 75 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61  AuthorizerCallba
15cb0 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
15cc0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
15cd0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
15ce0 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65  e3_set_authorize
15cf0 72 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  r(_sql, func, In
15d00 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
15d10 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
15d20 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
15d30 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53   SetUpdateHook(S
15d40 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62  QLiteUpdateCallb
15d50 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
15d60 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
15d70 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
15d80 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28  te3_update_hook(
15d90 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
15da0 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
15db0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
15dc0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
15dd0 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c  etCommitHook(SQL
15de0 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  iteCommitCallbac
15df0 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
15e00 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
15e10 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
15e20 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73  3_commit_hook(_s
15e30 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
15e40 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
15e50 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
15e60 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
15e70 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51  TraceCallback(SQ
15e80 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63  LiteTraceCallbac
15e90 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
15ea0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
15eb0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
15ec0 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75  3_trace(_sql, fu
15ed0 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
15ee0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
15ef0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
15f00 65 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61  e void SetRollba
15f10 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c  ckHook(SQLiteRol
15f20 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75  lbackCallback fu
15f30 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
15f40 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
15f50 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f  thods.sqlite3_ro
15f60 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c  llback_hook(_sql
15f70 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
15f80 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
15f90 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
15fa0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77  >..    /// Allow
15fb0 73 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66  s the setting of
15fc0 20 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62   a logging callb
15fd0 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53  ack invoked by S
15fe0 51 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20  QLite when a..  
15ff0 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20    /// log event 
16000 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e  occurs.  Only on
16010 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62  e callback may b
16020 65 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20  e set.  If NULL 
16030 69 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20  is passed,..    
16040 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20  /// the logging 
16050 63 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65  callback is unre
16060 67 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f  gistered...    /
16070 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
16080 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
16090 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61  me="func">The ca
160a0 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20  llback function 
160b0 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61  to invoke.</para
160c0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
160d0 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72  urns>Returns a r
160e0 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75  esult code</retu
160f0 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
16100 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
16110 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c  teErrorCode SetL
16120 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74  ogCallback(SQLit
16130 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e  eLogCallback fun
16140 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
16150 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
16160 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
16170 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
16180 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d  te3_config_log(.
16190 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
161a0 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d  iteConfigOpsEnum
161b0 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c  .SQLITE_CONFIG_L
161c0 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  OG, func, IntPtr
161d0 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20  .Zero);....     
161e0 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
161f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
16200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16260 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
16270 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65  ..    /// Create
16280 73 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62  s a new SQLite b
16290 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73  ackup object bas
162a0 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64  ed on the provid
162b0 65 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a  ed destination..
162c0 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
162d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68   connection.  Th
162e0 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
162f0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
16300 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f  the one..    ///
16310 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
16320 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54   this object.  T
16330 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65  he source and de
16340 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
16350 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e  se..    /// conn
16360 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62  ections cannot b
16370 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20  e the same...   
16380 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
16390 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
163a0 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54  name="destCnn">T
163b0 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
163c0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
163d0 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  on.</param>..   
163e0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
163f0 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20  ="destName">The 
16400 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
16410 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61  base name.</para
16420 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
16430 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e  am name="sourceN
16440 61 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20  ame">The source 
16450 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f  database name.</
16460 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
16470 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77  <returns>The new
16480 6c 79 20 63 72 65 61 74 65 64 20 62 61 63 6b 75  ly created backu
16490 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72  p object.</retur
164a0 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
164b0 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
164c0 65 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69  eBackup Initiali
164d0 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  zeBackup(..     
164e0 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
164f0 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20  ion destCnn,..  
16500 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
16510 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  tName,..        
16520 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d  string sourceNam
16530 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  e..        )..  
16540 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
16550 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c  (destCnn == null
16560 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
16570 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
16580 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
16590 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
165a0 20 20 20 20 20 20 69 66 20 28 64 65 73 74 4e 61        if (destNa
165b0 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
165c0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
165d0 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
165e0 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61  xception("destNa
165f0 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
16600 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20   if (sourceName 
16610 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16620 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
16630 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
16640 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d  ption("sourceNam
16650 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
16660 53 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69  SQLite3 destSqli
16670 74 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73  te3 = destCnn._s
16680 71 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a  ql as SQLite3;..
16690 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
166a0 73 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c  stSqlite3 == nul
166b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
166c0 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
166d0 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  ntException(..  
166e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
166f0 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65  estination conne
16700 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61  ction has no wra
16710 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20  pper.",..       
16720 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43 6e           "destCn
16730 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
16740 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
16750 48 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c  Handle destHandl
16760 65 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e  e = destSqlite3.
16770 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  _sql;....       
16780 20 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20   if (destHandle 
16790 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
167a0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
167b0 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
167c0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
167d0 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e      "Destination
167e0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
167f0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
16800 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
16810 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29        "destCnn")
16820 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
16830 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
16840 64 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65  dle sourceHandle
16850 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20   = _sql;....    
16860 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 48 61      if (sourceHa
16870 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
16880 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
16890 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
168a0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
168b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
168c0 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74   "Source connect
168d0 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
168e0 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
168f0 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20  .        byte[] 
16900 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54  zDestName = ToUT
16910 46 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20  F8(destName);.. 
16920 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53         byte[] zS
16930 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54  ourceName = ToUT
16940 46 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d  F8(sourceName);.
16950 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
16960 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61  eBackupHandle ba
16970 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c  ckupHandle = nul
16980 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  l;....        tr
16990 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
169a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
169b0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
169c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
169d0 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
169e0 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
169f0 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
16a00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16a10 20 20 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75      IntPtr backu
16a20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
16a30 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16a40 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20  backup_init(..  
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
16a60 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e  stHandle, zDestN
16a70 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c  ame, sourceHandl
16a80 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b  e, zSourceName);
16a90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16aa0 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e  if (backup == In
16ab0 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
16ac0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16ad0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16ae0 65 45 72 72 6f 72 43 6f 64 65 20 72 65 73 75 6c  eErrorCode resul
16af0 74 43 6f 64 65 20 3d 20 52 65 73 75 6c 74 43 6f  tCode = ResultCo
16b00 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de();....       
16b10 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
16b20 75 6c 74 43 6f 64 65 20 21 3d 20 53 51 4c 69 74  ultCode != SQLit
16b30 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
16b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b50 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
16b60 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 65  LiteException(re
16b70 73 75 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61 73  sultCode, GetLas
16b80 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
16b90 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
16ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16bb0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
16bc0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
16bd0 22 66 61 69 6c 65 64 20 74 6f 20 69 6e 69 74 69  "failed to initi
16be0 61 6c 69 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d  alize backup");.
16bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61  ..            ba
16c10 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77  ckupHandle = new
16c20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
16c30 64 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20  dle(destHandle, 
16c40 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20  backup);..      
16c50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
16c60 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
16c70 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20  OnChanged(null, 
16c80 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  new ConnectionEv
16c90 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
16ca0 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
16cb0 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
16cc0 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  NewCriticalHandl
16cd0 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  e, null,..      
16ce0 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
16cf0 2c 20 6e 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61  , null, backupHa
16d00 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20  ndle, null, new 
16d10 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20  object[] {..    
16d20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53          typeof(S
16d30 51 4c 69 74 65 33 29 2c 20 64 65 73 74 43 6e 6e  QLite3), destCnn
16d40 2c 20 64 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72  , destName, sour
16d50 63 65 4e 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20  ceName }));.... 
16d60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
16d70 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 28 0d  w SQLiteBackup(.
16d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
16d90 73 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c  s, backupHandle,
16da0 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65   destHandle, zDe
16db0 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61  stName, sourceHa
16dc0 6e 64 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ndle,..         
16dd0 20 20 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b     zSourceName);
16de0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
16df0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
16e00 20 20 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20    /// Copies up 
16e10 74 6f 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20  to N pages from 
16e20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
16e30 61 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69  ase to the desti
16e40 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  nation..    /// 
16e50 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
16e60 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
16e70 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62  cified backup ob
16e80 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
16e90 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
16ea0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
16eb0 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
16ec0 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65  up object to use
16ed0 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
16ee0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
16ef0 6e 50 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  nPage">..    ///
16f00 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   The number of p
16f10 61 67 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65  ages to copy, ne
16f20 67 61 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61  gative to copy a
16f30 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67  ll remaining pag
16f40 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  es...    /// </p
16f50 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
16f60 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72  param name="retr
16f70 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74  y">..    /// Set
16f80 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 20   to true if the 
16f90 6f 70 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20  operation needs 
16fa0 74 6f 20 62 65 20 72 65 74 72 69 65 64 20 64 75  to be retried du
16fb0 65 20 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20  e to database.. 
16fc0 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69     /// locking i
16fd0 73 73 75 65 73 3b 20 6f 74 68 65 72 77 69 73 65  ssues; otherwise
16fe0 2c 20 73 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d  , set to false..
16ff0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
17000 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
17010 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72  rns>..    /// Tr
17020 75 65 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ue if there are 
17030 6d 6f 72 65 20 70 61 67 65 73 20 74 6f 20 62 65  more pages to be
17040 20 63 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f   copied, false o
17050 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f  therwise...    /
17060 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
17070 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
17080 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 42 61  ride bool StepBa
17090 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
170a0 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
170b0 75 70 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  up,..        int
170c0 20 6e 50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20   nPage,..       
170d0 20 72 65 66 20 62 6f 6f 6c 20 72 65 74 72 79 0d   ref bool retry.
170e0 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
170f0 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 72 79  {..        retry
17100 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
17110 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
17120 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
17130 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
17140 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
17150 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
17160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
17170 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
17180 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
17190 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
171a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
171b0 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
171c0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
171d0 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
171e0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
171f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17200 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
17210 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
17220 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
17230 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
17240 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
17250 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
17260 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
17270 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
17280 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
17290 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
172a0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
172b0 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
172c0 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
172d0 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
172e0 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
172f0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
17300 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
17310 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
17320 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73  sqlite3_backup_s
17330 74 65 70 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e  tep(handlePtr, n
17340 50 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Page);..        
17350 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75  backup._stepResu
17360 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a  lt = n; /* NOTE:
17370 20 53 61 76 65 20 66 6f 72 20 75 73 65 20 62 79   Save for use by
17380 20 46 69 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a   FinishBackup. *
17390 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  /....        if 
173a0 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
173b0 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
173c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
173d0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
173e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
173f0 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
17400 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
17410 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20  .Busy)..        
17420 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
17430 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  etry = true;..  
17440 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
17450 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
17460 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20  }..        else 
17470 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
17480 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29  rrorCode.Locked)
17490 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
174a0 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d           retry =
174b0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
174c0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
174d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
174e0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
174f0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
17500 64 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20  de.Done)..      
17510 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17520 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
17530 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17540 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
17550 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17560 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
17570 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
17580 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
17590 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
175a0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
175b0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
175c0 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
175d0 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e   of pages remain
175e0 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ing to be copied
175f0 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65   from the source
17600 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
17610 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e  se to the destin
17620 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 61  ation database a
17630 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
17640 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20  he specified..  
17650 20 20 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a    /// backup obj
17660 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
17670 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
17680 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
17690 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75  ackup">The backu
176a0 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63  p object to chec
176b0 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  k.</param>..    
176c0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
176d0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
176e0 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65   remaining to be
176f0 20 63 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e   copied.</return
17700 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
17710 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52 65   override int Re
17720 6d 61 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a  mainingBackup(..
17730 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
17740 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20  ckup backup..   
17750 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
17760 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
17770 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
17780 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
17790 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
177a0 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22  ception("backup"
177b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
177c0 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
177d0 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70   handle = backup
177e0 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b  ._sqlite_backup;
177f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
17800 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  handle == null).
17810 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
17820 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
17830 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
17840 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
17850 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
17860 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
17870 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
17880 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
17890 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65  ndlePtr = handle
178a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
178b0 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e  (handlePtr == In
178c0 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
178d0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
178e0 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
178f0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
17910 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
17920 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
17930 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a  le pointer.");..
17940 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
17950 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
17960 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
17970 6b 75 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61  kup_remaining(ha
17980 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d  ndlePtr);..    }
17990 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
179a0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
179b0 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
179c0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
179d0 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64   in the source d
179e0 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
179f0 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68  ed..    /// with
17a00 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62   the specified b
17a10 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
17a20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
17a30 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
17a40 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
17a50 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
17a60 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
17a70 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
17a80 74 75 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20  turns>The total 
17a90 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
17aa0 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61  in the source da
17ab0 74 61 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73  tabase.</returns
17ac0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
17ad0 6f 76 65 72 72 69 64 65 20 69 6e 74 20 50 61 67  override int Pag
17ae0 65 43 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20  eCountBackup(.. 
17af0 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
17b00 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20  kup backup..    
17b10 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
17b20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
17b30 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
17b40 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
17b50 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
17b60 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29  eption("backup")
17b70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
17b80 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
17b90 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e  handle = backup.
17ba0 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d  _sqlite_backup;.
17bb0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
17bc0 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
17be0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
17bf0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
17c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17c10 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
17c20 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
17c30 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
17c40 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
17c50 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  dlePtr = handle;
17c60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
17c70 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74  handlePtr == Int
17c80 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
17c90 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
17ca0 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
17cb0 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
17cd0 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
17ce0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
17cf0 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d  e pointer.");...
17d00 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
17d10 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
17d20 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
17d30 75 70 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e  up_pagecount(han
17d40 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  dlePtr);..    }.
17d50 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
17d60 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
17d70 73 74 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75  stroys the backu
17d80 70 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e  p object, rollin
17d90 67 20 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75  g back any backu
17da0 70 20 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e  p that may be in
17db0 0d 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73  ..    /// proges
17dc0 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
17dd0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
17de0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
17df0 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
17e00 6f 62 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f  object to destro
17e10 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  y.</param>..    
17e20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
17e30 65 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63  e void FinishBac
17e40 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
17e50 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
17e60 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  p..        )..  
17e70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
17e80 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
17e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
17ea0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
17eb0 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
17ec0 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
17ed0 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
17ee0 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
17ef0 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
17f00 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
17f10 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
17f20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17f30 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
17f40 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
17f50 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
17f60 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
17f70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
17f80 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
17f90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
17fa0 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
17fb0 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
17fc0 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
17fd0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
17fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
17ff0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
18000 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
18010 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
18020 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
18030 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
18040 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
18050 2e 22 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  .");....#if !SQL
18060 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
18070 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
18080 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
18090 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
180a0 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
180b0 69 73 68 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  ish_interop(hand
180c0 6c 65 50 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a  lePtr);..#else..
180d0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
180e0 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
180f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
18100 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
18110 69 6e 69 73 68 28 68 61 6e 64 6c 65 50 74 72 29  inish(handlePtr)
18120 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
18130 20 20 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e     handle.SetHan
18140 64 6c 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d  dleAsInvalid();.
18150 0a 0d 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e  ...#if COUNT_HAN
18160 44 4c 45 0d 0a 20 20 20 20 20 20 20 20 69 66 20  DLE..        if 
18170 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
18180 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e  orCode.Ok) || (n
18190 20 3d 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70   == backup._step
181a0 52 65 73 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e  Result)) handle.
181b0 57 61 73 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b  WasReleasedOk();
181c0 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
181d0 20 20 20 20 69 66 20 28 28 6e 20 21 3d 20 53 51      if ((n != SQ
181e0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
181f0 29 20 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75  ) && (n != backu
18200 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d  p._stepResult)).
18210 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
18220 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
18230 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
18240 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
18250 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
18260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
182c0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
182d0 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
182e0 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  s if the SQLite 
182f0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
18300 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
18310 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  d for the..    /
18320 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  // current proce
18330 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
18340 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
18350 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
18360 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e  /// A boolean in
18370 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
18380 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69   or not the SQLi
18390 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
183a0 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
183b0 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  / initialized fo
183c0 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
183d0 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
183e0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
183f0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
18400 65 20 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c  e bool IsInitial
18410 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ized()..    {.. 
18420 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
18430 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65  aticIsInitialize
18440 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  d();..    }.... 
18450 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
18460 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
18470 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c 69  ines if the SQLi
18480 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
18490 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  has been initial
184a0 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20  ized for the..  
184b0 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72    /// current pr
184c0 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
184d0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
184e0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
184f0 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e     /// A boolean
18500 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
18510 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53  her or not the S
18520 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
18530 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20  ry has been..   
18540 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64   /// initialized
18550 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
18560 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
18570 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
18580 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
18590 69 63 20 62 6f 6f 6c 20 53 74 61 74 69 63 49 73  ic bool StaticIs
185a0 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20  Initialized().. 
185b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
185c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47  ..        // BUG
185d0 46 49 58 3a 20 50 72 65 76 65 6e 74 20 72 61 63  FIX: Prevent rac
185e0 65 73 20 77 69 74 68 20 6f 74 68 65 72 20 74 68  es with other th
185f0 72 65 61 64 73 20 66 6f 72 20 74 68 69 73 20 65  reads for this e
18600 6e 74 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65  ntire block, due
18610 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
18620 20 20 20 20 20 74 6f 20 74 68 65 20 74 72 79 2f       to the try/
18630 66 69 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63  finally semantic
18640 73 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b  s.  See ticket [
18650 37 32 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20  72905c9a77]...  
18660 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
18670 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
18680 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
18690 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
186a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
186b0 45 3a 20 53 61 76 65 20 74 68 65 20 73 74 61 74  E: Save the stat
186c0 65 20 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e 67  e of the logging
186d0 20 63 6c 61 73 73 20 61 6e 64 20 74 68 65 6e 20   class and then 
186e0 72 65 73 74 6f 72 65 20 69 74 0d 0a 20 20 20 20  restore it..    
186f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
18700 20 61 66 74 65 72 20 77 65 20 61 72 65 20 64 6f   after we are do
18710 6e 65 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67  ne to avoid logg
18720 69 6e 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c  ing too many fal
18730 73 65 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20  se errors...    
18740 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
18750 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 76          bool sav
18760 65 64 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69  edEnabled = SQLi
18770 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a  teLog.Enabled;..
18780 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
18790 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20  teLog.Enabled = 
187a0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
187b0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
187c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
187d0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
187f0 20 4e 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68   NOTE: This meth
18800 6f 64 20 5b 61 62 5d 75 73 65 73 20 74 68 65 20  od [ab]uses the 
18810 66 61 63 74 20 74 68 61 74 20 53 51 4c 69 74 65  fact that SQLite
18820 20 77 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20   will always..  
18830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18840 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
18850 4c 49 54 45 5f 45 52 52 4f 52 20 66 6f 72 20 61  LITE_ERROR for a
18860 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69  ny unknown confi
18870 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d  guration option.
18880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18890 20 2f 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65 73   //       *unles
188a0 73 2a 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  s* the SQLite li
188b0 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 61 64  brary has alread
188c0 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  y been initializ
188d0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
188e0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 6e       //       In
188f0 20 74 68 61 74 20 63 61 73 65 20 69 74 20 77 69   that case it wi
18900 6c 6c 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e  ll always return
18910 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d   SQLITE_MISUSE..
18920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18930 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
18940 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
18950 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
18960 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
18970 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e  lite3_config_non
18980 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
18990 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
189a0 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  nfigOpsEnum.SQLI
189b0 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b  TE_CONFIG_NONE);
189c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
189d0 20 20 20 20 72 65 74 75 72 6e 20 28 72 63 20 3d      return (rc =
189e0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
189f0 65 2e 4d 69 73 75 73 65 29 3b 0d 0a 20 20 20 20  e.Misuse);..    
18a00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
18a10 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
18a20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
18a40 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64  QLiteLog.Enabled
18a50 20 3d 20 73 61 76 65 64 45 6e 61 62 6c 65 64 3b   = savedEnabled;
18a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18a70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
18a80 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
18a90 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
18aa0 48 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20  Helper function 
18ab0 74 6f 20 72 65 74 72 69 65 76 65 20 61 20 63 6f  to retrieve a co
18ac0 6c 75 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f  lumn of data fro
18ad0 6d 20 61 6e 20 61 63 74 69 76 65 20 73 74 61 74  m an active stat
18ae0 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ement...    /// 
18af0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
18b00 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
18b10 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65  "stmt">The state
18b20 6d 65 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28  ment being step(
18b30 29 27 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72  )'d through</par
18b40 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
18b50 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
18b60 3e 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63  >The flags assoc
18b70 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63  iated with the c
18b80 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61  onnection.</para
18b90 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
18ba0 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e  am name="index">
18bb0 54 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  The column index
18bc0 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
18bd0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
18be0 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e  aram name="typ">
18bf0 54 68 65 20 74 79 70 65 20 6f 66 20 64 61 74 61  The type of data
18c00 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
18c10 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e  e column.  If Un
18c20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69  initialized, thi
18c30 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20  s function will 
18c40 72 65 74 72 69 65 76 65 20 74 68 65 20 64 61 74  retrieve the dat
18c50 61 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f  atype informatio
18c60 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
18c70 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
18c80 75 72 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e  urns the data in
18c90 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74   the column</ret
18ca0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
18cb0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a  nal override obj
18cc0 65 63 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c  ect GetValue(SQL
18cd0 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
18ce0 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
18cf0 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
18d00 69 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74  int index, SQLit
18d10 65 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20  eType typ)..    
18d20 7b 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66  {..      TypeAff
18d30 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e  inity aff = typ.
18d40 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  Affinity;..     
18d50 20 69 66 20 28 61 66 66 20 3d 3d 20 54 79 70 65   if (aff == Type
18d60 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 20 72  Affinity.Null) r
18d70 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c  eturn DBNull.Val
18d80 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 20  ue;..      Type 
18d90 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
18da0 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20     if (typ.Type 
18db0 21 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74  != DbType.Object
18dc0 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
18dd0 20 20 20 20 74 20 3d 20 53 51 4c 69 74 65 43 6f      t = SQLiteCo
18de0 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65  nvert.SQLiteType
18df0 54 6f 54 79 70 65 28 74 79 70 29 3b 0d 0a 20 20  ToType(typ);..  
18e00 20 20 20 20 20 20 61 66 66 20 3d 20 54 79 70 65        aff = Type
18e10 54 6f 41 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a  ToAffinity(t);..
18e20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18e30 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
18e40 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
18e50 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74  ags.GetAllAsText
18e60 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
18e70 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c  ctionFlags.GetAl
18e80 6c 41 73 54 65 78 74 29 0d 0a 20 20 20 20 20 20  lAsText)..      
18e90 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65      return GetTe
18ea0 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  xt(stmt, index);
18eb0 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68  ....      switch
18ec0 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d   (aff)..      {.
18ed0 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
18ee0 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a  peAffinity.Blob:
18ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
18f00 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79  typ.Type == DbTy
18f10 70 65 2e 47 75 69 64 20 26 26 20 74 79 70 2e 41  pe.Guid && typ.A
18f20 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41  ffinity == TypeA
18f30 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20  ffinity.Text).. 
18f40 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18f50 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74 54 65  n new Guid(GetTe
18f60 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  xt(stmt, index))
18f70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
18f80 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65 74 42  nt n = (int)GetB
18f90 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
18fa0 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29  , 0, null, 0, 0)
18fb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79 74  ;..          byt
18fc0 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79 74 65  e[] b = new byte
18fd0 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  [n];..          
18fe0 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69  GetBytes(stmt, i
18ff0 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e  ndex, 0, b, 0, n
19000 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19010 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20  if (typ.Type == 
19020 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 6e  DbType.Guid && n
19030 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20 20 20   == 16)..       
19040 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
19050 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20  Guid(b);....    
19060 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 3b 0d        return b;.
19070 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
19080 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54  peAffinity.DateT
19090 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ime:..          
190a0 72 65 74 75 72 6e 20 47 65 74 44 61 74 65 54 69  return GetDateTi
190b0 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  me(stmt, index);
190c0 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
190d0 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62  ypeAffinity.Doub
190e0 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  le:..          i
190f0 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  f (t == null) re
19100 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73  turn GetDouble(s
19110 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
19120 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43          return C
19130 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70  onvert.ChangeTyp
19140 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  e(GetDouble(stmt
19150 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c  , index), t, nul
19160 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  l);..        cas
19170 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e TypeAffinity.I
19180 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20  nt64:..         
19190 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20   if (t == null) 
191a0 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28  return GetInt64(
191b0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
191c0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
191d0 3d 20 74 79 70 65 6f 66 28 53 42 79 74 65 29 29  = typeof(SByte))
191e0 20 72 65 74 75 72 6e 20 47 65 74 53 42 79 74 65   return GetSByte
191f0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
19200 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
19210 3d 3d 20 74 79 70 65 6f 66 28 42 79 74 65 29 29  == typeof(Byte))
19220 20 72 65 74 75 72 6e 20 47 65 74 42 79 74 65 28   return GetByte(
19230 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
19240 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
19250 3d 20 74 79 70 65 6f 66 28 49 6e 74 31 36 29 29  = typeof(Int16))
19260 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 31 36   return GetInt16
19270 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
19280 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
19290 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 31 36  == typeof(UInt16
192a0 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e  )) return GetUIn
192b0 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t16(stmt, index)
192c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
192d0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74  (t == typeof(Int
192e0 33 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 49  32)) return GetI
192f0 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
19300 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
19310 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
19320 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20 47 65  nt32)) return Ge
19330 74 55 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  tUInt32(stmt, in
19340 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
19350 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
19360 28 55 49 6e 74 36 34 29 29 20 72 65 74 75 72 6e  (UInt64)) return
19370 20 47 65 74 55 49 6e 74 36 34 28 73 74 6d 74 2c   GetUInt64(stmt,
19380 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
19390 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
193a0 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65  rt.ChangeType(Ge
193b0 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
193c0 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a  ex), t, null);..
193d0 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
193e0 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
193f0 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c  rn GetText(stmt,
19400 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
19410 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
19420 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
19430 65 20 69 6e 74 20 47 65 74 43 75 72 73 6f 72 46  e int GetCursorF
19440 6f 72 54 61 62 6c 65 28 53 51 4c 69 74 65 53 74  orTable(SQLiteSt
19450 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
19460 74 20 64 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61  t db, int rootPa
19470 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ge)..    {..#if 
19480 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
19490 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
194a0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
194b0 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
194c0 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28  _cursor_interop(
194d0 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
194e0 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29  t, db, rootPage)
194f0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
19500 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64  return -1;..#end
19510 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
19520 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
19530 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64  de long GetRowId
19540 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65  ForCursor(SQLite
19550 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
19560 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20 20 20  int cursor)..   
19570 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
19580 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
19590 6c 6f 6e 67 20 72 6f 77 69 64 20 3d 20 30 3b 0d  long rowid = 0;.
195a0 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
195b0 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
195c0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
195d0 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72  sqlite3_cursor_r
195e0 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d  owid_interop(stm
195f0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
19600 63 75 72 73 6f 72 2c 20 72 65 66 20 72 6f 77 69  cursor, ref rowi
19610 64 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72  d);..      if (r
19620 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c == SQLiteError
19630 43 6f 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20  Code.Ok) return 
19640 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20  rowid;....      
19650 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65  return 0;..#else
19660 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ..      return 0
19670 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
19680 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
19690 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 47   override void G
196a0 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74  etIndexColumnExt
196b0 65 6e 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67  endedInfo(string
196c0 20 64 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e   database, strin
196d0 67 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20  g index, string 
196e0 63 6f 6c 75 6d 6e 2c 20 72 65 66 20 69 6e 74 20  column, ref int 
196f0 73 6f 72 74 4d 6f 64 65 2c 20 72 65 66 20 69 6e  sortMode, ref in
19700 74 20 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20 73  t onError, ref s
19710 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53  tring collationS
19720 65 71 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d  equence)..    {.
19730 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
19740 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74  NDARD..      Int
19750 50 74 72 20 63 6f 6c 6c 20 3d 20 49 6e 74 50 74  Ptr coll = IntPt
19760 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69  r.Zero;..      i
19770 6e 74 20 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d  nt colllen = 0;.
19780 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
19790 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20  orCode rc;....  
197a0 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e      rc = UnsafeN
197b0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
197c0 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d  ite3_index_colum
197d0 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f  n_info_interop(_
197e0 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61  sql, ToUTF8(data
197f0 62 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e  base), ToUTF8(in
19800 64 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c  dex), ToUTF8(col
19810 75 6d 6e 29 2c 20 72 65 66 20 73 6f 72 74 4d 6f  umn), ref sortMo
19820 64 65 2c 20 72 65 66 20 6f 6e 45 72 72 6f 72 2c  de, ref onError,
19830 20 72 65 66 20 63 6f 6c 6c 2c 20 72 65 66 20 63   ref coll, ref c
19840 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20  olllen);..      
19850 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65  if (rc != SQLite
19860 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
19870 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
19880 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c  ception(rc, null
19890 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c  );....      coll
198a0 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20  ationSequence = 
198b0 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c  UTF8ToString(col
198c0 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65  l, colllen);..#e
198d0 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d  lse..      sortM
198e0 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ode = 0;..      
198f0 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20  onError = 2;..  
19900 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71      collationSeq
19910 75 65 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22  uence = "BINARY"
19920 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
19930 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
19940 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
19950 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f  ErrorCode FileCo
19960 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62  ntrol(string zDb
19970 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e  Name, int op, In
19980 74 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20  tPtr pArg)..    
19990 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
199a0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
199b0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65  ods.sqlite3_file
199c0 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28  _control(_sql, (
199d0 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  zDbName != null)
199e0 20 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d   ? ToUTF8(zDbNam
199f0 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70  e) : null, op, p
19a00 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  Arg);..    }..  
19a10 7d 0d 0a 7d 0d 0a                                }..}..