System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact e74317bb927ce9384f662cbc0f79f446596861d5:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a 23  ns.Generic;....#
0180: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
0190: 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f 4e  20 && (TRACE_CON
01a0: 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43 45  NECTION || TRACE
01b0: 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20 75  _STATEMENT)..  u
01c0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67  sing System.Diag
01d0: 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69 66  nostics;..#endif
01e0: 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  ....  using Syst
01f0: 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e  em.Globalization
0200: 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  ;..  using Syste
0210: 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f  m.Runtime.Intero
0220: 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75 73  pServices;..  us
0230: 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b  ing System.Text;
0240: 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ..  using System
0250: 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 0d 0a 20  .Threading;.... 
0260: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0270: 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68    /// This is th
0280: 65 20 6d 65 74 68 6f 64 20 73 69 67 6e 61 74 75  e method signatu
0290: 72 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  re for the SQLit
02a0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 6c  e core library l
02b0: 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 0d  ogging callback.
02c0: 0a 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20  .  /// function 
02d0: 66 6f 72 20 75 73 65 20 77 69 74 68 20 73 71 6c  for use with sql
02e0: 69 74 65 33 5f 6c 6f 67 28 29 20 61 6e 64 20 74  ite3_log() and t
02f0: 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  he SQLITE_CONFIG
0300: 5f 4c 4f 47 2e 0d 0a 20 20 2f 2f 2f 0d 0a 20 20  _LOG...  ///..  
0310: 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68 69  /// WARNING: Thi
0320: 73 20 64 65 6c 65 67 61 74 65 20 69 73 20 75 73  s delegate is us
0330: 65 64 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20  ed more-or-less 
0340: 64 69 72 65 63 74 6c 79 20 62 79 20 6e 61 74 69  directly by nati
0350: 76 65 20 63 6f 64 65 2c 20 64 6f 0d 0a 20 20 2f  ve code, do..  /
0360: 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20  //          not 
0370: 6d 6f 64 69 66 79 20 69 74 73 20 74 79 70 65 20  modify its type 
0380: 73 69 67 6e 61 74 75 72 65 2e 0d 0a 20 20 2f 2f  signature...  //
0390: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
03a0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
03b0: 22 70 55 73 65 72 44 61 74 61 22 3e 0d 0a 20 20  "pUserData">..  
03c0: 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20 64 61  /// The extra da
03d0: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
03e0: 74 68 20 74 68 69 73 20 6d 65 73 73 61 67 65 2c  th this message,
03f0: 20 69 66 20 61 6e 79 2e 0d 0a 20 20 2f 2f 2f 20   if any...  /// 
0400: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20  </param>..  /// 
0410: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
0420: 6f 72 43 6f 64 65 22 3e 0d 0a 20 20 2f 2f 2f 20  orCode">..  /// 
0430: 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61  The error code a
0440: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
0450: 68 69 73 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  his message...  
0460: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0470: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0480: 22 70 4d 65 73 73 61 67 65 22 3e 0d 0a 20 20 2f  "pMessage">..  /
0490: 2f 2f 20 54 68 65 20 6d 65 73 73 61 67 65 20 73  // The message s
04a0: 74 72 69 6e 67 20 74 6f 20 62 65 20 6c 6f 67 67  tring to be logg
04b0: 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72  ed...  /// </par
04c0: 61 6d 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  am>..#if !PLATFO
04d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
04e0: 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67 65  ORK..  [Unmanage
04f0: 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74 65 72  dFunctionPointer
0500: 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69  (CallingConventi
0510: 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65 6e 64  on.Cdecl)]..#end
0520: 69 66 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 64  if..  internal d
0530: 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53 51 4c  elegate void SQL
0540: 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 49  iteLogCallback(I
0550: 6e 74 50 74 72 20 70 55 73 65 72 44 61 74 61 2c  ntPtr pUserData,
0560: 20 69 6e 74 20 65 72 72 6f 72 43 6f 64 65 2c 20   int errorCode, 
0570: 49 6e 74 50 74 72 20 70 4d 65 73 73 61 67 65 29  IntPtr pMessage)
0580: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0590: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
05a0: 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74   class implement
05b0: 73 20 53 51 4c 69 74 65 42 61 73 65 20 63 6f 6d  s SQLiteBase com
05c0: 70 6c 65 74 65 6c 79 2c 20 61 6e 64 20 69 73 20  pletely, and is 
05d0: 74 68 65 20 67 75 74 73 20 6f 66 20 74 68 65 20  the guts of the 
05e0: 63 6f 64 65 20 74 68 61 74 20 69 6e 74 65 72 6f  code that intero
05f0: 70 27 73 20 53 51 4c 69 74 65 20 77 69 74 68 20  p's SQLite with 
0600: 2e 4e 45 54 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  .NET..  /// </su
0610: 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72 6e  mmary>..  intern
0620: 61 6c 20 63 6c 61 73 73 20 53 51 4c 69 74 65 33  al class SQLite3
0630: 20 3a 20 53 51 4c 69 74 65 42 61 73 65 0d 0a 20   : SQLiteBase.. 
0640: 20 7b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20   {..    private 
0650: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
0660: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
0670: 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  ect();....    //
0680: 0d 0a 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54  ..    // NOTE: T
0690: 68 69 73 20 69 73 20 74 68 65 20 70 75 62 6c 69  his is the publi
06a0: 63 20 6b 65 79 20 66 6f 72 20 74 68 65 20 53 79  c key for the Sy
06b0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
06c0: 20 61 73 73 65 6d 62 6c 79 2e 20 20 49 66 20 79   assembly.  If y
06d0: 6f 75 20 63 68 61 6e 67 65 20 74 68 65 0d 0a 20  ou change the.. 
06e0: 20 20 20 2f 2f 20 20 20 20 20 20 20 53 4e 4b 20     //       SNK 
06f0: 66 69 6c 65 2c 20 79 6f 75 20 77 69 6c 6c 20 6e  file, you will n
0700: 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68  eed to change th
0710: 69 73 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20 20  is as well...   
0720: 20 2f 2f 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61   //..    interna
0730: 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50  l const string P
0740: 75 62 6c 69 63 4b 65 79 20 3d 0d 0a 20 20 20 20  ublicKey =..    
0750: 20 20 20 20 22 30 30 32 34 30 30 30 30 30 34 38      "00240000048
0760: 30 30 30 30 30 39 34 30 30 30 30 30 30 30 36 30  0000094000000060
0770: 32 30 30 30 30 30 30 32 34 30 30 30 30 35 32 35  2000000240000525
0780: 33 34 31 33 31 30 30 30 34 30 30 30 30 30 31 30  3413100040000010
0790: 30 30 31 30 30 30 35 61 32 38 38 64 65 35 36 38  0010005a288de568
07a0: 37 63 34 65 31 22 20 2b 0d 0a 20 20 20 20 20 20  7c4e1" +..      
07b0: 20 20 22 62 36 32 31 64 64 66 66 35 64 38 34 34    "b621ddff5d844
07c0: 37 32 37 34 31 38 39 35 36 39 39 37 66 34 37 35  727418956997f475
07d0: 65 62 38 32 39 34 32 39 65 34 31 31 61 66 66 33  eb829429e411aff3
07e0: 65 39 33 66 39 37 62 37 30 64 65 36 39 38 62 39  e93f97b70de698b9
07f0: 37 32 36 34 30 39 32 35 62 64 64 34 34 32 38 30  72640925bdd44280
0800: 64 66 30 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  df0" +..        
0810: 22 61 32 35 61 38 34 33 32 36 36 39 37 33 37 30  "a25a84326697370
0820: 34 31 33 37 63 62 62 30 65 37 34 34 31 63 31 66  4137cbb0e7441c1f
0830: 65 37 63 61 65 34 65 32 34 34 30 61 65 39 31 61  e7cae4e2440ae91a
0840: 62 38 63 64 65 33 39 33 33 66 65 62 63 62 31 61  b8cde3933febcb1a
0850: 63 34 38 64 64 33 33 62 34 30 65 31 33 63 34 32  c48dd33b40e13c42
0860: 31 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 22 64  1" +..        "d
0870: 38 32 31 35 63 31 38 61 34 33 34 39 61 34 33 36  8215c18a4349a436
0880: 64 64 34 39 39 65 33 63 33 38 35 63 63 36 38 33  dd499e3c385cc683
0890: 30 31 35 66 38 38 36 66 36 63 31 30 62 64 39 30  015f886f6c10bd90
08a0: 31 31 35 65 62 32 62 64 36 31 62 36 37 37 35 30  115eb2bd61b67750
08b0: 38 33 39 65 33 61 31 39 39 34 31 64 63 39 63 22  839e3a19941dc9c"
08c0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
08d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
08e0: 4f 52 4b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ORK..    interna
08f0: 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44  l const string D
0900: 65 73 69 67 6e 65 72 56 65 72 73 69 6f 6e 20 3d  esignerVersion =
0910: 20 22 31 2e 30 2e 39 39 2e 30 22 3b 0d 0a 23 65   "1.0.99.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 35 32 20 7c 7c 20 4e 45 54  | NET_452 || NET
0ab0: 5f 34 36 20 7c 7c 20 4e 45 54 5f 34 36 31 29 20  _46 || NET_461) 
0ac0: 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  && !PLATFORM_COM
0ad0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
0ae0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
0af0: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 3b  _buildingSchema;
0b00: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
0b10: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0b20: 20 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72 2d     /// The user-
0b30: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
0b40: 73 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e 20  s registered on 
0b50: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  this connection.
0b60: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0b70: 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  ry>..    protect
0b80: 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51  ed Dictionary<SQ
0b90: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
0ba0: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
0bb0: 63 74 69 6f 6e 3e 20 5f 66 75 6e 63 74 69 6f 6e  ction> _function
0bc0: 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  s;....#if INTERO
0bd0: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
0be0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0bf0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
0c00: 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64 20  modules created 
0c10: 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e 65  using this conne
0c20: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
0c30: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0c40: 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69 6f  protected Dictio
0c50: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
0c60: 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64 75  iteModule> _modu
0c70: 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  les;..#endif....
0c80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ce0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
0cf0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0d00: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68 65  / Constructs the
0d10: 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f 20   object used to 
0d20: 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74 68  interact with th
0d30: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
0d40: 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 75  brary..    /// u
0d50: 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20 74  sing the UTF-8 t
0d60: 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a 20  ext encoding... 
0d70: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0d80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0d90: 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a 20  m name="fmt">.. 
0da0: 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65 54     /// The DateT
0db0: 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62 65  ime format to be
0dc0: 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76 65   used when conve
0dd0: 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61 6c  rting string val
0de0: 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f 2f  ues to a..    //
0df0: 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20 62  / DateTime and b
0e00: 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65 20  inding DateTime 
0e10: 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20  parameters...   
0e20: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
0e30: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0e40: 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20 20  me="kind">..    
0e50: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
0e60: 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64 22  f="DateTimeKind"
0e70: 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20 77   /> to be used w
0e80: 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61 74  hen creating Dat
0e90: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0ea0: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0eb0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0ec0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
0ed0: 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20  mtString">..    
0ee0: 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20 73  /// The format s
0ef0: 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  tring to be used
0f00: 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61 6e   when parsing an
0f10: 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61 74  d formatting Dat
0f20: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
0f30: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
0f40: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0f50: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
0f60: 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  b">..    /// The
0f70: 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 74   native handle t
0f80: 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64 20  o be associated 
0f90: 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73  with the databas
0fa0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
0fb0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
0fc0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0fd0: 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e  name="fileName">
0fe0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 75  ..    /// The fu
0ff0: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
1000: 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61 74  le name associat
1010: 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72 65  ed with <paramre
1020: 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e 0d  f name="db "/>..
1030: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1040: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1050: 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64 6c  m name="ownHandl
1060: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  e">..    /// Non
1070: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65 77  -zero if the new
1080: 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65 63  ly created objec
1090: 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c 20  t instance will 
10a0: 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65 0d  need to dispose.
10b0: 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61 72  .    /// of <par
10c0: 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22 20  amref name="db" 
10d0: 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e 6f  /> when it is no
10e0: 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e 0d   longer needed..
10f0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1100: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1110: 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20 20  SQLite3(..      
1120: 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d    SQLiteDateForm
1130: 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20 20  ats fmt,..      
1140: 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b    DateTimeKind k
1150: 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ind,..        st
1160: 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c 0d  ring fmtString,.
1170: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
1180: 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  db,..        str
1190: 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
11a0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e 48         bool ownH
11b0: 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 29  andle..        )
11c0: 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28 66  ..      : base(f
11d0: 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72  mt, kind, fmtStr
11e0: 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ing)..    {..   
11f0: 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20 49       if (db != I
1200: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
1210: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1220: 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53      _sql = new S
1230: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
1240: 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61 6e  andle(db, ownHan
1250: 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle);..         
1260: 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 66     _fileName = f
1270: 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
1280: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
1290: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
12a0: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
12b0: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
12c0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12d0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
12e0: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
12f0: 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
1300: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
1310: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c         null, nul
1320: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 66  l, null, _sql, f
1330: 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a  ileName, new obj
1340: 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ect[] {..       
1350: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
1360: 53 51 4c 69 74 65 33 29 2c 20 66 6d 74 2c 20 6b  SQLite3), fmt, k
1370: 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 2c 20  ind, fmtString, 
1380: 64 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  db, fileName,.. 
1390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
13a0: 77 6e 48 61 6e 64 6c 65 20 7d 29 29 3b 0d 0a 20  wnHandle }));.. 
13b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
13c0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1420: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1430: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
1440: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
1450: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
1460: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
1470: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
1480: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
1490: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
14a0: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
14b0: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
14c0: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
14d0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
14e0: 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
14f0: 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
1500: 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33  n(typeof(SQLite3
1510: 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66  ).Name);..#endif
1520: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1590: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
15a0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69  override void Di
15b0: 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f  spose(bool dispo
15c0: 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sing)..    {..  
15d0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
15e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15f0: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
1600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1620: 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67   //if (disposing
1630: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1640: 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20     //{..        
1650: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1690: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73      //    // dis
16a0: 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73  pose managed res
16b0: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d0: 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //    //////////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
1700: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d              //}.
1710: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1720: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
1750: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
1760: 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20  lease unmanaged 
1770: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
1780: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1790: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
17c0: 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c   INTEROP_VIRTUAL
17d0: 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20  _TABLE..        
17e0: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 4d          DisposeM
17f0: 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69  odules();..#endi
1800: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
1810: 20 20 20 20 20 43 6c 6f 73 65 28 66 61 6c 73 65       Close(false
1820: 29 3b 20 2f 2a 20 44 69 73 70 6f 73 69 6e 67 2c  ); /* Disposing,
1830: 20 63 61 6e 6e 6f 74 20 74 68 72 6f 77 2e 20 2a   cannot throw. *
1840: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  /..            }
1850: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1860: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
1870: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1880: 20 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73       base.Dispos
1890: 65 28 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d  e(disposing);...
18a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
18b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
18c0: 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67  NOTE: Everything
18d0: 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79   should be fully
18e0: 20 64 69 73 70 6f 73 65 64 20 61 74 20 74 68 69   disposed at thi
18f0: 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20  s point...      
1900: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1910: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
1920: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1930: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  }..    }..    #e
1940: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
19b0: 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56  ...#if INTEROP_V
19c0: 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20  IRTUAL_TABLE..  
19d0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
19e0: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65  .    /// This me
19f0: 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f  thod attempts to
1a00: 20 64 69 73 70 6f 73 65 20 6f 66 20 61 6c 6c 20   dispose of all 
1a10: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
1a20: 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  QLiteModule" /> 
1a30: 64 65 72 69 76 65 64 0d 0a 20 20 20 20 2f 2f 2f  derived..    ///
1a40: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
1a50: 73 20 63 75 72 72 65 6e 74 6c 79 20 61 73 73 6f  s currently asso
1a60: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1a70: 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65 20  native database 
1a80: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
1a90: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1aa0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
1ab0: 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73  d DisposeModules
1ac0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
1ad0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
1ae0: 2f 20 4e 4f 54 45 3a 20 49 66 20 61 6e 79 20 6d  / NOTE: If any m
1af0: 6f 64 75 6c 65 73 20 77 65 72 65 20 63 72 65 61  odules were crea
1b00: 74 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20  ted, attempt to 
1b10: 64 69 73 70 6f 73 65 20 6f 66 0d 0a 20 20 20 20  dispose of..    
1b20: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
1b30: 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f 64  m now.  This cod
1b40: 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f  e is designed to
1b50: 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e 67 0d   avoid throwing.
1b60: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
1b70: 20 20 65 78 63 65 70 74 69 6f 6e 73 20 75 6e 6c    exceptions unl
1b80: 65 73 73 20 74 68 65 20 44 69 73 70 6f 73 65 20  ess the Dispose 
1b90: 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
1ba0: 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dule..        //
1bb0: 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 74 68         itself th
1bc0: 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f  rows an exceptio
1bd0: 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  n...        //..
1be0: 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64          if (_mod
1bf0: 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ules != null).. 
1c00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c10: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b        foreach (K
1c20: 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72 69  eyValuePair<stri
1c30: 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ng, SQLiteModule
1c40: 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75 6c  > pair in _modul
1c50: 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es)..           
1c60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c70: 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65      SQLiteModule
1c80: 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e 56   module = pair.V
1c90: 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
1ca0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64           if (mod
1cb0: 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
1cf0: 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b  odule.Dispose();
1d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1d10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  ...            _
1d20: 6d 6f 64 75 6c 65 73 2e 43 6c 65 61 72 28 29 3b  modules.Clear();
1d30: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1d40: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
1d50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db0: 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69  /....    // It i
1dc0: 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79 20 74  sn't necessary t
1dd0: 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20 66 75  o cleanup any fu
1de0: 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20 72 65  nctions we've re
1df0: 67 69 73 74 65 72 65 64 2e 20 20 49 66 20 74 68  gistered.  If th
1e00: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20  e connection..  
1e10: 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68 65    // goes to the
1e20: 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65 73   pool and is res
1e30: 75 72 72 65 63 74 65 64 20 6c 61 74 65 72 2c 20  urrected later, 
1e40: 72 65 2d 72 65 67 69 73 74 65 72 65 64 20 66 75  re-registered fu
1e50: 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65  nctions will ove
1e60: 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20 20 20  rwrite the..    
1e70: 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63  // previous func
1e80: 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c 69  tions.  The SQLi
1e90: 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65  teFunctionCookie
1ea0: 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65  Handle will take
1eb0: 20 63 61 72 65 20 6f 66 20 66 72 65 65 69 6e 67   care of freeing
1ec0: 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20   unmanaged..    
1ed0: 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62 65 6c  // resources bel
1ee0: 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20 70 72  onging to the pr
1ef0: 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73 74 65  eviously-registe
1f00: 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a  red functions...
1f10: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1f20: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65  rride void Close
1f30: 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d  (bool canThrow).
1f40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
1f50: 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d   (_sql != null).
1f60: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1f70: 20 20 20 20 69 66 20 28 21 5f 73 71 6c 2e 4f 77      if (!_sql.Ow
1f80: 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20 20 20 20  nHandle)..      
1f90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fa0: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c       _sql = null
1fb0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1fc0: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20   return;..      
1fd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fe0: 20 20 20 62 6f 6f 6c 20 75 6e 62 69 6e 64 46 75     bool unbindFu
1ff0: 6e 63 74 69 6f 6e 73 20 3d 20 28 28 5f 66 6c 61  nctions = ((_fla
2000: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
2010: 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e 62 69 6e  ctionFlags.Unbin
2020: 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43 6c 6f 73  dFunctionsOnClos
2030: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
2040: 20 20 20 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e      == SQLiteCon
2050: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e 62  nectionFlags.Unb
2060: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43 6c  indFunctionsOnCl
2070: 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2080: 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29     if (_usePool)
2090: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
20b0: 28 53 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65  (SQLiteBase.Rese
20c0: 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c  tConnection(_sql
20d0: 2c 20 5f 73 71 6c 2c 20 63 61 6e 54 68 72 6f 77  , _sql, canThrow
20e0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
20f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2100: 20 20 20 20 20 20 20 69 66 20 28 75 6e 62 69 6e         if (unbin
2110: 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20  dFunctions)..   
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2140: 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69          if (SQLi
2150: 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69 6e  teFunction.Unbin
2160: 64 41 6c 6c 46 75 6e 63 74 69 6f 6e 73 28 74 68  dAllFunctions(th
2170: 69 73 2c 20 5f 66 6c 61 67 73 2c 20 66 61 6c 73  is, _flags, fals
2180: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2190: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
21a0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
21b0: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
21c0: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
21f0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
2200: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
2210: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2230: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
2240: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2260: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e               "Un
2270: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 28 50  bindFunctions (P
2280: 6f 6f 6c 29 20 53 75 63 63 65 73 73 3a 20 7b 30  ool) Success: {0
2290: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b0: 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e     HandleToStrin
22c0: 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  g()));..#endif..
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2300: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2310: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
2320: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
2330: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
2340: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
2350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2360: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
2370: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
2380: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
2390: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b0: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
23c0: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
23d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e               "Un
23f0: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 28 50  bindFunctions (P
2400: 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b 30  ool) Failure: {0
2410: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2430: 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e     HandleToStrin
2440: 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  g()));..#endif..
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2460: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2470: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2480: 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54  #if INTEROP_VIRT
2490: 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20  UAL_TABLE..     
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
24b0: 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a  poseModules();..
24c0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
24e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c  teConnectionPool
24f0: 2e 41 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c 20  .Add(_fileName, 
2500: 5f 73 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69  _sql, _poolVersi
2510: 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
2520: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
2530: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61  Connection.OnCha
2540: 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43  nged(null, new C
2550: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72  onnectionEventAr
2560: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
2570: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
2580: 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74  eConnectionEvent
2590: 54 79 70 65 2e 43 6c 6f 73 65 64 54 6f 50 6f 6f  Type.ClosedToPoo
25a0: 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a  l, null, null,..
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c0: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
25d0: 2c 20 5f 73 71 6c 2c 20 5f 66 69 6c 65 4e 61 6d  , _sql, _fileNam
25e0: 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20  e, new object[] 
25f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2600: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
2610: 53 51 4c 69 74 65 33 29 2c 20 63 61 6e 54 68 72  SQLite3), canThr
2620: 6f 77 2c 20 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f  ow, _fileName, _
2630: 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29 29 3b  poolVersion }));
2640: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
2650: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
2660: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
2670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2680: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55  race.WriteLine(U
2690: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
26a0: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
26b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26c0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
26d0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
26e0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
26f0: 20 20 20 20 20 20 20 20 20 20 20 22 43 6c 6f 73             "Clos
2700: 65 20 28 50 6f 6f 6c 29 20 53 75 63 63 65 73 73  e (Pool) Success
2710: 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
2720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48                 H
2730: 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29  andleToString())
2740: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
2750: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66            }..#if
2760: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
2770: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
2780: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
2790: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
27a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
27c0: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55 6e 73  ce.WriteLine(Uns
27d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
27e0: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
27f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2800: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
2810: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
2820: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2830: 20 20 20 20 20 20 20 20 20 22 43 6c 6f 73 65 20           "Close 
2840: 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20  (Pool) Failure: 
2850: 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e               Han
2870: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
2880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2890: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
28a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
28b0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
28c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28d0: 20 20 20 69 66 20 28 75 6e 62 69 6e 64 46 75 6e     if (unbindFun
28e0: 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20  ctions)..       
28f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2900: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2910: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55  SQLiteFunction.U
2920: 6e 62 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f 6e  nbindAllFunction
2930: 73 28 74 68 69 73 2c 20 5f 66 6c 61 67 73 2c 20  s(this, _flags, 
2940: 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20  false))..       
2950: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
2960: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
2970: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
2980: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
29a0: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55 6e 73  ce.WriteLine(Uns
29b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
29c0: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e0: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
29f0: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
2a00: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a20: 20 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e   "UnbindFunction
2a30: 73 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c  s Success: {0}",
2a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64              Hand
2a60: 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  leToString()));.
2a70: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
2a80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2ab0: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
2ac0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2ad0: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2ae0: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
2af0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
2b00: 57 72 69 74 65 4c 69 6e 65 28 55 6e 73 61 66 65  WriteLine(Unsafe
2b10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53 74  NativeMethods.St
2b20: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
2b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b40: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
2b50: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
2b60: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55                "U
2b80: 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 46  nbindFunctions F
2b90: 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20  ailure: {0}",.. 
2ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb0: 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54           HandleT
2bc0: 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65  oString()));..#e
2bd0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
2be0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2bf0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c00: 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
2c10: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
2c20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2c30: 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b      _sql = null;
2c40: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2c50: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
2c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 21  ///////....#if !
2cc0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2cd0: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2ce0: 4f 4e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ON..    protecte
2cf0: 64 20 73 74 72 69 6e 67 20 48 61 6e 64 6c 65 54  d string HandleT
2d00: 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 7b  oString()..    {
2d10: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
2d20: 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
2d30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d40: 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20  "<null>";....   
2d50: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71 6c       return _sql
2d60: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
2d70: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
2d80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de0: 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
2df0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2e00: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   Returns the num
2e10: 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74 68 65  ber of times the
2e20: 20 3c 73 65 65 20 63 72 65 66 3d 22 43 61 6e 63   <see cref="Canc
2e30: 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 20 68 61  el" /> method ha
2e40: 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
2e50: 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  called...    ///
2e60: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2e70: 20 70 72 69 76 61 74 65 20 69 6e 74 20 47 65 74   private int Get
2e80: 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d 0a 20  CancelCount().. 
2e90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
2ea0: 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64  turn Interlocked
2eb0: 2e 43 6f 6d 70 61 72 65 45 78 63 68 61 6e 67 65  .CompareExchange
2ec0: 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e  (ref _cancelCoun
2ed0: 74 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 7d  t, 0, 0);..    }
2ee0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f40: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f  ///////....    /
2f50: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2f60: 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
2f70: 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65  d determines whe
2f80: 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 3c 73  ther or not a <s
2f90: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45  ee cref="SQLiteE
2fa0: 78 63 65 70 74 69 6f 6e 22 20 2f 3e 0d 0a 20 20  xception" />..  
2fb0: 20 20 2f 2f 2f 20 77 69 74 68 20 61 20 72 65 74    /// with a ret
2fc0: 75 72 6e 20 63 6f 64 65 20 6f 66 20 3c 73 65 65  urn code of <see
2fd0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72   cref="SQLiteErr
2fe0: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
2ff0: 22 20 2f 3e 20 73 68 6f 75 6c 64 0d 0a 20 20 20  " /> should..   
3000: 20 2f 2f 2f 20 62 65 20 74 68 72 6f 77 6e 20 61   /// be thrown a
3010: 66 74 65 72 20 6d 61 6b 69 6e 67 20 61 20 63 61  fter making a ca
3020: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53 51 4c 69  ll into the SQLi
3030: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
3040: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3050: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
3060: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
3070: 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 3c   Non-zero if a <
3080: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
3090: 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20 74 6f  Exception" /> to
30a0: 20 62 65 20 74 68 72 6f 77 6e 2e 20 20 54 68 69   be thrown.  Thi
30b0: 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 2f 2f  s method..    //
30c0: 2f 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 65 74 75  / will only retu
30d0: 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  rn non-zero if t
30e0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 61  he <see cref="Ca
30f0: 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 20  ncel" /> method 
3100: 77 61 73 20 63 61 6c 6c 65 64 0d 0a 20 20 20 20  was called..    
3110: 2f 2f 2f 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  /// one or more 
3120: 74 69 6d 65 73 20 64 75 72 69 6e 67 20 61 20 63  times during a c
3130: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53 51 4c  all into the SQL
3140: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
3150: 20 28 65 2e 67 2e 20 77 68 65 6e 0d 0a 20 20 20   (e.g. when..   
3160: 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74 65 33   /// the sqlite3
3170: 5f 70 72 65 70 61 72 65 2a 28 29 20 6f 72 20 73  _prepare*() or s
3180: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 41 50  qlite3_step() AP
3190: 49 73 20 61 72 65 20 75 73 65 64 29 2e 0d 0a 20  Is are used)... 
31a0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
31b0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  >..    private b
31c0: 6f 6f 6c 20 53 68 6f 75 6c 64 54 68 72 6f 77 46  ool ShouldThrowF
31d0: 6f 72 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20 20  orCancel()..    
31e0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
31f0: 6e 20 47 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74  n GetCancelCount
3200: 28 29 20 3e 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  () > 0;..    }..
3210: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
3220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3270: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
3280: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3290: 2f 2f 2f 20 52 65 73 65 74 73 20 74 68 65 20 76  /// Resets the v
32a0: 61 6c 75 65 20 6f 66 20 74 68 65 20 3c 73 65 65  alue of the <see
32b0: 20 63 72 65 66 3d 22 5f 63 61 6e 63 65 6c 43 6f   cref="_cancelCo
32c0: 75 6e 74 22 20 2f 3e 20 66 69 65 6c 64 2e 0d 0a  unt" /> field...
32d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
32e0: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
32f0: 69 6e 74 20 52 65 73 65 74 43 61 6e 63 65 6c 43  int ResetCancelC
3300: 6f 75 6e 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ount()..    {.. 
3310: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
3320: 74 65 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70 61 72  terlocked.Compar
3330: 65 45 78 63 68 61 6e 67 65 28 72 65 66 20 5f 63  eExchange(ref _c
3340: 61 6e 63 65 6c 43 6f 75 6e 74 2c 20 30 2c 20 5f  ancelCount, 0, _
3350: 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a 20  cancelCount);.. 
3360: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
3370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
33d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
33e0: 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70  ..    /// Attemp
33f0: 74 73 20 74 6f 20 69 6e 74 65 72 72 75 70 74 20  ts to interrupt 
3400: 74 68 65 20 71 75 65 72 79 20 63 75 72 72 65 6e  the query curren
3410: 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 6f 6e  tly executing on
3420: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d   the associated.
3430: 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20  .    /// native 
3440: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
3450: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
3460: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
3470: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
3480: 76 6f 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20  void Cancel().. 
3490: 20 20 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 0d     {..      try.
34a0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
34b0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
34c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
34d0: 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45   finally /* NOTE
34e0: 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29  : Thread.Abort()
34f0: 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d   protection. */.
3500: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
3510: 20 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e    Interlocked.In
3520: 63 72 65 6d 65 6e 74 28 72 65 66 20 5f 63 61 6e  crement(ref _can
3530: 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a 20 20 20 20  celCount);..    
3540: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
3550: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3560: 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29 3b  interrupt(_sql);
3570: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
3580: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
3590: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
35a0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62 69 6e  his function bin
35b0: 64 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  ds a user-define
35c0: 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68  d function to th
35d0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
35e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
35f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3600: 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e  m name="function
3610: 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20 20  Attribute">..   
3620: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
3630: 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69  ef="SQLiteFuncti
3640: 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20 6f  onAttribute"/> o
3650: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 63  bject instance c
3660: 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 2f  ontaining..    /
3670: 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61 20  // the metadata 
3680: 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  for the function
3690: 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20   to be bound... 
36a0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
36b0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
36c0: 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22 3e  name="function">
36d0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73  ..    /// The <s
36e0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46  ee cref="SQLiteF
36f0: 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65 63  unction"/> objec
3700: 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74 20  t instance that 
3710: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0d 0a  implements the..
3720: 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e      /// function
3730: 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20   to be bound... 
3740: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
3750: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
3760: 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20  name="flags">.. 
3770: 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73     /// The flags
3780: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3790: 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e   the parent conn
37a0: 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d 0a  ection object...
37b0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
37c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
37d0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
37e0: 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
37f0: 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69      SQLiteFuncti
3800: 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75 6e 63  onAttribute func
3810: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d 0a  tionAttribute,..
3820: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
3830: 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c  nction function,
3840: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
3850: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
3860: 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 29  flags..        )
3870: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
3880: 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41 74 74   if (functionAtt
3890: 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ribute == null).
38a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
38b0: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
38c0: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 75  ullException("fu
38d0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
38e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
38f0: 20 28 66 75 6e 63 74 69 6f 6e 20 3d 3d 20 6e 75   (function == nu
3900: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3910: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
3920: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
3930: 28 22 66 75 6e 63 74 69 6f 6e 22 29 3b 0d 0a 0d  ("function");...
3940: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46  .        SQLiteF
3950: 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63  unction.BindFunc
3960: 74 69 6f 6e 28 74 68 69 73 2c 20 66 75 6e 63 74  tion(this, funct
3970: 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75  ionAttribute, fu
3980: 6e 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29 3b 0d  nction, flags);.
3990: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  ...        if (_
39a0: 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c  functions == nul
39b0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
39c0: 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77  _functions = new
39d0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69   Dictionary<SQLi
39e0: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
39f0: 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74  ute, SQLiteFunct
3a00: 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ion>();....     
3a10: 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 66 75     _functions[fu
3a20: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 5d  nctionAttribute]
3a30: 20 3d 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a 20 20   = function;..  
3a40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
3a50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
3a60: 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  / This function 
3a70: 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66  binds a user-def
3a80: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f  ined function to
3a90: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e   the connection.
3aa0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3ab0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
3ac0: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74  aram name="funct
3ad0: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a  ionAttribute">..
3ae0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
3af0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e   cref="SQLiteFun
3b00: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f  ctionAttribute"/
3b10: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
3b20: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20  e containing..  
3b30: 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61    /// the metada
3b40: 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  ta for the funct
3b50: 69 6f 6e 20 74 6f 20 62 65 20 75 6e 62 6f 75 6e  ion to be unboun
3b60: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
3b70: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
3b80: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73  aram name="flags
3b90: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
3ba0: 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  flags associated
3bb0: 20 77 69 74 68 20 74 68 65 20 70 61 72 65 6e 74   with the parent
3bc0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65   connection obje
3bd0: 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ct...    /// </p
3be0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
3bf0: 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d 7a 65 72 6f  returns>Non-zero
3c00: 20 69 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   if the function
3c10: 20 77 61 73 20 75 6e 62 6f 75 6e 64 20 61 6e 64   was unbound and
3c20: 20 72 65 6d 6f 76 65 64 2e 3c 2f 72 65 74 75 72   removed.</retur
3c30: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
3c40: 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
3c50: 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d  UnbindFunction(.
3c60: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46  .        SQLiteF
3c70: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3c80: 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75   functionAttribu
3c90: 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  te,..        SQL
3ca0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
3cb0: 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20  gs flags..      
3cc0: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
3cd0: 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e      if (function
3ce0: 41 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c  Attribute == nul
3cf0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
3d00: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
3d10: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
3d20: 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  "functionAttribu
3d30: 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  te");....       
3d40: 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20   if (_functions 
3d50: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
3d60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
3d70: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  se;....        S
3d80: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
3d90: 6e 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20  nction;....     
3da0: 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e     if (_function
3db0: 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 66 75  s.TryGetValue(fu
3dc0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
3dd0: 20 6f 75 74 20 66 75 6e 63 74 69 6f 6e 29 29 0d   out function)).
3de0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
3df0: 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69          if (SQLi
3e00: 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69 6e  teFunction.Unbin
3e10: 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e30: 74 68 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74  this, functionAt
3e40: 74 72 69 62 75 74 65 2c 20 66 75 6e 63 74 69 6f  tribute, functio
3e50: 6e 2c 20 66 6c 61 67 73 29 20 26 26 0d 0a 20 20  n, flags) &&..  
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66                _f
3e70: 75 6e 63 74 69 6f 6e 73 2e 52 65 6d 6f 76 65 28  unctions.Remove(
3e80: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
3e90: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
3ea0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3eb0: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
3ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3ed0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
3ee0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
3ef0: 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  se;..    }....  
3f00: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3f10: 69 64 65 20 73 74 72 69 6e 67 20 56 65 72 73 69  ide string Versi
3f20: 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  on..    {..     
3f30: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
3f40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
3f50: 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20  LiteVersion;..  
3f60: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
3f70: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
3f80: 72 72 69 64 65 20 69 6e 74 20 56 65 72 73 69 6f  rride int Versio
3f90: 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a  nNumber..    {..
3fa0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
3fb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
3fc0: 72 6e 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e  rn SQLiteVersion
3fd0: 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 7d  Number;..      }
3fe0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
3ff0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
4000: 74 72 69 6e 67 20 44 65 66 69 6e 65 43 6f 6e 73  tring DefineCons
4010: 74 61 6e 74 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  tants..    {..  
4020: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
4030: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4040: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
4050: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
4060: 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20  ingBuilder();.. 
4070: 20 20 20 20 20 20 20 20 20 20 20 49 4c 69 73 74             IList
4080: 3c 73 74 72 69 6e 67 3e 20 6c 69 73 74 20 3d 20  <string> list = 
4090: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
40a0: 74 61 6e 74 73 2e 4f 70 74 69 6f 6e 4c 69 73 74  tants.OptionList
40b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
40c0: 20 69 66 20 28 6c 69 73 74 20 21 3d 20 6e 75 6c   if (list != nul
40d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
40e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
40f0: 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69     foreach (stri
4100: 6e 67 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69  ng element in li
4110: 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st)..           
4120: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4130: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4140: 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  element == null)
4150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4160: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
4170: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
4180: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
4190: 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30  esult.Length > 0
41a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
41b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
41c0: 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a  t.Append(' ');..
41d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
41e0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
41f0: 65 6e 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20  end(element);.. 
4200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4220: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
4230: 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53  eturn result.ToS
4240: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20  tring();..      
4250: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4260: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
4270: 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65 56  c string SQLiteV
4280: 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20  ersion..    {.. 
4290: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
42a0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
42b0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
42c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
42d0: 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76 65  ds.sqlite3_libve
42e0: 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 20  rsion(), -1);.. 
42f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4300: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
4310: 61 74 69 63 20 69 6e 74 20 53 51 4c 69 74 65 56  atic int SQLiteV
4320: 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20  ersionNumber..  
4330: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
4340: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4350: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
4360: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4370: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e  te3_libversion_n
4380: 75 6d 62 65 72 28 29 3b 0d 0a 20 20 20 20 20 20  umber();..      
4390: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
43a0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
43b0: 73 74 72 69 6e 67 20 53 51 4c 69 74 65 53 6f 75  string SQLiteSou
43c0: 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  rceId..    {..  
43d0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
43e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
43f0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
4400: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4410: 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65  s.sqlite3_source
4420: 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20  id(), -1);..    
4430: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4440: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
4450: 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65 43  c string SQLiteC
4460: 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20  ompileOptions.. 
4470: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
4480: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
4490: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
44a0: 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d  Builder result =
44b0: 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64   new StringBuild
44c0: 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  er();..         
44d0: 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 30     int index = 0
44e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ;..            I
44f0: 6e 74 50 74 72 20 7a 56 61 6c 75 65 20 3d 20 55  ntPtr zValue = U
4500: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4510: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69  ds.sqlite3_compi
4520: 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64  leoption_get(ind
4530: 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ex++);....      
4540: 20 20 20 20 20 20 77 68 69 6c 65 20 28 7a 56 61        while (zVa
4550: 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  lue != IntPtr.Ze
4560: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
4570: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4580: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
4590: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45b0: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20  result.Append(' 
45c0: 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ');....         
45d0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
45e0: 70 65 6e 64 28 55 54 46 38 54 6f 53 74 72 69 6e  pend(UTF8ToStrin
45f0: 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29 3b 0d  g(zValue, -1));.
4600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4610: 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65   zValue = Unsafe
4620: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4630: 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
4640: 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29  ion_get(index++)
4650: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
4660: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4670: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
4680: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20  String();..     
4690: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
46a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
46b0: 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72 6f  ic string Intero
46c0: 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d  pVersion..    {.
46d0: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
46e0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51        {..#if !SQ
46f0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
4700: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4710: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
4720: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4730: 64 73 2e 69 6e 74 65 72 6f 70 5f 6c 69 62 76 65  ds.interop_libve
4740: 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 23  rsion(), -1);..#
4750: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
4760: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
4770: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
4780: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
4790: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
47a0: 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 53 6f  string InteropSo
47b0: 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20  urceId..    {.. 
47c0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
47d0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
47e0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
47f0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4800: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
4810: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4820: 2e 69 6e 74 65 72 6f 70 5f 73 6f 75 72 63 65 69  .interop_sourcei
4830: 64 28 29 2c 20 2d 31 29 3b 0d 0a 23 65 6c 73 65  d(), -1);..#else
4840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4850: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64  turn null;..#end
4860: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
4870: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4880: 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69  rnal static stri
4890: 6e 67 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c  ng InteropCompil
48a0: 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d  eOptions..    {.
48b0: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
48c0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51        {..#if !SQ
48d0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
48e0: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
48f0: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
4900: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
4910: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
4920: 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20      int index = 
4930: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
4940: 49 6e 74 50 74 72 20 7a 56 61 6c 75 65 20 3d 20  IntPtr zValue = 
4950: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4960: 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70  ods.interop_comp
4970: 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e  ileoption_get(in
4980: 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20 20  dex++);....     
4990: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 7a 56         while (zV
49a0: 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  alue != IntPtr.Z
49b0: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
49c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
49d0: 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e       if (result.
49e0: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a00: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27   result.Append('
4a10: 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   ');....        
4a20: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
4a30: 70 70 65 6e 64 28 55 54 46 38 54 6f 53 74 72 69  ppend(UTF8ToStri
4a40: 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29 3b  ng(zValue, -1));
4a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4a60: 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61 66    zValue = Unsaf
4a70: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 69  eNativeMethods.i
4a80: 6e 74 65 72 6f 70 5f 63 6f 6d 70 69 6c 65 6f 70  nterop_compileop
4a90: 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b  tion_get(index++
4aa0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4ab0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4ac0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
4ad0: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 23 65 6c 73  oString();..#els
4ae0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
4af0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e  eturn null;..#en
4b00: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
4b10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4b20: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
4b30: 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a  ool AutoCommit..
4b40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
4b50: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
4b60: 20 20 20 72 65 74 75 72 6e 20 49 73 41 75 74 6f     return IsAuto
4b70: 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f 73 71  commit(_sql, _sq
4b80: 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  l);..      }..  
4b90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4ba0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
4bb0: 67 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49  g LastInsertRowI
4bc0: 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  d..    {..      
4bd0: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69  get..      {..#i
4be0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
4bf0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
4c00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
4c10: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4c20: 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e  .sqlite3_last_in
4c30: 73 65 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c 29  sert_rowid(_sql)
4c40: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
4c50: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
4c60: 20 20 20 6c 6f 6e 67 20 72 6f 77 49 64 20 3d 20     long rowId = 
4c70: 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61  0;..        Unsa
4c80: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4c90: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
4ca0: 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f  ert_rowid_intero
4cb0: 70 28 5f 73 71 6c 2c 20 72 65 66 20 72 6f 77 49  p(_sql, ref rowI
4cc0: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  d);..        ret
4cd0: 75 72 6e 20 72 6f 77 49 64 3b 0d 0a 23 65 6c 73  urn rowId;..#els
4ce0: 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  e..        throw
4cf0: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
4d00: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
4d10: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d  .#endif..      }
4d20: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
4d30: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
4d40: 20 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a 20 20   int Changes..  
4d50: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
4d60: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51        {..#if !SQ
4d70: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
4d80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
4d90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4da0: 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  s.sqlite3_change
4db0: 73 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 29 3b  s_interop(_sql);
4dc0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
4dd0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
4de0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4df0: 74 65 33 5f 63 68 61 6e 67 65 73 28 5f 73 71 6c  te3_changes(_sql
4e00: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
4e10: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4e20: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
4e30: 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 55  ide long MemoryU
4e40: 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  sed..    {..    
4e50: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
4e60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4e70: 72 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65 6d  return StaticMem
4e80: 6f 72 79 55 73 65 64 3b 0d 0a 20 20 20 20 20 20  oryUsed;..      
4e90: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4ea0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
4eb0: 63 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65 6d  c long StaticMem
4ec0: 6f 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a  oryUsed..    {..
4ed0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
4ee0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
4ef0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
4f00: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
4f10: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
4f20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4f30: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73  qlite3_memory_us
4f40: 65 64 28 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  ed();..#elif !SQ
4f50: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
4f60: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
4f70: 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  bytes = 0;..    
4f80: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
4f90: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4fa0: 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 5f  te3_memory_used_
4fb0: 69 6e 74 65 72 6f 70 28 72 65 66 20 62 79 74 65  interop(ref byte
4fc0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
4fd0: 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a   return bytes;..
4fe0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
4ff0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
5000: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
5010: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
5020: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5030: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
5040: 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
5050: 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d  MemoryHighwater.
5060: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5070: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
5080: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5090: 72 6e 20 53 74 61 74 69 63 4d 65 6d 6f 72 79 48  rn StaticMemoryH
50a0: 69 67 68 77 61 74 65 72 3b 0d 0a 20 20 20 20 20  ighwater;..     
50b0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
50c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
50d0: 69 63 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65  ic long StaticMe
50e0: 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20  moryHighwater.. 
50f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
5100: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  t..        {..#i
5110: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
5120: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
5130: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5140: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5150: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d  hods.sqlite3_mem
5160: 6f 72 79 5f 68 69 67 68 77 61 74 65 72 28 30 29  ory_highwater(0)
5170: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
5180: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
5190: 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65         long byte
51a0: 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  s = 0;..        
51b0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
51c0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
51d0: 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72  memory_highwater
51e0: 5f 69 6e 74 65 72 6f 70 28 30 2c 20 72 65 66 20  _interop(0, ref 
51f0: 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  bytes);..       
5200: 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65       return byte
5210: 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  s;..#else..     
5220: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
5230: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
5240: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
5250: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
5260: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
5270: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5280: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d  /// Returns non-
5290: 7a 65 72 6f 20 69 66 20 74 68 65 20 75 6e 64 65  zero if the unde
52a0: 72 6c 79 69 6e 67 20 6e 61 74 69 76 65 20 63 6f  rlying native co
52b0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
52c0: 69 73 20 6f 77 6e 65 64 0d 0a 20 20 20 20 2f 2f  is owned..    //
52d0: 2f 20 62 79 20 74 68 69 73 20 69 6e 73 74 61 6e  / by this instan
52e0: 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ce...    /// </s
52f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74  ummary>..    int
5300: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
5310: 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d 0a 20  ool OwnHandle.. 
5320: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
5330: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
5340: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 73            if (_s
5350: 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
5360: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
5370: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
5380: 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65  eption("no conne
5390: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76 61  ction handle ava
53a0: 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20  ilable");....   
53b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
53c0: 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 3b 0d  _sql.OwnHandle;.
53d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
53e0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
53f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
5400: 52 65 74 75 72 6e 73 20 74 68 65 20 6c 6f 67 69  Returns the logi
5410: 63 61 6c 20 6c 69 73 74 20 6f 66 20 66 75 6e 63  cal list of func
5420: 74 69 6f 6e 73 20 61 73 73 6f 63 69 61 74 65 64  tions associated
5430: 20 77 69 74 68 20 74 68 69 73 20 63 6f 6e 6e 65   with this conne
5440: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
5450: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
5460: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5470: 65 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53 51  e IDictionary<SQ
5480: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
5490: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
54a0: 63 74 69 6f 6e 3e 20 46 75 6e 63 74 69 6f 6e 73  ction> Functions
54b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
54c0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 66   get { return _f
54d0: 75 6e 63 74 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20  unctions; }..   
54e0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
54f0: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
5500: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4d  teErrorCode SetM
5510: 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c  emoryStatus(bool
5520: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
5530: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
5540: 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74  taticSetMemorySt
5550: 61 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20  atus(value);..  
5560: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5570: 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74  nal static SQLit
5580: 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69  eErrorCode Stati
5590: 63 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73  cSetMemoryStatus
55a0: 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20  (bool value)..  
55b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
55c0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
55d0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
55e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
55f0: 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20 20 20 20  nfig_int(..     
5600: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
5610: 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  figOpsEnum.SQLIT
5620: 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54  E_CONFIG_MEMSTAT
5630: 55 53 2c 20 76 61 6c 75 65 20 3f 20 31 20 3a 20  US, value ? 1 : 
5640: 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  0);....        r
5650: 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d  eturn rc;..    }
5660: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
5670: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
5680: 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20  ttempts to free 
5690: 61 73 20 6d 75 63 68 20 68 65 61 70 20 6d 65 6d  as much heap mem
56a0: 6f 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65 20  ory as possible 
56b0: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
56c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
56d0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
56e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
56f0: 6e 73 3e 41 20 73 74 61 6e 64 61 72 64 20 53 51  ns>A standard SQ
5700: 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
5710: 20 28 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20   (i.e. zero for 
5720: 73 75 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d  success and non-
5730: 7a 65 72 6f 20 66 6f 72 20 66 61 69 6c 75 72 65  zero for failure
5740: 29 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  ).</returns>..  
5750: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
5760: 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
5770: 6f 64 65 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72  ode ReleaseMemor
5780: 79 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  y()..    {..    
5790: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
57a0: 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  ode rc = UnsafeN
57b0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
57c0: 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f  ite3_db_release_
57d0: 6d 65 6d 6f 72 79 28 5f 73 71 6c 29 3b 0d 0a 20  memory(_sql);.. 
57e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
57f0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
5800: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5810: 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20     /// Attempts 
5820: 74 6f 20 66 72 65 65 20 4e 20 62 79 74 65 73 20  to free N bytes 
5830: 6f 66 20 68 65 61 70 20 6d 65 6d 6f 72 79 20 62  of heap memory b
5840: 79 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 6e  y deallocating n
5850: 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d  on-essential mem
5860: 6f 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c 6c  ory..    /// all
5870: 6f 63 61 74 69 6f 6e 73 20 68 65 6c 64 20 62 79  ocations held by
5880: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6c 69   the database li
5890: 62 72 61 72 79 2e 20 4d 65 6d 6f 72 79 20 75 73  brary. Memory us
58a0: 65 64 20 74 6f 20 63 61 63 68 65 20 64 61 74 61  ed to cache data
58b0: 62 61 73 65 20 70 61 67 65 73 0d 0a 20 20 20 20  base pages..    
58c0: 2f 2f 2f 20 74 6f 20 69 6d 70 72 6f 76 65 20 70  /// to improve p
58d0: 65 72 66 6f 72 6d 61 6e 63 65 20 69 73 20 61 6e  erformance is an
58e0: 20 65 78 61 6d 70 6c 65 20 6f 66 20 6e 6f 6e 2d   example of non-
58f0: 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f 72 79  essential memory
5900: 2e 20 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d  .  This is a no-
5910: 6f 70 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 74 75  op..    /// retu
5920: 72 6e 69 6e 67 20 7a 65 72 6f 20 69 66 20 74 68  rning zero if th
5930: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
5940: 62 72 61 72 79 20 77 61 73 20 6e 6f 74 20 63 6f  brary was not co
5950: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20  mpiled with the 
5960: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0d 0a 20 20  compile-time..  
5970: 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 20 53 51 4c    /// option SQL
5980: 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ITE_ENABLE_MEMOR
5990: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2e 20 20 4f  Y_MANAGEMENT.  O
59a0: 70 74 69 6f 6e 61 6c 6c 79 2c 20 61 74 74 65 6d  ptionally, attem
59b0: 70 74 73 20 74 6f 20 72 65 73 65 74 20 61 6e 64  pts to reset and
59c0: 2f 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6d  /or..    /// com
59d0: 70 61 63 74 20 74 68 65 20 57 69 6e 33 32 20 6e  pact the Win32 n
59e0: 61 74 69 76 65 20 68 65 61 70 2c 20 69 66 20 61  ative heap, if a
59f0: 70 70 6c 69 63 61 62 6c 65 2e 0d 0a 20 20 20 20  pplicable...    
5a00: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5a10: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5a20: 61 6d 65 3d 22 6e 42 79 74 65 73 22 3e 0d 0a 20  ame="nBytes">.. 
5a30: 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 71 75 65     /// The reque
5a40: 73 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 62  sted number of b
5a50: 79 74 65 73 20 74 6f 20 66 72 65 65 2e 0d 0a 20  ytes to free... 
5a60: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
5a70: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
5a80: 6e 61 6d 65 3d 22 72 65 73 65 74 22 3e 0d 0a 20  name="reset">.. 
5a90: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
5aa0: 74 6f 20 61 74 74 65 6d 70 74 20 61 20 68 65 61  to attempt a hea
5ab0: 70 20 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f 2f  p reset...    //
5ac0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
5ad0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5ae0: 22 63 6f 6d 70 61 63 74 22 3e 0d 0a 20 20 20 20  "compact">..    
5af0: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20  /// Non-zero to 
5b00: 61 74 74 65 6d 70 74 20 68 65 61 70 20 63 6f 6d  attempt heap com
5b10: 70 61 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  paction...    //
5b20: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
5b30: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5b40: 22 6e 46 72 65 65 22 3e 0d 0a 20 20 20 20 2f 2f  "nFree">..    //
5b50: 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
5b60: 62 79 74 65 73 20 61 63 74 75 61 6c 6c 79 20 66  bytes actually f
5b70: 72 65 65 64 2e 20 20 54 68 69 73 20 76 61 6c 75  reed.  This valu
5b80: 65 20 6d 61 79 20 62 65 20 7a 65 72 6f 2e 0d 0a  e may be zero...
5b90: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
5ba0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
5bb0: 20 6e 61 6d 65 3d 22 72 65 73 65 74 4f 6b 22 3e   name="resetOk">
5bc0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76  ..    /// This v
5bd0: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 6e 6f 6e  alue will be non
5be0: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 68 65 61  -zero if the hea
5bf0: 70 20 72 65 73 65 74 20 77 61 73 20 73 75 63 63  p reset was succ
5c00: 65 73 73 66 75 6c 2e 0d 0a 20 20 20 20 2f 2f 2f  essful...    ///
5c10: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
5c20: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5c30: 6e 4c 61 72 67 65 73 74 22 3e 0d 0a 20 20 20 20  nLargest">..    
5c40: 2f 2f 2f 20 54 68 65 20 73 69 7a 65 20 6f 66 20  /// The size of 
5c50: 74 68 65 20 6c 61 72 67 65 73 74 20 63 6f 6d 6d  the largest comm
5c60: 69 74 74 65 64 20 66 72 65 65 20 62 6c 6f 63 6b  itted free block
5c70: 20 69 6e 20 74 68 65 20 68 65 61 70 2c 20 69 6e   in the heap, in
5c80: 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f   bytes...    ///
5c90: 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c   This value will
5ca0: 20 62 65 20 7a 65 72 6f 20 75 6e 6c 65 73 73 20   be zero unless 
5cb0: 68 65 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 20  heap compaction 
5cc0: 69 73 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20 20  is enabled...   
5cd0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
5ce0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
5cf0: 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e  ..    /// A stan
5d00: 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
5d10: 72 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65  rn code (i.e. ze
5d20: 72 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20 61  ro for success a
5d30: 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 0d 0a 20 20 20  nd non-zero..   
5d40: 20 2f 2f 2f 20 66 6f 72 20 66 61 69 6c 75 72 65   /// for failure
5d50: 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  )...    /// </re
5d60: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
5d70: 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
5d80: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74  teErrorCode Stat
5d90: 69 63 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28  icReleaseMemory(
5da0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 42  ..        int nB
5db0: 79 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 62  ytes,..        b
5dc0: 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a 20 20 20 20  ool reset,..    
5dd0: 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 61 63 74      bool compact
5de0: 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 69  ,..        ref i
5df0: 6e 74 20 6e 46 72 65 65 2c 0d 0a 20 20 20 20 20  nt nFree,..     
5e00: 20 20 20 72 65 66 20 62 6f 6f 6c 20 72 65 73 65     ref bool rese
5e10: 74 4f 6b 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  tOk,..        re
5e20: 66 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74 0d  f uint nLargest.
5e30: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
5e40: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
5e50: 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
5e60: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
5e70: 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  Ok;....        i
5e80: 6e 74 20 6e 46 72 65 65 4c 6f 63 61 6c 20 3d 20  nt nFreeLocal = 
5e90: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5ea0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6c 65  ods.sqlite3_rele
5eb0: 61 73 65 5f 6d 65 6d 6f 72 79 28 6e 42 79 74 65  ase_memory(nByte
5ec0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 75 69 6e  s);..        uin
5ed0: 74 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 20  t nLargestLocal 
5ee0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 62 6f  = 0;..        bo
5ef0: 6f 6c 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 20  ol resetOkLocal 
5f00: 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20  = false;....#if 
5f10: 21 44 45 42 55 47 20 26 26 20 57 49 4e 44 4f 57  !DEBUG && WINDOW
5f20: 53 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 75 6c  S // NOTE: Shoul
5f30: 64 20 62 65 20 22 57 49 4e 33 32 48 45 41 50 20  d be "WIN32HEAP 
5f40: 26 26 20 21 4d 45 4d 44 45 42 55 47 20 26 26 20  && !MEMDEBUG && 
5f50: 57 49 4e 44 4f 57 53 22 0d 0a 20 20 20 20 20 20  WINDOWS"..      
5f60: 20 20 69 66 20 28 28 72 63 20 3d 3d 20 53 51 4c    if ((rc == SQL
5f70: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
5f80: 20 26 26 20 72 65 73 65 74 29 0d 0a 20 20 20 20   && reset)..    
5f90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5fa0: 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61     rc = UnsafeNa
5fb0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5fc0: 74 65 33 5f 77 69 6e 33 32 5f 72 65 73 65 74 5f  te3_win32_reset_
5fd0: 68 65 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  heap();....     
5fe0: 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d         if (rc ==
5ff0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6000: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
6010: 20 20 20 20 20 20 72 65 73 65 74 4f 6b 4c 6f 63        resetOkLoc
6020: 61 6c 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  al = true;..    
6030: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6040: 20 69 66 20 28 28 72 63 20 3d 3d 20 53 51 4c 69   if ((rc == SQLi
6050: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
6060: 26 26 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20  && compact)..   
6070: 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e           rc = Un
6080: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6090: 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  s.sqlite3_win32_
60a0: 63 6f 6d 70 61 63 74 5f 68 65 61 70 28 72 65 66  compact_heap(ref
60b0: 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 29 3b   nLargestLocal);
60c0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
60d0: 20 69 66 20 28 72 65 73 65 74 20 7c 7c 20 63 6f   if (reset || co
60e0: 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20  mpact)..        
60f0: 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45      rc = SQLiteE
6100: 72 72 6f 72 43 6f 64 65 2e 4e 6f 74 46 6f 75 6e  rrorCode.NotFoun
6110: 64 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  d;..#endif....  
6120: 20 20 20 20 20 20 6e 46 72 65 65 20 3d 20 6e 46        nFree = nF
6130: 72 65 65 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20 20  reeLocal;..     
6140: 20 20 20 6e 4c 61 72 67 65 73 74 20 3d 20 6e 4c     nLargest = nL
6150: 61 72 67 65 73 74 4c 6f 63 61 6c 3b 0d 0a 20 20  argestLocal;..  
6160: 20 20 20 20 20 20 72 65 73 65 74 4f 6b 20 3d 20        resetOk = 
6170: 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 3b 0d 0a 0d  resetOkLocal;...
6180: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6190: 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  rc;..    }....  
61a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
61b0: 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77  .    /// Shutdow
61c0: 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67  n the SQLite eng
61d0: 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63  ine so that it c
61e0: 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20  an be restarted 
61f0: 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d 0a  with different..
6200: 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72      /// configur
6210: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 20  ation options.  
6220: 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74  We depend on aut
6230: 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  o initialization
6240: 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20   to recover...  
6250: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6260: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
6270: 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 73 74 61  ns>Returns a sta
6280: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 73  ndard SQLite res
6290: 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75 72  ult code.</retur
62a0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
62b0: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
62c0: 65 45 72 72 6f 72 43 6f 64 65 20 53 68 75 74 64  eErrorCode Shutd
62d0: 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  own()..    {..  
62e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61        return Sta
62f0: 74 69 63 53 68 75 74 64 6f 77 6e 28 66 61 6c 73  ticShutdown(fals
6300: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
6310: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6320: 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77  .    /// Shutdow
6330: 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67  n the SQLite eng
6340: 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63  ine so that it c
6350: 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20  an be restarted 
6360: 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d 0a  with different..
6370: 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72      /// configur
6380: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 20  ation options.  
6390: 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74  We depend on aut
63a0: 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  o initialization
63b0: 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20   to recover...  
63c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
63d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
63e0: 20 6e 61 6d 65 3d 22 64 69 72 65 63 74 6f 72 69   name="directori
63f0: 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  es">..    /// No
6400: 6e 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65 74 20  n-zero to reset 
6410: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
6420: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
6430: 74 6f 72 69 65 73 20 74 6f 20 74 68 65 69 72 0d  tories to their.
6440: 0a 20 20 20 20 2f 2f 2f 20 64 65 66 61 75 6c 74  .    /// default
6450: 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73   values, which s
6460: 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f  hould be null fo
6470: 72 20 62 6f 74 68 2e 20 20 54 68 69 73 20 70 61  r both.  This pa
6480: 72 61 6d 65 74 65 72 20 68 61 73 20 6e 6f 0d 0a  rameter has no..
6490: 20 20 20 20 2f 2f 2f 20 65 66 66 65 63 74 20 6f      /// effect o
64a0: 6e 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73 20 6f 70  n non-Windows op
64b0: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 73 2e  erating systems.
64c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
64d0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
64e0: 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 73  urns>Returns a s
64f0: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
6500: 65 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74  esult code.</ret
6510: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
6520: 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74  nal static SQLit
6530: 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69  eErrorCode Stati
6540: 63 53 68 75 74 64 6f 77 6e 28 0d 0a 20 20 20 20  cShutdown(..    
6550: 20 20 20 20 62 6f 6f 6c 20 64 69 72 65 63 74 6f      bool directo
6560: 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20 29 0d  ries..        ).
6570: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6580: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6590: 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  rc = SQLiteError
65a0: 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20  Code.Ok;....    
65b0: 20 20 20 20 69 66 20 28 64 69 72 65 63 74 6f 72      if (director
65c0: 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ies)..        {.
65d0: 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20  .#if WINDOWS..  
65e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
65f0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
6600: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
6610: 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e           rc = Un
6620: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6630: 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  s.sqlite3_win32_
6640: 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 31 2c  set_directory(1,
6650: 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20   null);....     
6660: 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d         if (rc ==
6670: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6680: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
6690: 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
66a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
66b0: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
66c0: 5f 64 69 72 65 63 74 6f 72 79 28 32 2c 20 6e 75  _directory(2, nu
66d0: 6c 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23 69 66  ll);..#else..#if
66e0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
66f0: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
6700: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
6710: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
6720: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
6730: 20 20 20 20 22 53 68 75 74 64 6f 77 6e 3a 20 43      "Shutdown: C
6740: 61 6e 6e 6f 74 20 72 65 73 65 74 20 64 69 72 65  annot reset dire
6750: 63 74 6f 72 69 65 73 20 6f 6e 20 74 68 69 73 20  ctories on this 
6760: 70 6c 61 74 66 6f 72 6d 2e 22 29 3b 0d 0a 23 65  platform.");..#e
6770: 6e 64 69 66 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ndif..#endif..  
6780: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6790: 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c     if (rc == SQL
67a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
67b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  ..            rc
67c0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
67d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
67e0: 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 0d 0a 20 20  hutdown();....  
67f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b        return rc;
6800: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
6810: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6820: 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73    /// Determines
6830: 20 69 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   if the associat
6840: 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63  ed native connec
6850: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f  tion handle is o
6860: 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  pen...    /// </
6870: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6880: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
6890: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
68a0: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
68b0: 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f  native connectio
68c0: 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f 70 65 6e  n handle is open
68d0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
68e0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
68f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
6900: 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20 20 20  l IsOpen()..    
6910: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
6920: 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  n (_sql != null)
6930: 20 26 26 20 21 5f 73 71 6c 2e 49 73 49 6e 76 61   && !_sql.IsInva
6940: 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e 49 73 43  lid && !_sql.IsC
6950: 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  losed;..    }...
6960: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
6970: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
6980: 72 6e 73 20 74 68 65 20 66 75 6c 6c 79 20 71 75  rns the fully qu
6990: 61 6c 69 66 69 65 64 20 70 61 74 68 20 61 6e 64  alified path and
69a0: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74   file name for t
69b0: 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
69c0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  n..    /// datab
69d0: 61 73 65 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20  ase, if any...  
69e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
69f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
6a00: 20 6e 61 6d 65 3d 22 64 62 4e 61 6d 65 22 3e 0d   name="dbName">.
6a10: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d  .    /// The nam
6a20: 65 20 6f 66 20 74 68 65 20 61 74 74 61 63 68 65  e of the attache
6a30: 64 20 64 61 74 61 62 61 73 65 20 74 6f 20 71 75  d database to qu
6a40: 65 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ery...    /// </
6a50: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
6a60: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
6a70: 2f 2f 20 54 68 65 20 66 75 6c 6c 79 20 71 75 61  // The fully qua
6a80: 6c 69 66 69 65 64 20 70 61 74 68 20 61 6e 64 20  lified path and 
6a90: 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68  file name for th
6aa0: 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  e currently open
6ab0: 20 64 61 74 61 62 61 73 65 2c 0d 0a 20 20 20 20   database,..    
6ac0: 2f 2f 2f 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20  /// if any...   
6ad0: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
6ae0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6af0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
6b00: 74 46 69 6c 65 4e 61 6d 65 28 73 74 72 69 6e 67  tFileName(string
6b10: 20 64 62 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d   dbName)..    {.
6b20: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71  .        if (_sq
6b30: 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l == null)..    
6b40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
6b50: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
6b60: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
6b70: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
6b80: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6b90: 64 62 5f 66 69 6c 65 6e 61 6d 65 5f 62 79 74 65  db_filename_byte
6ba0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
6bb0: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 62 4e  _sql, ToUTF8(dbN
6bc0: 61 6d 65 29 29 2c 20 2d 31 29 3b 0d 0a 20 20 20  ame)), -1);..   
6bd0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
6be0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
6bf0: 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73 74 72   Open(string str
6c00: 46 69 6c 65 6e 61 6d 65 2c 20 73 74 72 69 6e 67  Filename, string
6c10: 20 76 66 73 4e 61 6d 65 2c 20 53 51 4c 69 74 65   vfsName, SQLite
6c20: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
6c30: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c  connectionFlags,
6c40: 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73   SQLiteOpenFlags
6c50: 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73 2c 20  Enum openFlags, 
6c60: 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c  int maxPoolSize,
6c70: 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a   bool usePool)..
6c80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d      {..      //.
6c90: 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20  .      // NOTE: 
6ca0: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
6cb0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75  connection is cu
6cc0: 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 61 74  rrently open, at
6cd0: 74 65 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20 20  tempt to..      
6ce0: 2f 2f 20 20 20 20 20 20 20 63 6c 6f 73 65 20 69  //       close i
6cf0: 74 20 6e 6f 77 2e 20 20 54 68 69 73 20 6d 75 73  t now.  This mus
6d00: 74 20 62 65 20 64 6f 6e 65 20 62 65 63 61 75 73  t be done becaus
6d10: 65 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20  e the file name 
6d20: 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  or..      //    
6d30: 20 20 20 6f 74 68 65 72 20 70 61 72 61 6d 65 74     other paramet
6d40: 65 72 73 20 74 68 61 74 20 6d 61 79 20 69 6d 70  ers that may imp
6d50: 61 63 74 20 74 68 65 20 75 6e 64 65 72 6c 79 69  act the underlyi
6d60: 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  ng database..   
6d70: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 6e     //       conn
6d80: 65 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20  ection may have 
6d90: 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20  changed...      
6da0: 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73  //..      if (_s
6db0: 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73  ql != null) Clos
6dc0: 65 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20  e(true);....    
6dd0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e    //..      // N
6de0: 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e  OTE: If the conn
6df0: 65 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 63  ection was not c
6e00: 6c 6f 73 65 64 20 73 75 63 63 65 73 73 66 75 6c  losed successful
6e10: 6c 79 2c 20 74 68 72 6f 77 20 61 6e 0d 0a 20 20  ly, throw an..  
6e20: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 63      //       exc
6e30: 65 70 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20  eption now...   
6e40: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20     //..      if 
6e50: 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a  (_sql != null)..
6e60: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
6e70: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
6e80: 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20  ion("connection 
6e90: 68 61 6e 64 6c 65 20 69 73 20 73 74 69 6c 6c 20  handle is still 
6ea0: 61 63 74 69 76 65 22 29 3b 0d 0a 0d 0a 20 20 20  active");....   
6eb0: 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73     _usePool = us
6ec0: 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66  ePool;..      _f
6ed0: 69 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c  ileName = strFil
6ee0: 65 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 5f 66  ename;..      _f
6ef0: 6c 61 67 73 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  lags = connectio
6f00: 6e 46 6c 61 67 73 3b 0d 0a 0d 0a 20 20 20 20 20  nFlags;....     
6f10: 20 69 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20   if (usePool).. 
6f20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6f30: 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e  _sql = SQLiteCon
6f40: 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f  nectionPool.Remo
6f50: 76 65 28 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20  ve(strFilename, 
6f60: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74  maxPoolSize, out
6f70: 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d   _poolVersion);.
6f80: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
6f90: 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68  eConnection.OnCh
6fa0: 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20  anged(null, new 
6fb0: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
6fc0: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
6fd0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
6fe0: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4f 70 65 6e  onEventType.Open
6ff0: 65 64 46 72 6f 6d 50 6f 6f 6c 2c 20 6e 75 6c 6c  edFromPool, null
7000: 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
7010: 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c       null, null,
7020: 20 5f 73 71 6c 2c 20 73 74 72 46 69 6c 65 6e 61   _sql, strFilena
7030: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
7040: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7050: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c  typeof(SQLite3),
7060: 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 76 66   strFilename, vf
7070: 73 4e 61 6d 65 2c 20 63 6f 6e 6e 65 63 74 69 6f  sName, connectio
7080: 6e 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20  nFlags,..       
7090: 20 20 20 20 20 6f 70 65 6e 46 6c 61 67 73 2c 20       openFlags, 
70a0: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 75 73 65  maxPoolSize, use
70b0: 50 6f 6f 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69  Pool, _poolVersi
70c0: 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23 69 66 20 21  on }));....#if !
70d0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
70e0: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
70f0: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63  ON..        Trac
7100: 65 2e 57 72 69 74 65 4c 69 6e 65 28 55 6e 73 61  e.WriteLine(Unsa
7110: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7120: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
7130: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
7140: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
7150: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
7160: 20 20 20 20 22 4f 70 65 6e 20 28 50 6f 6f 6c 29      "Open (Pool)
7170: 3a 20 7b 30 7d 22 2c 20 48 61 6e 64 6c 65 54 6f  : {0}", HandleTo
7180: 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e  String()));..#en
7190: 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  dif..      }....
71a0: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
71b0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
71c0: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
71d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
71e0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
71f0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
7200: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
7210: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
7220: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
7230: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
7240: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 49 6e   {..          In
7250: 74 50 74 72 20 64 62 20 3d 20 49 6e 74 50 74 72  tPtr db = IntPtr
7260: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
7270: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
7280: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
7290: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
72a0: 20 20 20 20 20 20 20 20 69 6e 74 20 65 78 74 46          int extF
72b0: 75 6e 63 73 20 3d 20 28 28 63 6f 6e 6e 65 63 74  uncs = ((connect
72c0: 69 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74  ionFlags & SQLit
72d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
72e0: 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63  .NoExtensionFunc
72f0: 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74 65  tions) != SQLite
7300: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7310: 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74  NoExtensionFunct
7320: 69 6f 6e 73 29 20 3f 20 31 20 3a 20 30 3b 0d 0a  ions) ? 1 : 0;..
7330: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
7340: 65 78 74 46 75 6e 63 73 20 21 3d 20 30 29 0d 0a  extFuncs != 0)..
7350: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7360: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
7370: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7380: 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e  .sqlite3_open_in
7390: 74 65 72 6f 70 28 54 6f 55 54 46 38 28 73 74 72  terop(ToUTF8(str
73a0: 46 69 6c 65 6e 61 6d 65 29 2c 20 54 6f 55 54 46  Filename), ToUTF
73b0: 38 28 76 66 73 4e 61 6d 65 29 2c 20 6f 70 65 6e  8(vfsName), open
73c0: 46 6c 61 67 73 2c 20 65 78 74 46 75 6e 63 73 2c  Flags, extFuncs,
73d0: 20 72 65 66 20 64 62 29 3b 0d 0a 20 20 20 20 20   ref db);..     
73e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
73f0: 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a    else..#endif..
7400: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7410: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
7420: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7430: 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32  .sqlite3_open_v2
7440: 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e  (ToUTF8(strFilen
7450: 61 6d 65 29 2c 20 72 65 66 20 64 62 2c 20 6f 70  ame), ref db, op
7460: 65 6e 46 6c 61 67 73 2c 20 54 6f 55 54 46 38 28  enFlags, ToUTF8(
7470: 76 66 73 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20  vfsName));..    
7480: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
7490: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
74a0: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
74b0: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72  ON..          Tr
74c0: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55 6e  ace.WriteLine(Un
74d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
74e0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
74f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43  .              C
7500: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
7510: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
7520: 20 20 20 20 20 20 20 20 20 20 22 4f 70 65 6e 3a            "Open:
7530: 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65   {0}", db));..#e
7540: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
7550: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
7560: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
7570: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7580: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c  xception(n, null
7590: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73  );..          _s
75a0: 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  ql = new SQLiteC
75b0: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28  onnectionHandle(
75c0: 64 62 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20 20  db, true);..    
75d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 6c      }..        l
75e0: 6f 63 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a 20  ock (_sql) { /* 
75f0: 48 41 43 4b 3a 20 46 6f 72 63 65 20 74 68 65 20  HACK: Force the 
7600: 53 79 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65 20  SyncBlock to be 
7610: 22 63 72 65 61 74 65 64 22 20 6e 6f 77 2e 20 2a  "created" now. *
7620: 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  / }....        S
7630: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
7640: 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20  OnChanged(null, 
7650: 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  new ConnectionEv
7660: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
7670: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
7680: 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
7690: 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  NewCriticalHandl
76a0: 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  e, null,..      
76b0: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
76c0: 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74  , null, _sql, st
76d0: 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f  rFilename, new o
76e0: 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20  bject[] {..     
76f0: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51         typeof(SQ
7700: 4c 69 74 65 33 29 2c 20 73 74 72 46 69 6c 65 6e  Lite3), strFilen
7710: 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 63 6f  ame, vfsName, co
7720: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a  nnectionFlags,..
7730: 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e              open
7740: 46 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69  Flags, maxPoolSi
7750: 7a 65 2c 20 75 73 65 50 6f 6f 6c 20 7d 29 29 3b  ze, usePool }));
7760: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
7770: 20 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74     // Bind funct
7780: 69 6f 6e 73 20 74 6f 20 74 68 69 73 20 63 6f 6e  ions to this con
7790: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79  nection.  If any
77a0: 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69   previous functi
77b0: 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20  ons of the same 
77c0: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77  name..      // w
77d0: 65 72 65 20 61 6c 72 65 61 64 79 20 62 6f 75 6e  ere already boun
77e0: 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20  d, then the new 
77f0: 62 69 6e 64 69 6e 67 73 20 72 65 70 6c 61 63 65  bindings replace
7800: 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20   the old...     
7810: 20 69 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e   if ((connection
7820: 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  Flags & SQLiteCo
7830: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
7840: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 20 21  BindFunctions) !
7850: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7860: 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75  onFlags.NoBindFu
7870: 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  nctions)..      
7880: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
7890: 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e  (_functions == n
78a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
78b0: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d      _functions =
78c0: 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
78d0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
78e0: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
78f0: 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20  unction>();.... 
7900: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
7910: 20 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 53   (KeyValuePair<S
7920: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
7930: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
7940: 6e 63 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20 20  nction> pair..  
7950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7960: 69 6e 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  in SQLiteFunctio
7970: 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28  n.BindFunctions(
7980: 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e  this, connection
7990: 46 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  Flags))..       
79a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
79b0: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 70      _functions[p
79c0: 61 69 72 2e 4b 65 79 5d 20 3d 20 70 61 69 72 2e  air.Key] = pair.
79d0: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
79e0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
79f0: 20 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75 74        SetTimeout
7a00: 28 30 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e 4b  (0);..      GC.K
7a10: 65 65 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b 0d  eepAlive(_sql);.
7a20: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
7a30: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7a40: 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29  void ClearPool()
7a50: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
7a60: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
7a70: 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66  ool.ClearPool(_f
7a80: 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d  ileName);..    }
7a90: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
7aa0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
7ab0: 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b  untPool()..    {
7ac0: 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69 6f  ..        Dictio
7ad0: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74  nary<string, int
7ae0: 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b  > counts = null;
7af0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70  ..        int op
7b00: 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20  enCount = 0;..  
7b10: 20 20 20 20 20 20 69 6e 74 20 63 6c 6f 73 65 43        int closeC
7b20: 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ount = 0;..     
7b30: 20 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e     int totalCoun
7b40: 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  t = 0;....      
7b50: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
7b60: 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73  onPool.GetCounts
7b70: 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  (_fileName,..   
7b80: 20 20 20 20 20 20 20 20 20 72 65 66 20 63 6f 75           ref cou
7b90: 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f 75  nts, ref openCou
7ba0: 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f 75  nt, ref closeCou
7bb0: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
7bc0: 20 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74 29   ref totalCount)
7bd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
7be0: 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d  urn totalCount;.
7bf0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
7c00: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
7c10: 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28  void SetTimeout(
7c20: 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d  int nTimeoutMS).
7c30: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e  .    {..      In
7c40: 74 50 74 72 20 64 62 20 3d 20 5f 73 71 6c 3b 0d  tPtr db = _sql;.
7c50: 0a 20 20 20 20 20 20 69 66 20 28 64 62 20 3d 3d  .      if (db ==
7c60: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 74 68   IntPtr.Zero) th
7c70: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
7c80: 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e  ception("no conn
7c90: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76  ection handle av
7ca0: 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20  ailable");..    
7cb0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
7cc0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
7cd0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7ce0: 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64  3_busy_timeout(d
7cf0: 62 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d  b, nTimeoutMS);.
7d00: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
7d10: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
7d20: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
7d30: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
7d40: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
7d50: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7d60: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7d70: 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69  e bool Step(SQLi
7d80: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
7d90: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7da0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
7db0: 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d  n;..      Random
7dc0: 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20   rnd = null;..  
7dd0: 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74 69      uint startti
7de0: 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72  ck = (uint)Envir
7df0: 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74  onment.TickCount
7e00: 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 74 69  ;..      uint ti
7e10: 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29 28 73  meout = (uint)(s
7e20: 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f  tmt._command._co
7e30: 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31  mmandTimeout * 1
7e40: 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 52  000);....      R
7e50: 65 73 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28  esetCancelCount(
7e60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c  );....      whil
7e70: 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20  e (true)..      
7e80: 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  {..        try..
7e90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7ea0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
7eb0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
7ec0: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
7ed0: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
7ee0: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
7ef0: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
7f00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6e    {..          n
7f10: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7f20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
7f30: 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tep(stmt._sqlite
7f40: 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20  _stmt);..       
7f50: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
7f60: 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72   (ShouldThrowFor
7f70: 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20  Cancel())..     
7f80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7f90: 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69    if ((n == SQLi
7fa0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
7fb0: 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
7fc0: 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65      (n == SQLite
7fd0: 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c  ErrorCode.Row) |
7fe0: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
7ff0: 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45     (n == SQLiteE
8000: 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d  rrorCode.Done)).
8010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8030: 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  n = SQLiteErrorC
8040: 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a  ode.Interrupt;..
8050: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
8070: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
8080: 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b  eption(n, null);
8090: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
80a0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
80b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
80c0: 49 6e 74 65 72 72 75 70 74 29 20 72 65 74 75 72  Interrupt) retur
80d0: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
80e0: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
80f0: 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20  eErrorCode.Row) 
8100: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
8110: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
8120: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44  QLiteErrorCode.D
8130: 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61 6c 73  one) return fals
8140: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
8150: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
8160: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
8170: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8180: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8190: 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   r;....         
81a0: 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63 63   // An error occ
81b0: 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74 20 74  urred, attempt t
81c0: 6f 20 72 65 73 65 74 20 74 68 65 20 73 74 61 74  o reset the stat
81d0: 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20 72  ement.  If the r
81e0: 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65 63 61  eset worked beca
81f0: 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  use the..       
8200: 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68 61 73     // schema has
8210: 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74 72 79   changed, re-try
8220: 20 74 68 65 20 73 74 65 70 20 61 67 61 69 6e 2e   the step again.
8230: 20 20 49 66 20 69 74 20 65 72 72 6f 72 65 64 20    If it errored 
8240: 6f 75 72 20 62 65 63 61 75 73 65 20 74 68 65 20  our because the 
8250: 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..      
8260: 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64      // is locked
8270: 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65 74 72  , then keep retr
8280: 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65 20 63  ying until the c
8290: 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f  ommand timeout o
82a0: 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccurs...        
82b0: 20 20 72 20 3d 20 52 65 73 65 74 28 73 74 6d 74    r = Reset(stmt
82c0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
82d0: 69 66 20 28 72 20 3d 3d 20 53 51 4c 69 74 65 45  if (r == SQLiteE
82e0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
82f0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
8300: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
8310: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
8320: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
8330: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28 72       else if ((r
8340: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
8350: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20  ode.Locked || r 
8360: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
8370: 64 65 2e 42 75 73 79 29 20 26 26 20 73 74 6d 74  de.Busy) && stmt
8380: 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c  ._command != nul
8390: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
83a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
83b0: 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20  Keep trying..   
83c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e 64           if (rnd
83d0: 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72   == null) // Fir
83e0: 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e  st time we've en
83f0: 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f  countered the lo
8400: 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
8410: 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64    rnd = new Rand
8420: 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  om();....       
8430: 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65       // If we've
8440: 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63 6f   exceeded the co
8450: 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c  mmand's timeout,
8460: 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68 72   give up and thr
8470: 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20  ow an error..   
8480: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75 69           if ((ui
8490: 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54  nt)Environment.T
84a0: 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74  ickCount - start
84b0: 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d  tick > timeout).
84c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
84d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
84e0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
84f0: 63 65 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61  ception(r, GetLa
8500: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
8510: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8520: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
8530: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8540: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74             // Ot
8550: 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f  herwise sleep fo
8560: 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e  r a random amoun
8570: 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20  t of time up to 
8580: 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20  150ms..         
8590: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65       System.Thre
85a0: 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65  ading.Thread.Sle
85b0: 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31  ep(rnd.Next(1, 1
85c0: 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  50));..         
85d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
85e0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
85f0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
8600: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8610: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20 74  >..    /// Has t
8620: 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73 74  he sqlite3_errst
8630: 72 28 29 20 63 6f 72 65 20 6c 69 62 72 61 72 79  r() core library
8640: 20 41 50 49 20 62 65 65 6e 20 63 68 65 63 6b 65   API been checke
8650: 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20  d for yet?..    
8660: 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20 69 74  /// If so, is it
8670: 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f   present?..    /
8680: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
8690: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
86a0: 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 65 72 72  c bool? have_err
86b0: 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  str = null;.... 
86c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
86d0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
86e0: 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  s the error mess
86f0: 61 67 65 20 66 6f 72 20 74 68 65 20 73 70 65 63  age for the spec
8700: 69 66 69 65 64 20 53 51 4c 69 74 65 20 72 65 74  ified SQLite ret
8710: 75 72 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d 0a  urn code using..
8720: 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69      /// the sqli
8730: 74 65 33 5f 65 72 72 73 74 72 28 29 20 66 75 6e  te3_errstr() fun
8740: 63 74 69 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20 62  ction, falling b
8750: 61 63 6b 20 74 6f 20 74 68 65 20 69 6e 74 65 72  ack to the inter
8760: 6e 61 6c 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20 20  nal lookup..    
8770: 2f 2f 2f 20 74 61 62 6c 65 20 69 66 20 6e 65 63  /// table if nec
8780: 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f  essary...    ///
8790: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
87a0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
87b0: 3d 22 72 63 22 3e 54 68 65 20 53 51 4c 69 74 65  ="rc">The SQLite
87c0: 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 3c 2f 70   return code.</p
87d0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
87e0: 72 65 74 75 72 6e 73 3e 54 68 65 20 65 72 72 6f  returns>The erro
87f0: 72 20 6d 65 73 73 61 67 65 20 6f 72 20 6e 75 6c  r message or nul
8800: 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62  l if it cannot b
8810: 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e  e found.</return
8820: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
8830: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
8840: 65 74 45 72 72 6f 72 53 74 72 69 6e 67 28 53 51  etErrorString(SQ
8850: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
8860: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8870: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
8880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
8890: 20 28 68 61 76 65 5f 65 72 72 73 74 72 20 3d 3d   (have_errstr ==
88a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
88b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
88c0: 20 20 20 20 20 20 20 69 6e 74 20 76 65 72 73 69         int versi
88d0: 6f 6e 4e 75 6d 62 65 72 20 3d 20 53 51 4c 69 74  onNumber = SQLit
88e0: 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d  eVersionNumber;.
88f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8900: 20 68 61 76 65 5f 65 72 72 73 74 72 20 3d 20 28   have_errstr = (
8910: 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d  versionNumber >=
8920: 20 33 30 30 37 30 31 35 29 3b 0d 0a 20 20 20 20   3007015);..    
8930: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8940: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 62 6f           if ((bo
8950: 6f 6c 29 68 61 76 65 5f 65 72 72 73 74 72 29 0d  ol)have_errstr).
8960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8980: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
8990: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
89a0: 2e 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28  .sqlite3_errstr(
89b0: 72 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rc);....        
89c0: 20 20 20 20 20 20 20 20 69 66 20 28 70 74 72 20          if (ptr 
89d0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
89e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
89f0: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
8a00: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
8a10: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
8a20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
8a30: 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 69  arshal.PtrToStri
8a40: 6e 67 41 6e 73 69 28 70 74 72 29 3b 0d 0a 23 65  ngAnsi(ptr);..#e
8a50: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
8a60: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8a70: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72  UTF8ToString(ptr
8a80: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8aa0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
8ab0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
8ac0: 20 20 20 20 20 63 61 74 63 68 20 28 45 6e 74 72       catch (Entr
8ad0: 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78  yPointNotFoundEx
8ae0: 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  ception)..      
8af0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8b00: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
8b10: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
8b20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c        return Fal
8b30: 6c 62 61 63 6b 47 65 74 45 72 72 6f 72 53 74 72  lbackGetErrorStr
8b40: 69 6e 67 28 72 63 29 3b 0d 0a 20 20 20 20 7d 0d  ing(rc);..    }.
8b50: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
8b60: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61  ary>..    /// Ha
8b70: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
8b80: 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 29 20 63 6f  mt_readonly() co
8b90: 72 65 20 6c 69 62 72 61 72 79 20 41 50 49 20 62  re library API b
8ba0: 65 65 6e 20 63 68 65 63 6b 65 64 20 66 6f 72 20  een checked for 
8bb0: 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66  yet?..    /// If
8bc0: 20 73 6f 2c 20 69 73 20 69 74 20 70 72 65 73 65   so, is it prese
8bd0: 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt?..    /// </s
8be0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
8bf0: 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
8c00: 3f 20 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64  ? have_stmt_read
8c10: 6f 6e 6c 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  only = null;....
8c20: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8c30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
8c40: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
8c50: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 74 61  he specified sta
8c60: 74 65 6d 65 6e 74 20 69 73 20 72 65 61 64 2d 6f  tement is read-o
8c70: 6e 6c 79 20 69 6e 20 6e 61 74 75 72 65 2e 0d 0a  nly in nature...
8c80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8c90: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
8ca0: 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54  am name="stmt">T
8cb0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  he statement to 
8cc0: 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  check.</param>..
8cd0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
8ce0: 3e 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74  >True if the out
8cf0: 65 72 20 71 75 65 72 79 20 69 73 20 72 65 61 64  er query is read
8d00: 2d 6f 6e 6c 79 2e 3c 2f 72 65 74 75 72 6e 73 3e  -only.</returns>
8d10: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8d20: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 52  verride bool IsR
8d30: 65 61 64 4f 6e 6c 79 28 0d 0a 20 20 20 20 20 20  eadOnly(..      
8d40: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
8d50: 74 20 73 74 6d 74 0d 0a 20 20 20 20 20 20 20 20  t stmt..        
8d60: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8d70: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
8d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
8d90: 20 28 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64   (have_stmt_read
8da0: 6f 6e 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  only == null).. 
8db0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
8dd0: 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20  t versionNumber 
8de0: 3d 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  = SQLiteVersionN
8df0: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
8e00: 20 20 20 20 20 20 20 20 68 61 76 65 5f 73 74 6d          have_stm
8e10: 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 28 76 65  t_readonly = (ve
8e20: 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33  rsionNumber >= 3
8e30: 30 30 37 30 30 34 29 3b 0d 0a 20 20 20 20 20 20  007004);..      
8e40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8e50: 20 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c         if ((bool
8e60: 29 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f  )have_stmt_reado
8e70: 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nly)..          
8e80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8e90: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
8ea0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8eb0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65 61  sqlite3_stmt_rea
8ec0: 64 6f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  donly(..        
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74              stmt
8ee0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 20 21  ._sqlite_stmt) !
8ef0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
8f00: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
8f10: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
8f20: 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e  ntryPointNotFoun
8f30: 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20  dException)..   
8f40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8f50: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
8f60: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
8f70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8f80: 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 45 3a 20  false; /* NOTE: 
8f90: 55 6e 6b 6e 6f 77 6e 2c 20 61 73 73 75 6d 65 20  Unknown, assume 
8fa0: 66 61 6c 73 65 2e 20 2a 2f 0d 0a 20 20 20 20 7d  false. */..    }
8fb0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
8fc0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
8fd0: 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28  ErrorCode Reset(
8fe0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
8ff0: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
9000: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
9010: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
9020: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
9030: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
9040: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9050: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
9060: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
9070: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a  _stmt);..#else..
9080: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
9090: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
90a0: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
90b0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
90c0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
90d0: 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d   // If the schem
90e0: 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61  a changed, try a
90f0: 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69 74  nd re-prepare it
9100: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
9110: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9120: 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20  .Schema)..      
9130: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65  {..        // Re
9140: 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73  create a dummy s
9150: 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
9160: 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20 6e    string str = n
9170: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 75 73  ull;..        us
9180: 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74 65  ing (SQLiteState
9190: 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61  ment tmp = Prepa
91a0: 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73  re(null, stmt._s
91b0: 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c  qlStatement, nul
91c0: 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f  l, (uint)(stmt._
91d0: 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64  command._command
91e0: 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c  Timeout * 1000),
91f0: 20 72 65 66 20 73 74 72 29 29 0d 0a 20 20 20 20   ref str))..    
9200: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9210: 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65   // Finalize the
9220: 20 65 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d   existing statem
9230: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ent..          s
9240: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9250: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
9260: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69         // Reassi
9270: 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65  gn a new stateme
9280: 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  nt pointer to th
9290: 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20  e old statement 
92a0: 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74 65  and clear the te
92b0: 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20  mporary one..   
92c0: 20 20 20 20 20 20 20 69 66 20 28 74 6d 70 20 21         if (tmp !
92d0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
92e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
92f0: 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73    stmt._sqlite_s
9300: 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74  tmt = tmp._sqlit
9310: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
9320: 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65       tmp._sqlite
9330: 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  _stmt = null;.. 
9340: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9350: 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70          // Reapp
9360: 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20  ly parameters.. 
9370: 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69           stmt.Bi
9380: 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d  ndParameters();.
9390: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
93a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
93b0: 65 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f  eErrorCode.Unkno
93c0: 77 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73  wn; // Reset was
93d0: 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61   OK, with schema
93e0: 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d   change..      }
93f0: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ..      else if 
9400: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
9410: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
9420: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
9430: 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20  Code.Busy)..    
9440: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d      return n;...
9450: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
9460: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
9470: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72  Ok)..        thr
9480: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
9490: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
94a0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
94b0: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f      return n; //
94c0: 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f   We reset OK, no
94d0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d   schema changes.
94e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
94f0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9500: 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72  string GetLastEr
9510: 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ror()..    {..  
9520: 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
9530: 4c 61 73 74 45 72 72 6f 72 28 6e 75 6c 6c 29 3b  LastError(null);
9540: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
9550: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
9560: 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45   string GetLastE
9570: 72 72 6f 72 28 73 74 72 69 6e 67 20 64 65 66 56  rror(string defV
9580: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
9590: 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73        string res
95a0: 75 6c 74 20 3d 20 53 51 4c 69 74 65 42 61 73 65  ult = SQLiteBase
95b0: 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28 5f 73  .GetLastError(_s
95c0: 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ql, _sql);..    
95d0: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
95e0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73  sNullOrEmpty(res
95f0: 75 6c 74 29 29 20 72 65 73 75 6c 74 20 3d 20 64  ult)) result = d
9600: 65 66 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  efValue;..      
9610: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
9620: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
9630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9690: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 51 75  ..    #region Qu
96a0: 65 72 79 20 44 69 61 67 6e 6f 73 74 69 63 73 20  ery Diagnostics 
96b0: 53 75 70 70 6f 72 74 0d 0a 23 69 66 20 21 50 4c  Support..#if !PL
96c0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
96d0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f 2f  AMEWORK..    ///
96e0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
96f0: 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69  /// This field i
9700: 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74  s used to keep t
9710: 72 61 63 6b 20 6f 66 20 77 68 65 74 68 65 72 20  rack of whether 
9720: 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20  or not the..    
9730: 2f 2f 2f 20 22 53 51 4c 69 74 65 5f 46 6f 72 63  /// "SQLite_Forc
9740: 65 4c 6f 67 50 72 65 70 61 72 65 22 20 65 6e 76  eLogPrepare" env
9750: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
9760: 65 20 68 61 73 20 62 65 65 6e 20 71 75 65 72 69  e has been queri
9770: 65 64 2e 20 20 49 66 20 73 6f 2c 0d 0a 20 20 20  ed.  If so,..   
9780: 20 2f 2f 2f 20 69 74 20 77 69 6c 6c 20 6f 6e 6c   /// it will onl
9790: 79 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  y be non-zero if
97a0: 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74   the environment
97b0: 20 76 61 72 69 61 62 6c 65 20 77 61 73 20 70 72   variable was pr
97c0: 65 73 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  esent...    /// 
97d0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
97e0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
97f0: 6f 6f 6c 3f 20 66 6f 72 63 65 4c 6f 67 50 72 65  ool? forceLogPre
9800: 70 61 72 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  pare = null;....
9810: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
9820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9870: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
9880: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9890: 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
98a0: 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65  all calls to pre
98b0: 70 61 72 65 20 61 20 53 51 4c 20 71 75 65 72 79  pare a SQL query
98c0: 20 77 69 6c 6c 20 62 65 20 6c 6f 67 67 65 64 2c   will be logged,
98d0: 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 67 61 72 64  ..    /// regard
98e0: 6c 65 73 73 20 6f 66 20 74 68 65 20 66 6c 61 67  less of the flag
98f0: 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69  s for the associ
9900: 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  ated connection.
9910: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
9920: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
9930: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
9940: 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6c 6f 67   Non-zero to log
9950: 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72   all calls to pr
9960: 65 70 61 72 65 20 61 20 53 51 4c 20 71 75 65 72  epare a SQL quer
9970: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  y...    /// </re
9980: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76  turns>..    priv
9990: 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
99a0: 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28  ForceLogPrepare(
99b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
99c0: 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
99d0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
99e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 6f            if (fo
99f0: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 3d  rceLogPrepare ==
9a00: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9a10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9a20: 20 20 20 20 20 20 20 69 66 20 28 55 6e 73 61 66         if (Unsaf
9a30: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47  eNativeMethods.G
9a40: 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65 28 0d  etSettingValue(.
9a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9a60: 20 20 20 20 20 20 20 20 20 22 53 51 4c 69 74 65           "SQLite
9a70: 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65  _ForceLogPrepare
9a80: 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c 6c  ", null) != null
9a90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9aa0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9ab0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 63 65 4c            forceL
9ac0: 6f 67 50 72 65 70 61 72 65 20 3d 20 74 72 75 65  ogPrepare = true
9ad0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9ae0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
9af0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61     forceLogPrepa
9b30: 72 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  re = false;..   
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9b50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
9b70: 75 72 6e 20 28 62 6f 6f 6c 29 66 6f 72 63 65 4c  urn (bool)forceL
9b80: 6f 67 50 72 65 70 61 72 65 3b 0d 0a 20 20 20 20  ogPrepare;..    
9b90: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
9ba0: 6e 64 69 66 0d 0a 20 20 20 20 23 65 6e 64 72 65  ndif..    #endre
9bb0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
9bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9c20: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9c30: 72 69 64 65 20 53 51 4c 69 74 65 53 74 61 74 65  ride SQLiteState
9c40: 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c  ment Prepare(SQL
9c50: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e  iteConnection cn
9c60: 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c  n, string strSql
9c70: 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  , SQLiteStatemen
9c80: 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74  t previous, uint
9c90: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20   timeoutMS, ref 
9ca0: 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e  string strRemain
9cb0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9cc0: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
9cd0: 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c  llOrEmpty(strSql
9ce0: 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ))..      {..   
9cf0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
9d00: 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65   // NOTE: SQLite
9d10: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
9d20: 74 20 74 68 65 20 63 6f 6e 63 65 70 74 20 6f 66  t the concept of
9d30: 20 73 65 70 61 72 61 74 65 20 73 63 68 65 6d 61   separate schema
9d40: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  s..        //   
9d50: 20 20 20 20 69 6e 20 6f 6e 65 20 64 61 74 61 62      in one datab
9d60: 61 73 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  ase; therefore, 
9d70: 72 65 6d 6f 76 65 20 74 68 65 20 62 61 73 65 20  remove the base 
9d80: 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20  schema name..   
9d90: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73       //       us
9da0: 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74  ed to smooth int
9db0: 65 67 72 61 74 69 6f 6e 20 77 69 74 68 20 74 68  egration with th
9dc0: 65 20 62 61 73 65 20 2e 4e 45 54 20 46 72 61 6d  e base .NET Fram
9dd0: 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f  ework..        /
9de0: 2f 20 20 20 20 20 20 20 64 61 74 61 20 63 6c 61  /       data cla
9df0: 73 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sses...        /
9e00: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
9e10: 67 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  g baseSchemaName
9e20: 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29   = (cnn != null)
9e30: 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65   ? cnn._baseSche
9e40: 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a  maName : null;..
9e50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 53  ..        if (!S
9e60: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
9e70: 70 74 79 28 62 61 73 65 53 63 68 65 6d 61 4e 61  pty(baseSchemaNa
9e80: 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  me))..        {.
9e90: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71  .          strSq
9ea0: 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61  l = strSql.Repla
9eb0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
9ec0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
9ed0: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
9ee0: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
9ef0: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
9f00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9f10: 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62 61 73 65 53   "[{0}].", baseS
9f20: 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69  chemaName), Stri
9f30: 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
9f40: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
9f50: 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28   strSql.Replace(
9f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9f70: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9f80: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
9f90: 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76  (CultureInfo.Inv
9fa0: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  ariantCulture,..
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
9fc0: 30 7d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61  0}.", baseSchema
9fd0: 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d  Name), String.Em
9fe0: 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  pty);..        }
9ff0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
a000: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
a010: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 20 3d  ionFlags flags =
a020: 0d 0a 20 20 20 20 20 20 20 20 20 20 28 63 6e 6e  ..          (cnn
a030: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e   != null) ? cnn.
a040: 46 6c 61 67 73 20 3a 20 53 51 4c 69 74 65 43 6f  Flags : SQLiteCo
a050: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65  nnectionFlags.De
a060: 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  fault;....      
a070: 69 66 20 28 0d 0a 23 69 66 20 21 50 4c 41 54 46  if (..#if !PLATF
a080: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
a090: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
a0a0: 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28  ForceLogPrepare(
a0b0: 29 20 7c 7c 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ) ||..#endif..  
a0c0: 20 20 20 20 20 20 20 20 28 28 66 6c 61 67 73 20          ((flags 
a0d0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
a0e0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70 61  onFlags.LogPrepa
a0f0: 72 65 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  re) == SQLiteCon
a100: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
a110: 50 72 65 70 61 72 65 29 29 0d 0a 20 20 20 20 20  Prepare))..     
a120: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
a130: 20 28 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c   ((strSql == nul
a140: 6c 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65  l) || (strSql.Le
a150: 6e 67 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73  ngth == 0) || (s
a160: 74 72 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e  trSql.Trim().Len
a170: 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20  gth == 0))..    
a180: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
a190: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22  Log.LogMessage("
a1a0: 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68  Preparing {<noth
a1b0: 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20  ing>}...");..   
a1c0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
a1d0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
a1e0: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
a1f0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a200: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
a210: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
a220: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
a230: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
a240: 20 22 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30   "Preparing {{{0
a250: 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29  }}}...", strSql)
a260: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  );..      }.... 
a270: 20 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74       IntPtr stmt
a280: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
a290: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74  .      IntPtr pt
a2a0: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
a2b0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
a2c0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  = 0;..      SQLi
a2d0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
a2e0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a2f0: 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69  Schema;..      i
a300: 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d  nt retries = 0;.
a310: 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 78 69 6d  .      int maxim
a320: 75 6d 52 65 74 72 69 65 73 20 3d 20 28 63 6e 6e  umRetries = (cnn
a330: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e   != null) ? cnn.
a340: 5f 70 72 65 70 61 72 65 52 65 74 72 69 65 73 20  _prepareRetries 
a350: 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  : SQLiteConnecti
a360: 6f 6e 2e 44 65 66 61 75 6c 74 50 72 65 70 61 72  on.DefaultPrepar
a370: 65 52 65 74 72 69 65 73 3b 0d 0a 20 20 20 20 20  eRetries;..     
a380: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
a390: 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20  F8(strSql);..   
a3a0: 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 64 65     string typede
a3b0: 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  fs = null;..    
a3c0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
a3d0: 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  t cmd = null;.. 
a3e0: 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20       Random rnd 
a3f0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75  = null;..      u
a400: 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20  int starttick = 
a410: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
a420: 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a  t.TickCount;....
a430: 20 20 20 20 20 20 52 65 73 65 74 43 61 6e 63 65        ResetCance
a440: 6c 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20  lCount();....   
a450: 20 20 20 47 43 48 61 6e 64 6c 65 20 68 61 6e 64     GCHandle hand
a460: 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c  le = GCHandle.Al
a470: 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c 65 54  loc(b, GCHandleT
a480: 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20  ype.Pinned);..  
a490: 20 20 20 20 49 6e 74 50 74 72 20 70 73 71 6c 20      IntPtr psql 
a4a0: 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50  = handle.AddrOfP
a4b0: 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a  innedObject();..
a4c0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
a4d0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 73 74 61 74  ementHandle stat
a4e0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75  ementHandle = nu
a4f0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a  ll;..      try..
a500: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a510: 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51   while ((n == SQ
a520: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63  LiteErrorCode.Sc
a530: 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c  hema || n == SQL
a540: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63  iteErrorCode.Loc
a550: 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69  ked || n == SQLi
a560: 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79  teErrorCode.Busy
a570: 29 20 26 26 20 72 65 74 72 69 65 73 20 3c 20 6d  ) && retries < m
a580: 61 78 69 6d 75 6d 52 65 74 72 69 65 73 29 0d 0a  aximumRetries)..
a590: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a5a0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
a5b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a5c0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
a5d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ...          }..
a5e0: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
a5f0: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
a600: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
a610: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
a620: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a630: 20 20 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72     stmt = IntPtr
a640: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
a650: 20 20 20 20 70 74 72 20 3d 20 49 6e 74 50 74 72      ptr = IntPtr
a660: 2e 5a 65 72 6f 3b 0d 0a 0d 0a 23 69 66 20 21 53  .Zero;....#if !S
a670: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
a680: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20              len 
a690: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
a6a0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
a6b0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a6c0: 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f  3_prepare_intero
a6d0: 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  p(_sql, psql, b.
a6e0: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20  Length - 1, ref 
a6f0: 73 74 6d 74 2c 20 72 65 66 20 70 74 72 2c 20 72  stmt, ref ptr, r
a700: 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ef len);..#else.
a710: 0a 23 69 66 20 55 53 45 5f 50 52 45 50 41 52 45  .#if USE_PREPARE
a720: 5f 56 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _V2..           
a730: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
a740: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a750: 5f 70 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c  _prepare_v2(_sql
a760: 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68  , psql, b.Length
a770: 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20   - 1, ref stmt, 
a780: 72 65 66 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65  ref ptr);..#else
a790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
a7a0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
a7b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72  thods.sqlite3_pr
a7c0: 65 70 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c  epare(_sql, psql
a7d0: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
a7e0: 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74  ref stmt, ref pt
a7f0: 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  r);..#endif..   
a800: 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d           len = -
a810: 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  1;..#endif....#i
a820: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
a830: 30 20 26 26 20 54 52 41 43 45 5f 53 54 41 54 45  0 && TRACE_STATE
a840: 4d 45 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20  MENT..          
a850: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
a860: 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
a870: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
a880: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
a890: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
a8a0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
a8b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a8c0: 20 20 22 50 72 65 70 61 72 65 20 28 7b 30 7d 29    "Prepare ({0})
a8d0: 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29  : {1}", n, stmt)
a8e0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
a8f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
a900: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
a910: 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73 74 6d 74  ode.Ok) && (stmt
a920: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
a930: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
a940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a950: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e  if (statementHan
a960: 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 73 74 61  dle != null) sta
a970: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2e 44 69 73  tementHandle.Dis
a980: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
a990: 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
a9a0: 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c  Handle = new SQL
a9b0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
a9c0: 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 3b 0d  le(_sql, stmt);.
a9d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a9e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a9f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61           if (sta
aa00: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20  tementHandle != 
aa10: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
aa20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
aa30: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
aa40: 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
aa50: 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
aa60: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
aa70: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
aa80: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79  onnectionEventTy
aa90: 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61  pe.NewCriticalHa
aaa0: 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  ndle, null, null
aab0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
aac0: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 73 74 61   null, null, sta
aad0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74  tementHandle, st
aae0: 72 53 71 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  rSql, new object
aaf0: 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
ab00: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
ab10: 65 33 29 2c 20 63 6e 6e 2c 20 73 74 72 53 71 6c  e3), cnn, strSql
ab20: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
ab30: 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a 20 20 20 20  outMS }));..    
ab40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ab50: 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54       if (ShouldT
ab60: 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29  hrowForCancel())
ab70: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ab90: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
aba0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20  orCode.Ok) ||.. 
abb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abc0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
abd0: 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a  orCode.Row) ||..
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abf0: 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72    (n == SQLiteEr
ac00: 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a  rorCode.Done))..
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
ac20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ac30: 20 20 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72     n = SQLiteErr
ac40: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
ac50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
ac60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ac70: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
ac80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
ac90: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
aca0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
acb0: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
acc0: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
acd0: 72 75 70 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rupt)..         
ace0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
acf0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
ad00: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
ad10: 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20  de.Schema)..    
ad20: 20 20 20 20 20 20 20 20 72 65 74 72 69 65 73 2b          retries+
ad30: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  +;..          el
ad40: 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
ad50: 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
ad60: 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  r)..          {.
ad70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
ad80: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
ad90: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20  GetLastError(), 
ada0: 22 6e 65 61 72 20 5c 22 54 59 50 45 53 5c 22 3a  "near \"TYPES\":
adb0: 20 73 79 6e 74 61 78 20 65 72 72 6f 72 22 2c 20   syntax error", 
adc0: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
add0: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
ade0: 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  se) == 0)..     
adf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ae00: 20 20 20 20 20 20 20 20 69 6e 74 20 70 6f 73 20          int pos 
ae10: 3d 20 73 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66  = strSql.IndexOf
ae20: 28 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  (';');..        
ae30: 20 20 20 20 20 20 69 66 20 28 70 6f 73 20 3d 3d        if (pos ==
ae40: 20 2d 31 29 20 70 6f 73 20 3d 20 73 74 72 53 71   -1) pos = strSq
ae50: 6c 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d  l.Length - 1;...
ae60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
ae70: 79 70 65 64 65 66 73 20 3d 20 73 74 72 53 71 6c  ypedefs = strSql
ae80: 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 70 6f  .Substring(0, po
ae90: 73 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20  s + 1);..       
aea0: 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20         strSql = 
aeb0: 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67  strSql.Substring
aec0: 28 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20  (pos + 1);....  
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52              strR
aee0: 65 6d 61 69 6e 20 3d 20 22 22 3b 0d 0a 0d 0a 20  emain = "";.... 
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
af00: 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20  le (cmd == null 
af10: 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  && strSql.Length
af20: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
af30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
af40: 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72          cmd = Pr
af50: 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71  epare(cnn, strSq
af60: 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d  l, previous, tim
af70: 65 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72 52  eoutMS, ref strR
af80: 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20  emain);..       
af90: 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20           strSql 
afa0: 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20  = strRemain;..  
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
afc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
afd0: 66 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d  f (cmd != null).
afe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aff0: 20 63 6d 64 2e 53 65 74 54 79 70 65 73 28 74 79   cmd.SetTypes(ty
b000: 70 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20  pedefs);....    
b010: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b020: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20   cmd;..         
b030: 20 20 20 7d 0d 0a 23 69 66 20 28 4e 45 54 5f 33     }..#if (NET_3
b040: 35 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e  5 || NET_40 || N
b050: 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31  ET_45 || NET_451
b060: 20 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c 20 4e   || NET_452 || N
b070: 45 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34 36 31  ET_46 || NET_461
b080: 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43  ) && !PLATFORM_C
b090: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
b0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
b0b0: 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e 67 53  e if (_buildingS
b0c0: 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65 20 26  chema == false &
b0d0: 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65  & String.Compare
b0e0: 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c  (GetLastError(),
b0f0: 20 30 2c 20 22 6e 6f 20 73 75 63 68 20 74 61 62   0, "no such tab
b100: 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d 41 22  le: TEMP.SCHEMA"
b110: 2c 20 30 2c 20 32 36 2c 20 53 74 72 69 6e 67 43  , 0, 26, StringC
b120: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
b130: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
b140: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
b150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b160: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22 3b   strRemain = "";
b170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b180: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
b190: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
b1a0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
b1b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51               ISQ
b1d0: 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73  LiteSchemaExtens
b1e0: 69 6f 6e 73 20 65 78 74 20 3d 20 28 28 49 53 65  ions ext = ((ISe
b1f0: 72 76 69 63 65 50 72 6f 76 69 64 65 72 29 53 51  rviceProvider)SQ
b200: 4c 69 74 65 46 61 63 74 6f 72 79 2e 49 6e 73 74  LiteFactory.Inst
b210: 61 6e 63 65 29 2e 47 65 74 53 65 72 76 69 63 65  ance).GetService
b220: 28 74 79 70 65 6f 66 28 49 53 51 4c 69 74 65 53  (typeof(ISQLiteS
b230: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29  chemaExtensions)
b240: 29 20 61 73 20 49 53 51 4c 69 74 65 53 63 68 65  ) as ISQLiteSche
b250: 6d 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d  maExtensions;...
b260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b270: 20 69 66 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c   if (ext != null
b280: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b290: 20 20 20 20 20 65 78 74 2e 42 75 69 6c 64 54 65       ext.BuildTe
b2a0: 6d 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a  mpSchema(cnn);..
b2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b2c0: 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20    while (cmd == 
b2d0: 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c  null && strSql.L
b2e0: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b310: 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63   cmd = Prepare(c
b320: 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76  nn, strSql, prev
b330: 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c  ious, timeoutMS,
b340: 20 72 65 66 20 73 74 72 52 65 6d 61 69 6e 29 3b   ref strRemain);
b350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b360: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
b370: 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20  Remain;..       
b380: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b3a0: 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20  turn cmd;..     
b3b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b3c0: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
b3d0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
b3e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b3f0: 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68      _buildingSch
b400: 65 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ema = false;..  
b410: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b420: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
b430: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
b440: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
b450: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
b460: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
b470: 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  d || n == SQLite
b480: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20  ErrorCode.Busy) 
b490: 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c  // Locked -- del
b4a0: 61 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ay a small amoun
b4b0: 74 20 62 65 66 6f 72 65 20 72 65 74 72 79 69 6e  t before retryin
b4c0: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  g..          {..
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b              // K
b4e0: 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20  eep trying..    
b4f0: 20 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20          if (rnd 
b500: 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73  == null) // Firs
b510: 74 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63  t time we've enc
b520: 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63  ountered the loc
b530: 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  k..             
b540: 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f   rnd = new Rando
b550: 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  m();....        
b560: 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20      // If we've 
b570: 65 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d  exceeded the com
b580: 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20  mand's timeout, 
b590: 67 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f  give up and thro
b5a0: 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20  w an error..    
b5b0: 20 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e          if ((uin
b5c0: 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69  t)Environment.Ti
b5d0: 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74  ckCount - startt
b5e0: 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29  ick > timeoutMS)
b5f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
b600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
b610: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
b620: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
b630: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
b640: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b650: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
b660: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b670: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
b680: 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66  therwise sleep f
b690: 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75  or a random amou
b6a0: 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f  nt of time up to
b6b0: 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20   150ms..        
b6c0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72        System.Thr
b6d0: 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c  eading.Thread.Sl
b6e0: 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20  eep(rnd.Next(1, 
b6f0: 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  150));..        
b700: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b710: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
b720: 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 68 6f  .        if (Sho
b730: 75 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65  uldThrowForCance
b740: 6c 28 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  l())..        {.
b750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
b760: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
b770: 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20  orCode.Ok) ||.. 
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
b790: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
b7a0: 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20  Code.Row) ||..  
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e                (n
b7c0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
b7d0: 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20  ode.Done))..    
b7e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b7f0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 53             n = S
b800: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49  QLiteErrorCode.I
b810: 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20 20 20 20  nterrupt;..     
b820: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b830: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
b840: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
b850: 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  n(n, null);..   
b860: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b870: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
b880: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
b890: 72 75 70 74 29 20 72 65 74 75 72 6e 20 6e 75 6c  rupt) return nul
b8a0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  l;..        if (
b8b0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
b8c0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
b8d0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
b8e0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
b8f0: 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
b900: 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55 54    strRemain = UT
b910: 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20  F8ToString(ptr, 
b920: 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  len);....       
b930: 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61   if (statementHa
b940: 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63 6d  ndle != null) cm
b950: 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74  d = new SQLiteSt
b960: 61 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c  atement(this, fl
b970: 61 67 73 2c 20 73 74 61 74 65 6d 65 6e 74 48 61  ags, statementHa
b980: 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75 62  ndle, strSql.Sub
b990: 73 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71 6c  string(0, strSql
b9a0: 2e 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65 6d  .Length - strRem
b9b0: 61 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72 65  ain.Length), pre
b9c0: 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  vious);....     
b9d0: 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a     return cmd;..
b9e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 66        }..      f
b9f0: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b 0d  inally..      {.
ba00: 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e  .        handle.
ba10: 46 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d  Free();..      }
ba20: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
ba30: 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20  rotected static 
ba40: 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c  void LogBind(SQL
ba50: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
ba60: 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69  le handle, int i
ba70: 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
ba80: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
ba90: 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
baa0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  le;....        S
bab0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
bac0: 61 67 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65  age(UnsafeNative
bad0: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
bae0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
baf0: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
bb00: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
bb20: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
bb30: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
bb40: 20 61 73 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20   as NULL...",.. 
bb50: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
bb60: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 29 29  eIntPtr, index))
bb70: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
bb80: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
bb90: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
bba0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
bbb0: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
bbc0: 69 6e 64 65 78 2c 20 56 61 6c 75 65 54 79 70 65  index, ValueType
bbd0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
bbe0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
bbf0: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
bc00: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
bc10: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
bc20: 73 73 61 67 65 28 55 6e 73 61 66 65 4e 61 74 69  ssage(UnsafeNati
bc30: 76 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  veMethods.String
bc40: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
bc50: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
bc60: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
bc70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
bc80: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
bc90: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
bca0: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
bcb0: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
bcc0: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
bcd0: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
bce0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 2e 47  , index, value.G
bcf0: 65 74 54 79 70 65 28 29 2c 20 76 61 6c 75 65 29  etType(), value)
bd00: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
bd10: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
bd20: 73 74 72 69 6e 67 20 46 6f 72 6d 61 74 44 61 74  string FormatDat
bd30: 65 54 69 6d 65 28 44 61 74 65 54 69 6d 65 20 76  eTime(DateTime v
bd40: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
bd50: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
bd60: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
bd70: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29   StringBuilder()
bd80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 73  ;....        res
bd90: 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65  ult.Append(value
bda0: 2e 54 6f 53 74 72 69 6e 67 28 22 79 79 79 79 2d  .ToString("yyyy-
bdb0: 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46  MM-ddTHH:mm:ss.F
bdc0: 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20 20 20  FFFFFFK"));..   
bdd0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
bde0: 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20  nd(' ');..      
bdf0: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
be00: 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20  value.Kind);..  
be10: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
be20: 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20  end(' ');..     
be30: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
be40: 28 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b 0d 0a  (value.Ticks);..
be50: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
be60: 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67   result.ToString
be70: 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ();..    }....  
be80: 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74    protected stat
be90: 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28  ic void LogBind(
bea0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
beb0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e  andle handle, in
bec0: 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d  t index, DateTim
bed0: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
bee0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
bef0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
bf00: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
bf10: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
bf20: 65 73 73 61 67 65 28 55 6e 73 61 66 65 4e 61 74  essage(UnsafeNat
bf30: 69 76 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  iveMethods.Strin
bf40: 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
bf50: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
bf60: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
bf70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  ,..            "
bf80: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
bf90: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
bfa0: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
bfb0: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
bfc0: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
bfd0: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
bfe0: 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66  r, index, typeof
bff0: 28 44 61 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d  (DateTime), Form
c000: 61 74 44 61 74 65 54 69 6d 65 28 76 61 6c 75 65  atDateTime(value
c010: 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  )));..    }.... 
c020: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
c030: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
c040: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
c050: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
c060: 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  nt index, string
c070: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
c080: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
c090: 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61  andleIntPtr = ha
c0a0: 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
c0b0: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
c0c0: 73 73 61 67 65 28 55 6e 73 61 66 65 4e 61 74 69  ssage(UnsafeNati
c0d0: 76 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  veMethods.String
c0e0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
c0f0: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
c100: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
c110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
c120: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
c130: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
c140: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
c150: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
c160: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
c170: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
c180: 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28  , index, typeof(
c190: 53 74 72 69 6e 67 29 2c 20 28 76 61 6c 75 65 20  String), (value 
c1a0: 21 3d 20 6e 75 6c 6c 29 20 3f 20 76 61 6c 75 65  != null) ? value
c1b0: 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a   : "<null>"));..
c1c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
c1d0: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
c1e0: 6e 67 20 54 6f 48 65 78 61 64 65 63 69 6d 61 6c  ng ToHexadecimal
c1f0: 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
c200: 20 62 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a 20   byte[] array.. 
c210: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
c220: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72  .        if (arr
c230: 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ay == null)..   
c240: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
c250: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
c260: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72   StringBuilder r
c270: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
c280: 6e 67 42 75 69 6c 64 65 72 28 61 72 72 61 79 2e  ngBuilder(array.
c290: 4c 65 6e 67 74 68 20 2a 20 32 29 3b 0d 0a 0d 0a  Length * 2);....
c2a0: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67          int leng
c2b0: 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74  th = array.Lengt
c2c0: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f  h;....        fo
c2d0: 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
c2e0: 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68  ; index < length
c2f0: 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
c300: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
c310: 70 70 65 6e 64 28 61 72 72 61 79 5b 69 6e 64 65  ppend(array[inde
c320: 78 5d 2e 54 6f 53 74 72 69 6e 67 28 22 78 32 22  x].ToString("x2"
c330: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ));....        r
c340: 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53  eturn result.ToS
c350: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d  tring();..    }.
c360: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
c370: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
c380: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
c390: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
c3a0: 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79  e, int index, by
c3b0: 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
c3c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
c3d0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
c3e0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
c3f0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
c400: 6f 67 4d 65 73 73 61 67 65 28 55 6e 73 61 66 65  ogMessage(Unsafe
c410: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53 74  NativeMethods.St
c420: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
c430: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
c440: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
c450: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
c460: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
c470: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
c480: 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b  r #{1} as type {
c490: 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b  2} with value {{
c4a0: 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20  {3}}}...",..    
c4b0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
c4c0: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70  tPtr, index, typ
c4d0: 65 6f 66 28 42 79 74 65 5b 5d 29 2c 20 28 76 61  eof(Byte[]), (va
c4e0: 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54  lue != null) ? T
c4f0: 6f 48 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69  oHexadecimalStri
c500: 6e 67 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e 75  ng(value) : "<nu
c510: 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ll>"));..    }..
c520: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
c530: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
c540: 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53  d_Double(SQLiteS
c550: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
c560: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
c570: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
c580: 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61  index, double va
c590: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
c5a0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
c5b0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
c5c0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
c5d0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
c5e0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
c5f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
c600: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
c610: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
c620: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
c630: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
c640: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
c650: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
c660: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
c670: 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  }....#if !PLATFO
c680: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
c690: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ORK..        SQL
c6a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
c6b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
c6c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
c6d0: 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c  d_double(handle,
c6e0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
c6f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
c700: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
c710: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
c720: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
c730: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
c740: 29 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ));..#elif !SQLI
c750: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
c760: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
c770: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
c780: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
c790: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
c7a0: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
c7b0: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
c7c0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
c7d0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
c7e0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
c7f0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
c800: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
c810: 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ror());..#else..
c820: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
c830: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
c840: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
c850: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
c860: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
c870: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49  ride void Bind_I
c880: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
c890: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
c8a0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
c8b0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
c8c0: 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  x, int value).. 
c8d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
c8e0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
c8f0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
c900: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
c910: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
c920: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
c930: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
c940: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
c950: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
c960: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
c970: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c980: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
c990: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
c9a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
c9b0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
c9c0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
c9d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c9e0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68  lite3_bind_int(h
c9f0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
ca00: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
ca10: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
ca20: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
ca30: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
ca40: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
ca50: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
ca60: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
ca70: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
ca80: 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74  ind_UInt32(SQLit
ca90: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
caa0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
cab0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
cac0: 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61  t index, uint va
cad0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
cae0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
caf0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
cb00: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
cb10: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
cb20: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
cb30: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
cb40: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
cb50: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
cb60: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
cb70: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
cb80: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
cb90: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
cba0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
cbb0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
cbc0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
cbd0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
cbe0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
cbf0: 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20  Code n;....     
cc00: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
cc10: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cc20: 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32  Flags.BindUInt32
cc30: 41 73 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c 69  AsInt64) == SQLi
cc40: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
cc50: 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e  s.BindUInt32AsIn
cc60: 74 36 34 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  t64)..        {.
cc70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e  .            lon
cc80: 67 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75 65  g value2 = value
cc90: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
cca0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
ccb0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
ccc0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
ccd0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
cce0: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64  _bind_int64(hand
ccf0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
cd00: 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  2);..#elif !SQLI
cd10: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
cd20: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
cd30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
cd40: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
cd50: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
cd60: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
cd70: 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a  alue2);..#else..
cd80: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
cd90: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
cda0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
cdb0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
cdc0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
cdd0: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
cde0: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
cdf0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ce00: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
ce10: 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  int(handle, inde
ce20: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
ce30: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69      }..        i
ce40: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
ce50: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
ce60: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
ce70: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
ce80: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
ce90: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
cea0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
ceb0: 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65  ind_Int64(SQLite
cec0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
ced0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cee0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
cef0: 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c   index, long val
cf00: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
cf10: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
cf20: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
cf30: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
cf40: 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  stmt;....#if !PL
cf50: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
cf60: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
cf70: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
cf80: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
cf90: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
cfa0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cfb0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
cfc0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
cfd0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
cfe0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
cff0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
d000: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
d010: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
d020: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d030: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
d040: 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69  _int64(handle, i
d050: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
d060: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
d070: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
d080: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
d090: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
d0a0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
d0b0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
d0c0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
d0d0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
d0e0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
d0f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d100: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
d110: 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e  terop(handle, in
d120: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
d130: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
d140: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
d150: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
d160: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
d170: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
d180: 28 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ());..#else..   
d190: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
d1a0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
d1b0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
d1c0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
d1d0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
d1e0: 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74  e void Bind_UInt
d1f0: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
d200: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
d210: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
d220: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
d230: 20 75 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20   ulong value).. 
d240: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
d250: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
d260: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
d270: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
d280: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
d290: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
d2a0: 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  K..        if ((
d2b0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
d2c0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
d2d0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
d2e0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
d2f0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
d300: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d310: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
d320: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
d330: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
d340: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
d350: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
d360: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d370: 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36  lite3_bind_uint6
d380: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
d390: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
d3a0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
d3b0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
d3c0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
d3d0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
d3e0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65  astError());..#e
d3f0: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
d400: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51  DARD..        SQ
d410: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
d420: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
d430: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
d440: 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f  nd_uint64_intero
d450: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
d460: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
d470: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
d480: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
d490: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
d4a0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
d4b0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
d4c0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
d4d0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
d4e0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
d4f0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
d500: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d510: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
d520: 69 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c  id Bind_Text(SQL
d530: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
d540: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
d550: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
d560: 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e  int index, strin
d570: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
d580: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
d590: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
d5a0: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
d5b0: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69  lite_stmt;....#i
d5c0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
d5d0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
d5e0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
d5f0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
d600: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
d610: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
d620: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
d630: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
d640: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
d650: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
d660: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
d670: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
d680: 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20  .        byte[] 
d690: 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65  b = ToUTF8(value
d6a0: 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
d6b0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
d6c0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
d6d0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
d6e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
d6f0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
d700: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
d710: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
d720: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d730: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
d740: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a  le, index, b);..
d750: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
d760: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  f....        SQL
d770: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
d780: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d790: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
d7a0: 64 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69  d_text(handle, i
d7b0: 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74  ndex, b, b.Lengt
d7c0: 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28  h - 1, (IntPtr)(
d7d0: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  -1));..        i
d7e0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
d7f0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
d800: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
d810: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
d820: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
d830: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
d840: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
d850: 69 6e 64 5f 44 61 74 65 54 69 6d 65 28 53 51 4c  ind_DateTime(SQL
d860: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
d870: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
d880: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
d890: 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54  int index, DateT
d8a0: 69 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a  ime dt)..    {..
d8b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
d8c0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
d8d0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
d8e0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66  ite_stmt;....#if
d8f0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
d900: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
d910: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
d920: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
d930: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
d940: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
d950: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
d960: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
d970: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
d980: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
d990: 2c 20 64 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  , dt);..        
d9a0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
d9b0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
d9c0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
d9d0: 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 44 61 74 65  onFlags.BindDate
d9e0: 54 69 6d 65 57 69 74 68 4b 69 6e 64 29 20 3d 3d  TimeWithKind) ==
d9f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
da00: 6e 46 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54  nFlags.BindDateT
da10: 69 6d 65 57 69 74 68 4b 69 6e 64 29 0d 0a 20 20  imeWithKind)..  
da20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
da30: 20 20 20 20 20 69 66 20 28 28 5f 64 61 74 65 74       if ((_datet
da40: 69 6d 65 4b 69 6e 64 20 21 3d 20 44 61 74 65 54  imeKind != DateT
da50: 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66  imeKind.Unspecif
da60: 69 65 64 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ied) &&..       
da70: 20 20 20 20 20 20 20 20 20 28 64 74 2e 4b 69 6e           (dt.Kin
da80: 64 20 21 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e  d != DateTimeKin
da90: 64 2e 55 6e 73 70 65 63 69 66 69 65 64 29 20 26  d.Unspecified) &
daa0: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
dab0: 20 20 20 28 64 74 2e 4b 69 6e 64 20 21 3d 20 5f     (dt.Kind != _
dac0: 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 29 0d 0a  datetimeKind))..
dad0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
daf0: 66 20 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  f (_datetimeKind
db00: 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64   == DateTimeKind
db10: 2e 55 74 63 29 0d 0a 20 20 20 20 20 20 20 20 20  .Utc)..         
db20: 20 20 20 20 20 20 20 20 20 20 20 64 74 20 3d 20             dt = 
db30: 64 74 2e 54 6f 55 6e 69 76 65 72 73 61 6c 54 69  dt.ToUniversalTi
db40: 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  me();..         
db50: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
db60: 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d  _datetimeKind ==
db70: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f   DateTimeKind.Lo
db80: 63 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  cal)..          
db90: 20 20 20 20 20 20 20 20 20 20 64 74 20 3d 20 64            dt = d
dba0: 74 2e 54 6f 4c 6f 63 61 6c 54 69 6d 65 28 29 3b  t.ToLocalTime();
dbb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
dbc0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
dbd0: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 5f 64        switch (_d
dbe0: 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a  atetimeFormat)..
dbf0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
dc00: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
dc10: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69  teDateFormats.Ti
dc20: 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  cks:..          
dc30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e               lon
dc50: 67 20 76 61 6c 75 65 20 3d 20 64 74 2e 54 69 63  g value = dt.Tic
dc60: 6b 73 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  ks;....#if !PLAT
dc70: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
dc80: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
dc90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
dca0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
dcb0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
dcc0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
dcd0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
dce0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
dd00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dd10: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
dd20: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
dd30: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
dd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
dd50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dd60: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
dd70: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
dd80: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
dd90: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
dda0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
ddb0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ddd0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
dde0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
ddf0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
de00: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
de10: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
de30: 61 6b 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ak;..#elif !SQLI
de40: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de60: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
de70: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
de80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
de90: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
dea0: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
deb0: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ded0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
dee0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
def0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
df00: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
df10: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df30: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 73      break;..#els
df40: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
df50: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
df60: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
df70: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
df80: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
df90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
dfa0: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
dfb0: 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61  ateFormats.Julia
dfc0: 6e 44 61 79 3a 0d 0a 20 20 20 20 20 20 20 20 20  nDay:..         
dfd0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
dff0: 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a  uble value = ToJ
e000: 75 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d  ulianDay(dt);...
e010: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
e020: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
e030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e040: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
e050: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
e060: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
e070: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
e080: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
e090: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
e0a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0c0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
e0d0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
e0e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e0f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e110: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
e120: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
e130: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
e140: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64  bind_double(hand
e150: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
e160: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
e170: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
e180: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e190: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
e1a0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
e1b0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
e1c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
e1d0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
e1e0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
e1f0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
e200: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
e210: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
e220: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
e230: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
e240: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
e250: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
e260: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ef value);..    
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e280: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
e290: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
e2a0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
e2b0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
e2c0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2e0: 62 72 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20  break;..#else.. 
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e300: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
e310: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
e320: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
e330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e340: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
e350: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
e360: 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68  ormats.UnixEpoch
e370: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
e380: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e390: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
e3a0: 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54  alue = Convert.T
e3b0: 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61  oInt64(dt.Subtra
e3c0: 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f  ct(UnixEpoch).To
e3d0: 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a  talSeconds);....
e3e0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
e3f0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
e400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e410: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
e420: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e430: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
e440: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
e450: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
e460: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e470: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e490: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
e4a0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
e4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e4c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
e4e0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
e4f0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
e500: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
e510: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
e520: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
e530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e540: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
e550: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
e560: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
e570: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
e580: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
e590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e5a0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65        break;..#e
e5b0: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
e5c0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
e5d0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
e5e0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
e5f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e600: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
e610: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
e620: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
e630: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e650: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
e660: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
e670: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e680: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
e690: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
e6b0: 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ak;..#else..    
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6d0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
e6e0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
e6f0: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
e710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66  .            def
e720: 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  ault:..         
e730: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79                by
e750: 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28  te[] b = ToUTF8(
e760: 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  dt);....#if !PLA
e770: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
e780: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
e790: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e7a0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
e7b0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
e7c0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
e7d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e7e0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
e800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e810: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
e820: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
e830: 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   b);..          
e840: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
e850: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  dif....         
e860: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
e870: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
e880: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e890: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
e8a0: 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64  text(handle, ind
e8b0: 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20  ex, b, b.Length 
e8c0: 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  - 1, (IntPtr)(-1
e8d0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
e8e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
e8f0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
e900: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
e910: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
e920: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
e930: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
e940: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
e950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e960: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
e970: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
e980: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
e990: 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c  id Bind_Blob(SQL
e9a0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
e9b0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
e9c0: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
e9d0: 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b  int index, byte[
e9e0: 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20  ] blobData)..   
e9f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
ea00: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
ea10: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
ea20: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
ea30: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
ea40: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
ea50: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
ea60: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
ea70: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
ea80: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
ea90: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
eaa0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
eab0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
eac0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
ead0: 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b  ndex, blobData);
eae0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
eaf0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  dif....        S
eb00: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
eb10: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
eb20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
eb30: 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c  ind_blob(handle,
eb40: 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61   index, blobData
eb50: 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74  , blobData.Lengt
eb60: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
eb70: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
eb80: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
eb90: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
eba0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
ebb0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
ebc0: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
ebd0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
ebe0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
ebf0: 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65  Null(SQLiteState
ec00: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
ec10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
ec20: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
ec30: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
ec40: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
ec50: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
ec60: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
ec70: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
ec80: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
ec90: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
eca0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
ecb0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
ecc0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
ecd0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
ece0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
ecf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ed00: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
ed10: 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  ndle, index);.. 
ed20: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
ed30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
ed40: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
ed50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ed60: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
ed70: 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c 20 69 6e  _null(handle, in
ed80: 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  dex);..        i
ed90: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
eda0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
edb0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
edc0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
edd0: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
ede0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
edf0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69   override int Bi
ee00: 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53 51  nd_ParamCount(SQ
ee10: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
ee20: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
ee30: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29  tionFlags flags)
ee40: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
ee50: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
ee60: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
ee70: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
ee80: 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  t;..        int 
ee90: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
eea0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
eeb0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
eec0: 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29  er_count(handle)
eed0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
eee0: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
eef0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
ef00: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
ef10: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
ef20: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
ef30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ef40: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
ef50: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
ef60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ef70: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
ef80: 73 61 67 65 28 55 6e 73 61 66 65 4e 61 74 69 76  sage(UnsafeNativ
ef90: 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  eMethods.StringF
efa0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
efb0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
efc0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
efd0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
efe0: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
eff0: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f 75  {0} paramter cou
f000: 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20  nt is {1}.",..  
f010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
f020: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c 75  ndleIntPtr, valu
f030: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e));..        }.
f040: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
f050: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
f060: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
f070: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
f080: 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53  Bind_ParamName(S
f090: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
f0a0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
f0b0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
f0c0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
f0d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
f0e0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
f0f0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
f100: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
f110: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
f120: 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  ame;....#if !SQL
f130: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
f140: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
f150: 30 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65  0;..        name
f160: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
f170: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f180: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
f190: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f  _parameter_name_
f1a0: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
f1b0: 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c  index, ref len),
f1c0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
f1d0: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54         name = UT
f1e0: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
f1f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f200: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
f210: 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c  meter_name(handl
f220: 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  e, index), -1);.
f230: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
f240: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
f250: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f260: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
f270: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
f280: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
f290: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
f2a0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
f2b0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
f2c0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
f2d0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
f2e0: 4c 6f 67 4d 65 73 73 61 67 65 28 55 6e 73 61 66  LogMessage(Unsaf
f2f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53  eNativeMethods.S
f300: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
f310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
f320: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
f330: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
f340: 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74             "Stat
f350: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
f360: 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20  er #{1} name is 
f370: 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20  {{{2}}}.",..    
f380: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
f390: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
f3a0: 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20   name));..      
f3b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
f3c0: 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20  eturn name;..   
f3d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
f3e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
f3f0: 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28  Bind_ParamIndex(
f400: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
f410: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
f420: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
f430: 73 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d 4e  s, string paramN
f440: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
f450: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
f460: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
f470: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
f480: 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20  _stmt;..        
f490: 69 6e 74 20 69 6e 64 65 78 20 3d 20 55 6e 73 61  int index = Unsa
f4a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f4b0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
f4c0: 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 68 61 6e  ameter_index(han
f4d0: 64 6c 65 2c 20 54 6f 55 54 46 38 28 70 61 72 61  dle, ToUTF8(para
f4e0: 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20  mName));....    
f4f0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
f500: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
f510: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
f520: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
f530: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
f540: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
f550: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
f560: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
f570: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
f580: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
f590: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 55 6e 73 61  .LogMessage(Unsa
f5a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f5b0: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
f5d0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
f5e0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
f5f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
f600: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
f610: 74 65 72 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d  ter index of nam
f620: 65 20 7b 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32  e {{{1}}} is #{2
f630: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
f640: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
f650: 74 72 2c 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69  tr, paramName, i
f660: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 20 20 20  ndex));..       
f670: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
f680: 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20  turn index;..   
f690: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
f6a0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
f6b0: 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69  ColumnCount(SQLi
f6c0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
f6d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
f6e0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
f6f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f700: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
f710: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
f720: 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
f730: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f740: 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
f750: 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  nName(SQLiteStat
f760: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
f770: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
f780: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
f790: 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
f7a0: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49  en = 0;..      I
f7b0: 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65  ntPtr p = Unsafe
f7c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f7d0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
f7e0: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
f7f0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
f800: 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23  ex, ref len);..#
f810: 65 6c 73 65 0d 0a 20 20 20 20 20 20 49 6e 74 50  else..      IntP
f820: 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
f830: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f840: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73  e3_column_name(s
f850: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
f860: 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69  , index);..#endi
f870: 66 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 3d  f..      if (p =
f880: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
f890: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
f8a0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
f8b0: 6e 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n(SQLiteErrorCod
f8c0: 65 2e 4e 6f 4d 65 6d 2c 20 47 65 74 4c 61 73 74  e.NoMem, GetLast
f8d0: 45 72 72 6f 72 28 29 29 3b 0d 0a 23 69 66 20 21  Error());..#if !
f8e0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
f8f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
f900: 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
f910: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
f920: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
f930: 74 72 69 6e 67 28 70 2c 20 2d 31 29 3b 0d 0a 23  tring(p, -1);..#
f940: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
f950: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
f960: 72 72 69 64 65 20 54 79 70 65 41 66 66 69 6e 69  rride TypeAffini
f970: 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  ty ColumnAffinit
f980: 79 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  y(SQLiteStatemen
f990: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
f9a0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
f9b0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
f9c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f9d0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
f9e0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
f9f0: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
fa00: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
fa10: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
fa20: 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c  g ColumnType(SQL
fa30: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
fa40: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 72 65  t, int index, re
fa50: 66 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 6e  f TypeAffinity n
fa60: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b  Affinity)..    {
fa70: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
fa80: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
fa90: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 65  ANDARD..      le
faa0: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e  n = 0;..      In
fab0: 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
fac0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fad0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
fae0: 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  type_interop(stm
faf0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
fb00: 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b  index, ref len);
fb10: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6c  ..#else..      l
fb20: 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20  en = -1;..      
fb30: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
fb40: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
fb50: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
fb60: 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c  cltype(stmt._sql
fb70: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
fb80: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
fb90: 20 6e 41 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c   nAffinity = Col
fba0: 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74  umnAffinity(stmt
fbb0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
fbc0: 20 20 20 69 66 20 28 70 20 21 3d 20 49 6e 74 50     if (p != IntP
fbd0: 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20  tr.Zero) return 
fbe0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20  UTF8ToString(p, 
fbf0: 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73  len);..      els
fc00: 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  e..      {..    
fc10: 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 20      string[] ar 
fc20: 3d 20 73 74 6d 74 2e 54 79 70 65 44 65 66 69 6e  = stmt.TypeDefin
fc30: 69 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20  itions;..       
fc40: 20 69 66 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29   if (ar != null)
fc50: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
fc60: 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78         if (index
fc70: 20 3c 20 61 72 2e 4c 65 6e 67 74 68 20 26 26 20   < ar.Length && 
fc80: 61 72 5b 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c  ar[index] != nul
fc90: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
fca0: 72 65 74 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d  return ar[index]
fcb0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
fcc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
fcd0: 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20  ing.Empty;....  
fce0: 20 20 20 20 20 20 2f 2f 73 77 69 74 63 68 20 28        //switch (
fcf0: 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20  nAffinity)..    
fd00: 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20      //{..       
fd10: 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66   //  case TypeAf
fd20: 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20  finity.Int64:.. 
fd30: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
fd40: 75 72 6e 20 22 42 49 47 49 4e 54 22 3b 0d 0a 20  urn "BIGINT";.. 
fd50: 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20         //  case 
fd60: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
fd70: 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble:..        //
fd80: 20 20 20 20 72 65 74 75 72 6e 20 22 44 4f 55 42      return "DOUB
fd90: 4c 45 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  LE";..        //
fda0: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
fdb0: 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
fdc0: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
fdd0: 22 42 4c 4f 42 22 3b 0d 0a 20 20 20 20 20 20 20  "BLOB";..       
fde0: 20 2f 2f 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20   //  default:.. 
fdf0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
fe00: 75 72 6e 20 22 54 45 58 54 22 3b 0d 0a 20 20 20  urn "TEXT";..   
fe10: 20 20 20 20 20 2f 2f 7d 0d 0a 20 20 20 20 20 20       //}..      
fe20: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
fe30: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
fe40: 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65  e int ColumnInde
fe50: 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  x(SQLiteStatemen
fe60: 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 63  t stmt, string c
fe70: 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20  olumnName)..    
fe80: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 78 20 3d  {..      int x =
fe90: 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d   ColumnCount(stm
fea0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  t);....      for
feb0: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
fec0: 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20   x; n++)..      
fed0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  {..        if (S
fee0: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f  tring.Compare(co
fef0: 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e  lumnName, Column
ff00: 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53  Name(stmt, n), S
ff10: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
ff20: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
ff30: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
ff40: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
ff50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65       }..      re
ff60: 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d  turn -1;..    }.
ff70: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
ff80: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
ff90: 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61  ColumnOriginalNa
ffa0: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
ffb0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
ffc0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
ffd0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
ffe0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
fff0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
10000 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
10010 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10020 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
10030 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69  mn_origin_name_i
10040 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
10050 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
10060 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   ref len), len);
10070 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
10080 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
10090 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
100a0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
100b0 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
100c0 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
100d0 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
100e0 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
100f0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10100 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
10110 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e   ColumnDatabaseN
10120 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
10130 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
10140 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
10150 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
10160 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
10170 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
10180 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
10190 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
101a0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
101b0 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
101c0 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
101d0 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
101e0 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65  ex, ref len), le
101f0 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
10200 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
10210 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
10220 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10230 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
10240 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c  e_name(stmt._sql
10250 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
10260 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
10270 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
10280 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
10290 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c  tring ColumnTabl
102a0 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eName(SQLiteStat
102b0 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
102c0 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23  index)..    {..#
102d0 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
102e0 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
102f0 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72  en = 0;..      r
10300 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
10310 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
10320 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
10330 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
10340 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
10350 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
10360 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e  x, ref len), len
10370 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
10380 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
10390 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
103a0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
103b0 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
103c0 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
103d0 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
103e0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
103f0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
10400 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
10410 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73  ColumnMetaData(s
10420 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20  tring dataBase, 
10430 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74  string table, st
10440 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65 66  ring column, ref
10450 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65   string dataType
10460 2c 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f 6c  , ref string col
10470 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 72 65  lateSequence, re
10480 66 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20  f bool notNull, 
10490 72 65 66 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79  ref bool primary
104a0 4b 65 79 2c 20 72 65 66 20 62 6f 6f 6c 20 61 75  Key, ref bool au
104b0 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20  toIncrement)..  
104c0 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74    {..      IntPt
104d0 72 20 64 61 74 61 54 79 70 65 50 74 72 20 3d 20  r dataTypePtr = 
104e0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
104f0 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53      IntPtr collS
10500 65 71 50 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a  eqPtr = IntPtr.Z
10510 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
10520 6e 6e 6f 74 4e 75 6c 6c 20 3d 20 30 3b 0d 0a 20  nnotNull = 0;.. 
10530 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72       int nprimar
10540 79 4b 65 79 20 3d 20 30 3b 0d 0a 20 20 20 20 20  yKey = 0;..     
10550 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63 20 3d 20   int nautoInc = 
10560 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  0;..      SQLite
10570 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20  ErrorCode n;..  
10580 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a      int dtLen;..
10590 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b        int csLen;
105a0 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
105b0 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
105c0 64 74 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  dtLen = 0;..    
105d0 20 20 63 73 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20    csLen = 0;..  
105e0 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
105f0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10600 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
10610 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f  _metadata_intero
10620 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  p(_sql, ToUTF8(d
10630 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38  ataBase), ToUTF8
10640 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28  (table), ToUTF8(
10650 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61 74  column), ref dat
10660 61 54 79 70 65 50 74 72 2c 20 72 65 66 20 63 6f  aTypePtr, ref co
10670 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e 6e  llSeqPtr, ref nn
10680 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72 69  otNull, ref npri
10690 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61 75  maryKey, ref nau
106a0 74 6f 49 6e 63 2c 20 72 65 66 20 64 74 4c 65 6e  toInc, ref dtLen
106b0 2c 20 72 65 66 20 63 73 4c 65 6e 29 3b 0d 0a 23  , ref csLen);..#
106c0 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74 4c 65  else..      dtLe
106d0 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63  n = -1;..      c
106e0 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20  sLen = -1;....  
106f0 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
10700 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10710 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
10720 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c 2c 20  _metadata(_sql, 
10730 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29  ToUTF8(dataBase)
10740 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c  , ToUTF8(table),
10750 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c   ToUTF8(column),
10760 20 72 65 66 20 64 61 74 61 54 79 70 65 50 74 72   ref dataTypePtr
10770 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74 72  , ref collSeqPtr
10780 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20  , ref nnotNull, 
10790 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c  ref nprimaryKey,
107a0 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 29 3b 0d   ref nautoInc);.
107b0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
107c0 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
107d0 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
107e0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
107f0 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
10800 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
10810 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 55 54     dataType = UT
10820 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74 61 54  F8ToString(dataT
10830 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d  ypePtr, dtLen);.
10840 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65 53 65  .      collateSe
10850 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53  quence = UTF8ToS
10860 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72  tring(collSeqPtr
10870 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  , csLen);....   
10880 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e     notNull = (nn
10890 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20  otNull == 1);.. 
108a0 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65 79 20       primaryKey 
108b0 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d  = (nprimaryKey =
108c0 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61 75 74  = 1);..      aut
108d0 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61  oIncrement = (na
108e0 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20  utoInc == 1);.. 
108f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10900 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62  rnal override ob
10910 6a 65 63 74 20 47 65 74 4f 62 6a 65 63 74 28 53  ject GetObject(S
10920 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
10930 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
10940 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
10950 73 77 69 74 63 68 20 28 43 6f 6c 75 6d 6e 41 66  switch (ColumnAf
10960 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
10970 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ex))..        {.
10980 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
10990 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e TypeAffinity.I
109a0 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20  nt64:..         
109b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
109c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
109d0 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74  turn GetInt64(st
109e0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
109f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
10a00 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
10a10 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
10a20 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  uble:..         
10a30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10a50 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73  turn GetDouble(s
10a60 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
10a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
10a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
10a90 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  e TypeAffinity.T
10aa0 65 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ext:..          
10ab0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
10ad0 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74  urn GetText(stmt
10ae0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
10af0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
10b00 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
10b10 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
10b20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
10b30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10b40 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 73            long s
10b50 69 7a 65 20 3d 20 47 65 74 42 79 74 65 73 28 73  ize = GetBytes(s
10b60 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e  tmt, index, 0, n
10b70 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 0d 0a 20  ull, 0, 0);.... 
10b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b90 20 20 20 69 66 20 28 28 73 69 7a 65 20 3e 20 30     if ((size > 0
10ba0 29 20 26 26 20 28 73 69 7a 65 20 3c 3d 20 69 6e  ) && (size <= in
10bb0 74 2e 4d 61 78 56 61 6c 75 65 29 29 0d 0a 20 20  t.MaxValue))..  
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10be0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74               byt
10bf0 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e 65 77 20  e[] bytes = new 
10c00 62 79 74 65 5b 28 69 6e 74 29 73 69 7a 65 5d 3b  byte[(int)size];
10c10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10c20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 42              GetB
10c30 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
10c40 2c 20 30 2c 20 62 79 74 65 73 2c 20 30 2c 20 28  , 0, bytes, 0, (
10c50 69 6e 74 29 73 69 7a 65 29 3b 0d 0a 0d 0a 20 20  int)size);....  
10c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c70 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
10c80 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es;..           
10c90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cb0 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
10cc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
10cd0 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
10ce0 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 3a 0d 0a  Affinity.Null:..
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10d10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 42         return DB
10d20 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20  Null.Value;..   
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
10d40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
10d50 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
10d60 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
10d70 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d  eption();..    }
10d80 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10d90 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65   override double
10da0 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74   GetDouble(SQLit
10db0 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
10dc0 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
10dd0 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
10de0 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
10df0 52 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  RK..      return
10e00 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10e10 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
10e20 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e  umn_double(stmt.
10e30 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
10e40 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  dex);..#elif !SQ
10e50 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
10e60 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
10e70 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20  e = 0.0;..      
10e80 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10e90 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
10ea0 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  mn_double_intero
10eb0 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
10ec0 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
10ed0 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72  value);..      r
10ee0 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65  eturn value;..#e
10ef0 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
10f00 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
10f10 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
10f20 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
10f30 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10f40 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 47 65 74  verride bool Get
10f50 42 6f 6f 6c 65 61 6e 28 53 51 4c 69 74 65 53 74  Boolean(SQLiteSt
10f60 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
10f70 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
10f80 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
10f90 42 6f 6f 6c 65 61 6e 28 47 65 74 4f 62 6a 65 63  Boolean(GetObjec
10fa0 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  t(stmt, index), 
10fb0 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
10fc0 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 66 61  riantCulture, fa
10fd0 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lse);..    }....
10fe0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10ff0 72 72 69 64 65 20 73 62 79 74 65 20 47 65 74 53  rride sbyte GetS
11000 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74 65  Byte(SQLiteState
11010 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
11020 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
11030 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
11040 63 6b 65 64 28 28 73 62 79 74 65 29 28 47 65 74  cked((sbyte)(Get
11050 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
11060 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c  x) & byte.MaxVal
11070 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
11080 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11090 72 72 69 64 65 20 62 79 74 65 20 47 65 74 42 79  rride byte GetBy
110a0 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  te(SQLiteStateme
110b0 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
110c0 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
110d0 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
110e0 65 64 28 28 62 79 74 65 29 28 47 65 74 49 6e 74  ed((byte)(GetInt
110f0 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
11100 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29  & byte.MaxValue)
11110 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
11120 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11130 64 65 20 73 68 6f 72 74 20 47 65 74 49 6e 74 31  de short GetInt1
11140 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  6(SQLiteStatemen
11150 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
11160 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
11170 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
11180 64 28 28 73 68 6f 72 74 29 28 47 65 74 49 6e 74  d((short)(GetInt
11190 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
111a0 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75  & ushort.MaxValu
111b0 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
111c0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
111d0 72 69 64 65 20 75 73 68 6f 72 74 20 47 65 74 55  ride ushort GetU
111e0 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74  Int16(SQLiteStat
111f0 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
11200 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
11210 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
11220 65 63 6b 65 64 28 28 75 73 68 6f 72 74 29 28 47  ecked((ushort)(G
11230 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
11240 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61  dex) & ushort.Ma
11250 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d  xValue));..    }
11260 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
11270 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
11280 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  tInt32(SQLiteSta
11290 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
112a0 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
112b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
112c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
112d0 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
112e0 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  int(stmt._sqlite
112f0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
11300 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11310 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75  ernal override u
11320 69 6e 74 20 47 65 74 55 49 6e 74 33 32 28 53 51  int GetUInt32(SQ
11330 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
11340 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
11350 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
11360 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75  urn unchecked((u
11370 69 6e 74 29 47 65 74 49 6e 74 33 32 28 73 74 6d  int)GetInt32(stm
11380 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20  t, index));..   
11390 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
113a0 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
113b0 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65   GetInt64(SQLite
113c0 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
113d0 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
113e0 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
113f0 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
11400 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  K..      return 
11410 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
11420 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
11430 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73  mn_int64(stmt._s
11440 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
11450 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  x);..#elif !SQLI
11460 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
11470 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
11480 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  0;..      Unsafe
11490 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
114a0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
114b0 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  64_interop(stmt.
114c0 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
114d0 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
114e0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
114f0 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  alue;..#else..  
11500 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
11510 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
11520 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
11530 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
11540 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
11550 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36 34   ulong GetUInt64
11560 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
11570 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
11580 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11590 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
115a0 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34  ((ulong)GetInt64
115b0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  (stmt, index));.
115c0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
115d0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
115e0 73 74 72 69 6e 67 20 47 65 74 54 65 78 74 28 53  string GetText(S
115f0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
11600 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
11610 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
11620 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
11630 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
11640 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
11650 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
11660 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
11670 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
11680 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ext_interop(stmt
11690 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
116a0 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20  ndex, ref len), 
116b0 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
116c0 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
116d0 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
116e0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
116f0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
11700 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
11710 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20  t, index),..    
11720 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
11730 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11740 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
11750 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
11760 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66  index));..#endif
11770 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
11780 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
11790 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74   DateTime GetDat
117a0 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
117b0 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
117c0 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
117d0 20 20 20 20 20 69 66 20 28 5f 64 61 74 65 74 69       if (_dateti
117e0 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69  meFormat == SQLi
117f0 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69  teDateFormats.Ti
11800 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 72 65  cks)..        re
11810 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
11820 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
11830 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65  ndex), _datetime
11840 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  Kind);..      el
11850 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65  se if (_datetime
11860 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65  Format == SQLite
11870 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69  DateFormats.Juli
11880 61 6e 44 61 79 29 0d 0a 20 20 20 20 20 20 20 20  anDay)..        
11890 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
118a0 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  e(GetDouble(stmt
118b0 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74  , index), _datet
118c0 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20  imeKind);..     
118d0 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74   else if (_datet
118e0 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c  imeFormat == SQL
118f0 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55  iteDateFormats.U
11900 6e 69 78 45 70 6f 63 68 29 0d 0a 20 20 20 20 20  nixEpoch)..     
11910 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
11920 54 69 6d 65 28 47 65 74 49 6e 74 33 32 28 73 74  Time(GetInt32(st
11930 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74  mt, index), _dat
11940 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23  etimeKind);....#
11950 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
11960 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ARD..      int l
11970 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72  en = 0;..      r
11980 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
11990 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
119a0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
119b0 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70  umn_text_interop
119c0 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
119d0 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c  mt, index, ref l
119e0 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
119f0 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
11a00 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66  ToDateTime(Unsaf
11a10 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11a20 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
11a30 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  xt(stmt._sqlite_
11a40 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20  stmt, index),.. 
11a50 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
11a60 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11a70 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28  e3_column_bytes(
11a80 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
11a90 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e  t, index));..#en
11aa0 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
11ab0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11ac0 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65  ide long GetByte
11ad0 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  s(SQLiteStatemen
11ae0 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
11af0 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  x, int nDataOffs
11b00 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74  et, byte[] bDest
11b10 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
11b20 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
11b30 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65  {..      int nle
11b40 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
11b50 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11b60 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
11b70 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
11b80 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
11b90 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e   // If no destin
11ba0 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65  ation buffer, re
11bb0 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65  turn the size ne
11bc0 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20  eded...      if 
11bd0 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
11be0 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
11bf0 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65        int nCopie
11c00 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  d = nLength;....
11c10 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
11c20 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
11c30 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
11c40 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
11c50 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
11c60 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
11c70 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
11c80 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
11c90 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
11ca0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
11cb0 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
11cc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
11cd0 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61  ntPtr ptr = Unsa
11ce0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
11cf0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
11d00 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  lob(stmt._sqlite
11d10 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
11d20 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61  ..        Marsha
11d30 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28  l.Copy((IntPtr)(
11d40 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20  ptr.ToInt64() + 
11d50 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44  nDataOffset), bD
11d60 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
11d70 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  pied);..      }.
11d80 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20  .      else..   
11d90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43     {..        nC
11da0 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  opied = 0;..    
11db0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
11dc0 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20  urn nCopied;..  
11dd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
11de0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
11df0 67 20 47 65 74 43 68 61 72 73 28 53 51 4c 69 74  g GetChars(SQLit
11e00 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
11e10 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
11e20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63 68 61  nDataOffset, cha
11e30 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  r[] bDest, int n
11e40 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
11e50 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
11e60 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20    int nlen;..   
11e70 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d     int nCopied =
11e80 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20   nLength;....   
11e90 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20     string str = 
11ea0 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
11eb0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e 6c 65  dex);..      nle
11ec0 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68 3b 0d  n = str.Length;.
11ed0 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65  ...      if (bDe
11ee0 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  st == null) retu
11ef0 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20  rn nlen;....    
11f00 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
11f10 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c  nStart > bDest.L
11f20 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d  ength) nCopied =
11f30 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20   bDest.Length - 
11f40 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69  nStart;..      i
11f50 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61  f (nCopied + nDa
11f60 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29  taOffset > nlen)
11f70 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20   nCopied = nlen 
11f80 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a  - nDataOffset;..
11f90 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
11fa0 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ied > 0)..      
11fb0 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e 44 61    str.CopyTo(nDa
11fc0 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73 74 2c  taOffset, bDest,
11fd0 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64   nStart, nCopied
11fe0 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 6e  );..      else n
11ff0 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20  Copied = 0;.... 
12000 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70       return nCop
12010 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ied;..    }.... 
12020 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
12030 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c  ride bool IsNull
12040 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
12050 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
12060 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12070 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e 41 66  return (ColumnAf
12080 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
12090 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66 69 6e  ex) == TypeAffin
120a0 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20  ity.Null);..    
120b0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
120c0 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 41  l override int A
120d0 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49 6e  ggregateCount(In
120e0 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
120f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
12100 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
12110 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61  ethods.sqlite3_a
12120 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63  ggregate_count(c
12130 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d  ontext);..    }.
12140 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
12150 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
12160 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 46  rrorCode CreateF
12170 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73  unction(string s
12180 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20  trFunction, int 
12190 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64  nArgs, bool need
121a0 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43  CollSeq, SQLiteC
121b0 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51  allback func, SQ
121c0 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  LiteCallback fun
121d0 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e  cstep, SQLiteFin
121e0 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66  alCallback funcf
121f0 69 6e 61 6c 2c 20 62 6f 6f 6c 20 63 61 6e 54 68  inal, bool canTh
12200 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  row)..    {..   
12210 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
12220 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  de n;....#if !SQ
12230 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
12240 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
12250 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12260 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
12270 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71  tion_interop(_sq
12280 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
12290 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34  ction), nArgs, 4
122a0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
122b0 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
122c0 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43  uncfinal, (needC
122d0 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20  ollSeq == true) 
122e0 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 20  ? 1 : 0);..     
122f0 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
12300 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20  ErrorCode.Ok) n 
12310 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
12320 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
12330 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e  eate_function_in
12340 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
12350 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c  F8(strFunction),
12360 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74   nArgs, 1, IntPt
12370 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75  r.Zero, func, fu
12380 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61  ncstep, funcfina
12390 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20  l, (needCollSeq 
123a0 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30  == true) ? 1 : 0
123b0 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
123c0 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
123d0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
123e0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
123f0 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
12400 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
12410 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 4, IntPtr.Zer
12420 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
12430 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a  p, funcfinal);..
12440 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
12450 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
12460 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  k) n = UnsafeNat
12470 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
12480 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
12490 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
124a0 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
124b0 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 1, IntPtr.Z
124c0 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
124d0 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b  tep, funcfinal);
124e0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
124f0 69 66 20 28 63 61 6e 54 68 72 6f 77 20 26 26 20  if (canThrow && 
12500 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
12510 72 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72 6f 77  rCode.Ok)) throw
12520 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
12530 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
12540 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
12550 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d  return n;..    }
12560 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12570 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
12580 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65  ErrorCode Create
12590 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67  Collation(string
125a0 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53   strCollation, S
125b0 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66  QLiteCollation f
125c0 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61  unc, SQLiteColla
125d0 74 69 6f 6e 20 66 75 6e 63 31 36 2c 20 62 6f 6f  tion func16, boo
125e0 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20  l canThrow)..   
125f0 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
12600 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
12610 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12620 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
12630 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c  _collation(_sql,
12640 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61   ToUTF8(strColla
12650 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72  tion), 2, IntPtr
12660 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d  .Zero, func16);.
12670 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20  .      if (n == 
12680 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
12690 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  Ok) n = UnsafeNa
126a0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
126b0 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
126c0 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
126d0 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c  8(strCollation),
126e0 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
126f0 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 69   func);..      i
12700 66 20 28 63 61 6e 54 68 72 6f 77 20 26 26 20 28  f (canThrow && (
12710 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
12720 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72 6f 77 20  Code.Ok)) throw 
12730 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
12740 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
12750 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 72  ror());..      r
12760 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d  eturn n;..    }.
12770 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
12780 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e  override int Con
12790 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61  textCollateCompa
127a0 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  re(CollationEnco
127b0 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e  dingEnum enc, In
127c0 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74  tPtr context, st
127d0 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67 20  ring s1, string 
127e0 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  s2)..    {..#if 
127f0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
12800 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
12810 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  1;..      byte[]
12820 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74   b2;..      Syst
12830 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
12840 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c   converter = nul
12850 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74  l;....      swit
12860 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20  ch (enc)..      
12870 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
12880 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
12890 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20  gEnum.UTF8:..   
128a0 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
128b0 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
128c0 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20  ncoding.UTF8;.. 
128d0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
128e0 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
128f0 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
12900 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20  num.UTF16LE:..  
12910 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
12920 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
12930 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65  Encoding.Unicode
12940 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
12950 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
12960 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
12970 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a  ingEnum.UTF16BE:
12980 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
12990 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
129a0 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67  ext.Encoding.Big
129b0 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a  EndianUnicode;..
129c0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
129d0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
129e0 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65     b1 = converte
129f0 72 2e 47 65 74 42 79 74 65 73 28 73 31 29 3b 0d  r.GetBytes(s1);.
12a00 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76  .      b2 = conv
12a10 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73  erter.GetBytes(s
12a20 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  2);....      ret
12a30 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
12a40 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12a50 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70  context_collcomp
12a60 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  are_interop(cont
12a70 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67  ext, b1, b1.Leng
12a80 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74  th, b2, b2.Lengt
12a90 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  h);..#else..    
12aa0 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
12ab0 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
12ac0 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
12ad0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
12ae0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
12af0 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74  nt ContextCollat
12b00 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69  eCompare(Collati
12b10 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65  onEncodingEnum e
12b20 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
12b30 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63  xt, char[] c1, c
12b40 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b  har[] c2)..    {
12b50 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
12b60 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79  ANDARD..      by
12b70 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20  te[] b1;..      
12b80 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20  byte[] b2;..    
12b90 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e    System.Text.En
12ba0 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72  coding converter
12bb0 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
12bc0 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a    switch (enc)..
12bd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12be0 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
12bf0 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38  ncodingEnum.UTF8
12c00 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
12c10 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
12c20 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54  Text.Encoding.UT
12c30 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  F8;..          b
12c40 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
12c50 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
12c60 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c  odingEnum.UTF16L
12c70 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
12c80 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
12c90 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
12ca0 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
12cb0 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
12cc0 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
12cd0 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
12ce0 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16BE:..        
12cf0 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
12d00 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
12d10 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63  ng.BigEndianUnic
12d20 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
12d30 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d  break;..      }.
12d40 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f  ...      b1 = co
12d50 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
12d60 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20  (c1);..      b2 
12d70 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
12d80 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20 20 20  ytes(c2);....   
12d90 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
12da0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12db0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
12dc0 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f  llcompare_intero
12dd0 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62  p(context, b1, b
12de0 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32  1.Length, b2, b2
12df0 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65  .Length);..#else
12e00 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
12e10 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
12e20 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
12e30 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
12e40 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
12e50 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65  ride CollationSe
12e60 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74  quence GetCollat
12e70 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c 69  ionSequence(SQLi
12e80 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c  teFunction func,
12e90 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29   IntPtr context)
12ea0 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
12eb0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
12ec0 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65       CollationSe
12ed0 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e 65 77  quence seq = new
12ee0 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
12ef0 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74  ce();..      int
12f00 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
12f10 20 69 6e 74 20 74 79 70 65 20 3d 20 30 3b 0d 0a   int type = 0;..
12f20 20 20 20 20 20 20 69 6e 74 20 65 6e 63 20 3d 20        int enc = 
12f30 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  0;..      IntPtr
12f40 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
12f50 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12f60 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73 65 71  _context_collseq
12f70 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
12f80 2c 20 72 65 66 20 74 79 70 65 2c 20 72 65 66 20  , ref type, ref 
12f90 65 6e 63 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a  enc, ref len);..
12fa0 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 21 3d  ..      if (p !=
12fb0 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d 65 20   null) seq.Name 
12fc0 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  = UTF8ToString(p
12fd0 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 73  , len);..      s
12fe0 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c 6c 61  eq.Type = (Colla
12ff0 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74 79 70  tionTypeEnum)typ
13000 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 5f 66  e;..      seq._f
13010 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20 20 20  unc = func;..   
13020 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e 67 20     seq.Encoding 
13030 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  = (CollationEnco
13040 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d  dingEnum)enc;...
13050 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 65  .      return se
13060 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  q;..#else..     
13070 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
13080 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
13090 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
130a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
130b0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
130c0 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ng GetParamValue
130d0 42 79 74 65 73 28 49 6e 74 50 74 72 20 70 2c 20  Bytes(IntPtr p, 
130e0 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
130f0 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69   byte[] bDest, i
13100 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
13110 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
13120 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d        int nlen =
13130 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13140 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
13150 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a 0d 0a  ue_bytes(p);....
13160 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64        // If no d
13170 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65  estination buffe
13180 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 69  r, return the si
13190 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  ze needed...    
131a0 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e    if (bDest == n
131b0 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e  ull) return nlen
131c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e  ;....      int n
131d0 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68  Copied = nLength
131e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
131f0 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20  Copied + nStart 
13200 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20  > bDest.Length) 
13210 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e  nCopied = bDest.
13220 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b  Length - nStart;
13230 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
13240 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  ied + nDataOffse
13250 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65  t > nlen) nCopie
13260 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61  d = nlen - nData
13270 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20  Offset;....     
13280 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30   if (nCopied > 0
13290 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
132a0 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d      IntPtr ptr =
132b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
132c0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
132d0 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20  ue_blob(p);.... 
132e0 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
132f0 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72  opy((IntPtr)(ptr
13300 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61  .ToInt64() + nDa
13310 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74  taOffset), bDest
13320 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65  , nStart, nCopie
13330 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  d);..      }..  
13340 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
13350 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69  {..        nCopi
13360 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d  ed = 0;..      }
13370 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
13380 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d   nCopied;..    }
13390 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
133a0 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65   override double
133b0 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 44 6f   GetParamValueDo
133c0 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74 72 29  uble(IntPtr ptr)
133d0 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c  ..    {..#if !PL
133e0 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
133f0 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 72  AMEWORK..      r
13400 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
13410 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13420 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 70  3_value_double(p
13430 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  tr);..#elif !SQL
13440 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
13450 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65      double value
13460 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20 55   = 0.0;..      U
13470 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
13480 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
13490 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
134a0 70 74 72 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  ptr, ref value);
134b0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
134c0 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  alue;..#else..  
134d0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
134e0 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
134f0 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
13500 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
13510 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
13520 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56 61 6c   int GetParamVal
13530 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72 20 70  ueInt32(IntPtr p
13540 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  tr)..    {..    
13550 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
13560 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13570 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 70  ite3_value_int(p
13580 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
13590 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
135a0 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72  ride long GetPar
135b0 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e 74  amValueInt64(Int
135c0 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
135d0 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
135e0 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
135f0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
13600 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13610 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
13620 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23 65 6c  int64(ptr);..#el
13630 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
13640 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 36 34  ARD..      Int64
13650 20 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20   value = 0;..   
13660 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
13670 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
13680 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72  alue_int64_inter
13690 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61 6c 75  op(ptr, ref valu
136a0 65 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  e);..      retur
136b0 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d  n value;..#else.
136c0 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
136d0 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
136e0 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
136f0 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
13700 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13710 69 64 65 20 73 74 72 69 6e 67 20 47 65 74 50 61  ide string GetPa
13720 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74  ramValueText(Int
13730 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
13740 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
13750 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
13760 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
13770 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
13780 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
13790 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
137a0 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65  _value_text_inte
137b0 72 6f 70 28 70 74 72 2c 20 72 65 66 20 6c 65 6e  rop(ptr, ref len
137c0 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
137d0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
137e0 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
137f0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13800 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
13810 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20 20 20  t(ptr),..       
13820 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13830 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
13840 75 65 5f 62 79 74 65 73 28 70 74 72 29 29 3b 0d  ue_bytes(ptr));.
13850 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
13860 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
13870 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66 69  verride TypeAffi
13880 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c  nity GetParamVal
13890 75 65 54 79 70 65 28 49 6e 74 50 74 72 20 70 74  ueType(IntPtr pt
138a0 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  r)..    {..     
138b0 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
138c0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
138d0 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70  te3_value_type(p
138e0 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tr);..    }.... 
138f0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13900 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
13910 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74  Blob(IntPtr cont
13920 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  ext, byte[] valu
13930 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
13940 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13950 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
13960 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65 78 74  ult_blob(context
13970 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 2e 4c  , value, value.L
13980 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29 28  ength, (IntPtr)(
13990 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  -1));..    }....
139a0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
139b0 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
139c0 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63  nDouble(IntPtr c
139d0 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76  ontext, double v
139e0 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  alue)..    {..#i
139f0 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
13a00 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
13a10 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
13a20 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13a30 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f  result_double(co
13a40 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
13a50 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
13a60 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e  ANDARD..      Un
13a70 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13a80 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
13a90 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
13aa0 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c  context, ref val
13ab0 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
13ac0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
13ad0 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
13ae0 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
13af0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
13b00 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
13b10 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72  void ReturnError
13b20 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
13b30 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
13b40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
13b50 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13b60 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
13b70 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54  error(context, T
13b80 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61  oUTF8(value), va
13b90 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  lue.Length);..  
13ba0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
13bb0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
13bc0 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e  d ReturnInt32(In
13bd0 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e  tPtr context, in
13be0 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  t value)..    {.
13bf0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
13c00 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13c10 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
13c20 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ntext, value);..
13c30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
13c40 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
13c50 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28  oid ReturnInt64(
13c60 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
13c70 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  long value)..   
13c80 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
13c90 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
13ca0 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RK..      Unsafe
13cb0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13cc0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
13cd0 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  64(context, valu
13ce0 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
13cf0 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
13d00 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
13d10 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
13d20 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65  esult_int64_inte
13d30 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66  rop(context, ref
13d40 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
13d50 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
13d60 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
13d70 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
13d80 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
13d90 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13da0 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 4e  ide void ReturnN
13db0 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ull(IntPtr conte
13dc0 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
13dd0 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
13de0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
13df0 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78  sult_null(contex
13e00 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  t);..    }....  
13e10 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13e20 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 54  ide void ReturnT
13e30 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ext(IntPtr conte
13e40 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  xt, string value
13e50 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
13e60 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
13e70 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  8(value);..     
13e80 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13e90 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
13ea0 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
13eb0 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c  , ToUTF8(value),
13ec0 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28   b.Length - 1, (
13ed0 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20  IntPtr)(-1));.. 
13ee0 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45     }....#if INTE
13ef0 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
13f00 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  E..    /// <summ
13f10 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
13f20 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
13f30 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
13f40 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ry in order to c
13f50 72 65 61 74 65 20 61 20 64 69 73 70 6f 73 61 62  reate a disposab
13f60 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75  le..    /// modu
13f70 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
13f80 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
13f90 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
13fa0 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
13fb0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
13fc0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
13fd0 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  odule">..    ///
13fe0 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65   The module obje
13ff0 63 74 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  ct to be used wh
14000 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65 20  en creating the 
14010 6e 61 74 69 76 65 20 64 69 73 70 6f 73 61 62 6c  native disposabl
14020 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f  e module...    /
14030 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
14040 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
14050 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f  ="flags">..    /
14060 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72  // The flags for
14070 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
14080 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
14090 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20  eConnection" /> 
140a0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
140b0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
140c0 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
140d0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
140e0 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51 4c 69  reateModule(SQLi
140f0 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c  teModule module,
14100 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
14110 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20  nFlags flags).. 
14120 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
14130 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
14140 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
14150 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
14160 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
14170 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20  module");....   
14180 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
14190 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
141a0 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64  onFlags.NoLogMod
141b0 75 6c 65 29 20 21 3d 20 53 51 4c 69 74 65 43 6f  ule) != SQLiteCo
141c0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
141d0 4c 6f 67 4d 6f 64 75 6c 65 29 0d 0a 20 20 20 20  LogModule)..    
141e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
141f0 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 72 72     module.LogErr
14200 6f 72 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20  ors = ((flags & 
14210 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
14220 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45  Flags.LogModuleE
14230 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 43  rror) == SQLiteC
14240 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
14250 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29 3b 0d  ogModuleError);.
14260 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64  .            mod
14270 75 6c 65 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e  ule.LogException
14280 73 20 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51  s = ((flags & SQ
14290 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
142a0 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63  ags.LogModuleExc
142b0 65 70 74 69 6f 6e 29 20 3d 3d 20 53 51 4c 69 74  eption) == SQLit
142c0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
142d0 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74  .LogModuleExcept
142e0 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ion);..        }
142f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
14300 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
14310 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
14320 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
14330 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e  tion("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 29 3b 0d 0a 0d 0a 20 20 20  handle");....   
14360 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65       SetLoadExte
14370 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20  nsion(true);..  
14380 20 20 20 20 20 20 4c 6f 61 64 45 78 74 65 6e 73        LoadExtens
14390 69 6f 6e 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ion(UnsafeNative
143a0 4d 65 74 68 6f 64 73 2e 53 51 4c 49 54 45 5f 44  Methods.SQLITE_D
143b0 4c 4c 2c 20 22 73 71 6c 69 74 65 33 5f 76 74 73  LL, "sqlite3_vts
143c0 68 69 6d 5f 69 6e 69 74 22 29 3b 0d 0a 0d 0a 20  him_init");.... 
143d0 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
143e0 65 2e 43 72 65 61 74 65 44 69 73 70 6f 73 61 62  e.CreateDisposab
143f0 6c 65 4d 6f 64 75 6c 65 28 5f 73 71 6c 29 29 0d  leModule(_sql)).
14400 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
14410 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f 64          if (_mod
14420 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ules == null).. 
14430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
14440 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20 44 69  modules = new Di
14450 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
14460 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 28 29   SQLiteModule>()
14470 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14480 20 5f 6d 6f 64 75 6c 65 73 2e 41 64 64 28 6d 6f   _modules.Add(mo
14490 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c  dule.Name, modul
144a0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
144b0 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29     if (_usePool)
144c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
144d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
144e0 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73   _usePool = fals
144f0 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  e;....#if !NET_C
14500 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
14510 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
14530 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55  race.WriteLine(U
14540 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14550 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
14560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14570 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
14580 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
14590 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
145a0 20 20 20 20 20 20 20 22 43 72 65 61 74 65 4d 6f         "CreateMo
145b0 64 75 6c 65 20 28 50 6f 6f 6c 29 20 44 69 73 61  dule (Pool) Disa
145c0 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  bled: {0}",..   
145d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145e0 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28   HandleToString(
145f0 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  )));..#endif..  
14600 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14610 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14620 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
14630 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
14640 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
14650 65 70 74 69 6f 6e 28 47 65 74 4c 61 73 74 45 72  eption(GetLastEr
14660 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
14670 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
14680 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
14690 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
146a0 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
146b0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
146c0 6f 72 64 65 72 20 74 6f 20 63 6c 65 61 6e 75 70  order to cleanup
146d0 20 74 68 65 20 72 65 73 6f 75 72 63 65 73 0d 0a   the resources..
146e0 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
146f0 65 64 20 77 69 74 68 20 61 20 6d 6f 64 75 6c 65  ed with a module
14700 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
14710 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
14720 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
14730 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
14740 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
14750 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
14760 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ule">..    /// T
14770 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74  he module object
14780 20 70 72 65 76 69 6f 75 73 6c 79 20 70 61 73 73   previously pass
14790 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63  ed to the <see c
147a0 72 65 66 3d 22 43 72 65 61 74 65 4d 6f 64 75 6c  ref="CreateModul
147b0 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d  e" />..    /// m
147c0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ethod...    /// 
147d0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
147e0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
147f0 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
14800 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68  The flags for th
14810 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65  e associated <se
14820 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
14830 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a  nnection" /> obj
14840 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
14850 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
14860 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14870 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70  erride void Disp
14880 6f 73 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65  oseModule(SQLite
14890 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53  Module module, S
148a0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
148b0 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20  lags flags)..   
148c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
148d0 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
148e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
148f0 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
14900 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f  ullException("mo
14910 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dule");....     
14920 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73     module.Dispos
14930 65 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e  e();..    }..#en
14940 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  dif....    inter
14950 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49 6e 74  nal override Int
14960 50 74 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e  Ptr AggregateCon
14970 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  text(IntPtr cont
14980 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ext)..    {..   
14990 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
149a0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
149b0 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
149c0 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  context(context,
149d0 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23   1);..    }....#
149e0 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  if INTEROP_VIRTU
149f0 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f  AL_TABLE..    //
14a00 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
14a10 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e   /// Calls the n
14a20 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72  ative SQLite cor
14a30 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64  e library in ord
14a40 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20  er to declare a 
14a50 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
14a60 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e     /// in respon
14a70 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74  se to a call int
14a80 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
14a90 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
14aa0 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e  dule.xCreate" />
14ab0 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65  ..    /// or <se
14ac0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
14ad0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e  ativeModule.xCon
14ae0 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c  nect" /> virtual
14af0 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d   table methods..
14b00 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
14b10 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
14b20 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
14b30 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
14b40 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f  virtual table mo
14b50 64 75 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20  dule that is to 
14b60 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  be responsible f
14b70 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  or the virtual t
14b80 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  able..    /// be
14b90 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
14ba0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
14bb0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
14bc0 6e 61 6d 65 3d 22 73 74 72 53 71 6c 22 3e 0d 0a  name="strSql">..
14bd0 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74 72 69      /// The stri
14be0 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
14bf0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
14c00 64 65 73 63 72 69 62 69 6e 67 20 74 68 65 20 76  describing the v
14c10 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 6f 0d  irtual table to.
14c20 0a 20 20 20 20 2f 2f 2f 20 62 65 20 64 65 63 6c  .    /// be decl
14c30 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ared...    /// <
14c40 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
14c50 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72   <param name="er
14c60 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55  ror">..    /// U
14c70 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65  pon success, the
14c80 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 69   contents of thi
14c90 73 20 70 61 72 61 6d 65 74 65 72 20 61 72 65 20  s parameter are 
14ca0 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e  undefined.  Upon
14cb0 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f   failure,..    /
14cc0 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e  // it should con
14cd0 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72 69  tain an appropri
14ce0 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ate error messag
14cf0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
14d00 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
14d10 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
14d20 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
14d30 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
14d40 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
14d50 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
14d60 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
14d70 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61  eErrorCode Decla
14d80 72 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28 0d  reVirtualTable(.
14d90 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d  .        SQLiteM
14da0 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20  odule module,.. 
14db0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74         string st
14dc0 72 53 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20 72  rSql,..        r
14dd0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
14de0 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
14df0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  {..        if (_
14e00 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
14e10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14e20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f       error = "co
14e30 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
14e40 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b  invalid handle";
14e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
14e60 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
14e70 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
14e80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
14e90 20 20 49 6e 74 50 74 72 20 70 53 71 6c 20 3d 20    IntPtr pSql = 
14ea0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
14eb0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
14ec0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14ed0 20 20 20 20 70 53 71 6c 20 3d 20 53 51 4c 69 74      pSql = SQLit
14ee0 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50  eString.Utf8IntP
14ef0 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 73 74 72  trFromString(str
14f00 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Sql);....       
14f10 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
14f20 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
14f30 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
14f40 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
14f50 62 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b(..            
14f60 20 20 20 20 5f 73 71 6c 2c 20 70 53 71 6c 29 3b      _sql, pSql);
14f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14f80 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65  if ((n == SQLite
14f90 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26  ErrorCode.Ok) &&
14fa0 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e 75 6c 6c   (module != null
14fb0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
14fc0 20 20 20 20 6d 6f 64 75 6c 65 2e 44 65 63 6c 61      module.Decla
14fd0 72 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  red = true;.... 
14fe0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
14ff0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
15000 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20  ode.Ok) error = 
15010 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d  GetLastError();.
15020 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
15030 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20  eturn n;..      
15040 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
15050 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
15060 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
15070 28 70 53 71 6c 20 21 3d 20 49 6e 74 50 74 72 2e  (pSql != IntPtr.
15080 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
15090 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
150a0 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
150b0 72 79 2e 46 72 65 65 28 70 53 71 6c 29 3b 0d 0a  ry.Free(pSql);..
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65  pSql = IntPtr.Ze
150e0 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
150f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
15100 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
15110 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
15120 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74  // Calls the nat
15130 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  ive SQLite core 
15140 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72  library in order
15150 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20 76 69   to declare a vi
15160 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
15170 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 69 6e   /// function in
15180 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63   response to a c
15190 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65  all into the <se
151a0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
151b0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65  ativeModule.xCre
151c0 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  ate" />..    ///
151d0 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49   or <see cref="I
151e0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
151f0 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  le.xConnect" /> 
15200 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65  virtual table me
15210 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  thods...    /// 
15220 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
15230 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
15240 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f  "module">..    /
15250 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20 74  // The virtual t
15260 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74  able module that
15270 20 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e   is to be respon
15280 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69  sible for the vi
15290 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
152a0 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 62 65   /// function be
152b0 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
152c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
152d0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
152e0 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 43 6f  name="argumentCo
152f0 75 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  unt">..    /// T
15300 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
15310 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75  uments to the fu
15320 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63  nction being dec
15330 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lared...    /// 
15340 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
15350 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
15360 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
15370 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
15380 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65  unction being de
15390 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  clared...    ///
153a0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
153b0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
153c0 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f  error">..    ///
153d0 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
153e0 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  he contents of t
153f0 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 61 72  his parameter ar
15400 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70  e undefined.  Up
15410 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20  on failure,..   
15420 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63   /// it should c
15430 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70  ontain an approp
15440 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73  riate error mess
15450 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  age...    /// </
15460 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
15470 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
15480 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
15490 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
154a0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
154b0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
154c0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
154d0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63  iteErrorCode Dec
154e0 6c 61 72 65 56 69 72 74 75 61 6c 46 75 6e 63 74  lareVirtualFunct
154f0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ion(..        SQ
15500 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
15510 65 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  e,..        int 
15520 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a  argumentCount,..
15530 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
15540 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  ame,..        re
15550 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
15560 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
15570 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
15580 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
15590 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
155a0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e      error = "con
155b0 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69  nection has an i
155c0 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d  nvalid handle";.
155d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
155e0 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
155f0 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
15600 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
15610 20 49 6e 74 50 74 72 20 70 4e 61 6d 65 20 3d 20   IntPtr pName = 
15620 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
15630 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
15640 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15650 20 20 20 20 70 4e 61 6d 65 20 3d 20 53 51 4c 69      pName = SQLi
15660 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74  teString.Utf8Int
15670 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 6e 61  PtrFromString(na
15680 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
15690 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
156a0 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
156b0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
156c0 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e  te3_overload_fun
156d0 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
156e0 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 4e          _sql, pN
156f0 61 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75  ame, argumentCou
15700 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
15710 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
15720 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
15730 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74   error = GetLast
15740 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  Error();....    
15750 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
15760 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
15770 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
15780 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15790 20 20 20 20 20 20 69 66 20 28 70 4e 61 6d 65 20        if (pName 
157a0 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
157b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157d0 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
157e0 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  e(pName);..     
157f0 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65             pName
15800 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
15810 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
15820 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
15830 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
15840 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
15850 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f     /// Enables o
15860 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e  r disabled exten
15870 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20  sion loading by 
15880 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f  SQLite...    ///
15890 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
158a0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
158b0 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20  ="bOnOff">..    
158c0 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62  /// True to enab
158d0 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78  le loading of ex
158e0 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20  tensions, false 
158f0 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20  to disable...   
15900 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
15910 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
15920 72 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f 61  ride void SetLoa
15930 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20  dExtension(bool 
15940 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a  bOnOff)..    {..
15950 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
15960 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
15970 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
15980 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c  sqlite3_enable_l
15990 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a  oad_extension(..
159a0 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
159b0 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
159c0 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   0));....       
159d0 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
159e0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
159f0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
15a00 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
15a10 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
15a20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
15a30 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
15a40 20 4c 6f 61 64 73 20 61 20 53 51 4c 69 74 65 20   Loads a SQLite 
15a50 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72  extension librar
15a60 79 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64  y from the named
15a70 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   file...    /// 
15a80 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
15a90 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
15aa0 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
15ab0 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
15ac0 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c 69 6e   the dynamic lin
15ad0 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 63  k library file c
15ae0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78  ontaining the ex
15af0 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  tension...    //
15b00 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
15b10 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
15b20 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20 20  "procName">..   
15b30 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
15b40 20 74 68 65 20 65 78 70 6f 72 74 65 64 20 66 75   the exported fu
15b50 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 69  nction used to i
15b60 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 65 78  nitialize the ex
15b70 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  tension...    //
15b80 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20 64  / If null, the d
15b90 65 66 61 75 6c 74 20 22 73 71 6c 69 74 65 33 5f  efault "sqlite3_
15ba0 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22 20  extension_init" 
15bb0 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20  will be used... 
15bc0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
15bd0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
15be0 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 61 64  erride void Load
15bf0 45 78 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e 67  Extension(string
15c00 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69 6e   fileName, strin
15c10 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20 20  g procName)..   
15c20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
15c30 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  fileName == null
15c40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
15c50 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
15c60 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
15c70 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  fileName");.... 
15c80 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 45         IntPtr pE
15c90 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
15ca0 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
15cb0 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
15cc0 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
15cd0 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 20 3d  ] utf8FileName =
15ce0 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54   UTF8Encoding.UT
15cf0 46 38 2e 47 65 74 42 79 74 65 73 28 66 69 6c 65  F8.GetBytes(file
15d00 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 20  Name + '\0');.. 
15d10 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
15d20 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d  ] utf8ProcName =
15d30 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
15d40 20 20 20 20 20 20 69 66 20 28 70 72 6f 63 4e 61        if (procNa
15d50 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66               utf
15d70 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46 38  8ProcName = UTF8
15d80 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65  Encoding.UTF8.Ge
15d90 74 42 79 74 65 73 28 70 72 6f 63 4e 61 6d 65 20  tBytes(procName 
15da0 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20 20  + '\0');....    
15db0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
15dc0 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
15dd0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
15de0 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
15df0 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ension(..       
15e00 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 75           _sql, u
15e10 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74 66  tf8FileName, utf
15e20 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20 70  8ProcName, ref p
15e30 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
15e40 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
15e50 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
15e60 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
15e70 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
15e80 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
15e90 2c 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  , UTF8ToString(p
15ea0 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20 20  Error, -1));..  
15eb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15ec0 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
15ed0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15ee0 20 69 66 20 28 70 45 72 72 6f 72 20 21 3d 20 49   if (pError != I
15ef0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
15f00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15f10 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
15f20 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
15f30 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 45 72  sqlite3_free(pEr
15f40 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
15f50 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
15f60 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
15f70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15f80 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
15f90 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73  .    /// Enables
15fa0 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78 74   or disabled ext
15fb0 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64  ended result cod
15fc0 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 53  es returned by S
15fd0 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e 74 65 72  QLite..    inter
15fe0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
15ff0 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65 73  d SetExtendedRes
16000 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f  ultCodes(bool bO
16010 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nOff)..    {..  
16020 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
16030 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
16040 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
16050 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73  te3_extended_res
16060 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20 20  ult_codes(..    
16070 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e        _sql, (bOn
16080 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d  Off ? -1 : 0));.
16090 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ...      if (n !
160a0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
160b0 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
160c0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
160d0 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
160e0 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ));..    }..    
160f0 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73  /// Gets the las
16100 74 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63  t SQLite error c
16110 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ode..    interna
16120 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
16130 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 75 6c  eErrorCode Resul
16140 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a  tCode()..    {..
16150 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
16160 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
16170 2e 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65  .sqlite3_errcode
16180 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (_sql);..    }..
16190 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65      /// Gets the
161a0 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 78 74   last SQLite ext
161b0 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65  ended error code
161c0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
161d0 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
161e0 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65 64  rorCode Extended
161f0 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20  ResultCode()..  
16200 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
16210 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
16220 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
16230 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 5f  tended_errcode(_
16240 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
16250 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f      /// Add a lo
16260 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68  g message via th
16270 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33  e SQLite sqlite3
16280 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d  _log interface..
16290 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
162a0 65 72 72 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d  erride void LogM
162b0 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72 72  essage(SQLiteErr
162c0 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c  orCode iErrCode,
162d0 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65   string zMessage
162e0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
162f0 53 74 61 74 69 63 4c 6f 67 4d 65 73 73 61 67 65  StaticLogMessage
16300 28 69 45 72 72 43 6f 64 65 2c 20 7a 4d 65 73 73  (iErrCode, zMess
16310 61 67 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  age);..    }....
16320 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f      /// Add a lo
16330 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68  g message via th
16340 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33  e SQLite sqlite3
16350 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d  _log interface..
16360 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
16370 61 74 69 63 20 76 6f 69 64 20 53 74 61 74 69 63  atic void Static
16380 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74  LogMessage(SQLit
16390 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72 43  eErrorCode iErrC
163a0 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73  ode, string zMes
163b0 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sage)..    {..  
163c0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
163d0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
163e0 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c 20 54 6f  log(iErrCode, To
163f0 55 54 46 38 28 7a 4d 65 73 73 61 67 65 29 29 3b  UTF8(zMessage));
16400 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49  ..    }....#if I
16410 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 7c 7c 20  NTEROP_CODEC || 
16420 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
16430 53 45 45 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  SEE..    interna
16440 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
16450 53 65 74 50 61 73 73 77 6f 72 64 28 62 79 74 65  SetPassword(byte
16460 5b 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  [] passwordBytes
16470 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
16480 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
16490 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
164a0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
164b0 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f  key(_sql, passwo
164c0 72 64 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72  rdBytes, passwor
164d0 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d  dBytes.Length);.
164e0 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
164f0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
16500 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
16510 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
16520 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
16530 3b 0d 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f  ;..      _usePoo
16540 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  l = false;..    
16550 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
16560 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
16570 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62  ChangePassword(b
16580 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72  yte[] newPasswor
16590 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a  dBytes)..    {..
165a0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
165b0 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
165c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
165d0 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c  lite3_rekey(_sql
165e0 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  , newPasswordByt
165f0 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64  es, (newPassword
16600 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f  Bytes == null) ?
16610 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64   0 : newPassword
16620 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a  Bytes.Length);..
16630 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
16640 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
16650 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
16660 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
16670 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
16680 0d 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c  ..      _usePool
16690 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d   = false;..    }
166a0 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
166b0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
166c0 65 20 76 6f 69 64 20 53 65 74 50 72 6f 67 72 65  e void SetProgre
166d0 73 73 48 6f 6f 6b 28 69 6e 74 20 6e 4f 70 73 2c  ssHook(int nOps,
166e0 20 53 51 4c 69 74 65 50 72 6f 67 72 65 73 73 43   SQLiteProgressC
166f0 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
16700 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 55 6e     {..        Un
16710 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
16720 73 2e 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65  s.sqlite3_progre
16730 73 73 5f 68 61 6e 64 6c 65 72 28 5f 73 71 6c 2c  ss_handler(_sql,
16740 20 6e 4f 70 73 2c 20 66 75 6e 63 2c 20 49 6e 74   nOps, func, Int
16750 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
16760 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
16770 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
16780 53 65 74 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f  SetAuthorizerHoo
16790 6b 28 53 51 4c 69 74 65 41 75 74 68 6f 72 69 7a  k(SQLiteAuthoriz
167a0 65 72 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  erCallback func)
167b0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
167c0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
167d0 64 73 2e 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ds.sqlite3_set_a
167e0 75 74 68 6f 72 69 7a 65 72 28 5f 73 71 6c 2c 20  uthorizer(_sql, 
167f0 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
16800 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
16810 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
16820 69 64 65 20 76 6f 69 64 20 53 65 74 55 70 64 61  ide void SetUpda
16830 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64  teHook(SQLiteUpd
16840 61 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  ateCallback func
16850 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
16860 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
16870 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75 70 64 61  ods.sqlite3_upda
16880 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75  te_hook(_sql, fu
16890 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
168a0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
168b0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
168c0 65 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74  e void SetCommit
168d0 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69  Hook(SQLiteCommi
168e0 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  tCallback func).
168f0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
16900 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
16910 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74  s.sqlite3_commit
16920 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63  _hook(_sql, func
16930 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
16940 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
16950 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
16960 76 6f 69 64 20 53 65 74 54 72 61 63 65 43 61 6c  void SetTraceCal
16970 6c 62 61 63 6b 28 53 51 4c 69 74 65 54 72 61 63  lback(SQLiteTrac
16980 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  eCallback func).
16990 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
169a0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
169b0 73 2e 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  s.sqlite3_trace(
169c0 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
169d0 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
169e0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
169f0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
16a00 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53  etRollbackHook(S
16a10 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c  QLiteRollbackCal
16a20 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
16a30 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
16a40 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
16a50 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68  lite3_rollback_h
16a60 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20  ook(_sql, func, 
16a70 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
16a80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
16a90 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
16aa0 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20 73 65  // Allows the se
16ab0 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69  tting of a loggi
16ac0 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f  ng callback invo
16ad0 6b 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68  ked by SQLite wh
16ae0 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f  en a..    /// lo
16af0 67 20 65 76 65 6e 74 20 6f 63 63 75 72 73 2e 20  g event occurs. 
16b00 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61   Only one callba
16b10 63 6b 20 6d 61 79 20 62 65 20 73 65 74 2e 20 20  ck may be set.  
16b20 49 66 20 4e 55 4c 4c 20 69 73 20 70 61 73 73 65  If NULL is passe
16b30 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20  d,..    /// the 
16b40 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
16b50 20 69 73 20 75 6e 72 65 67 69 73 74 65 72 65 64   is unregistered
16b60 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
16b70 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
16b80 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
16b90 22 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 66  ">The callback f
16ba0 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b  unction to invok
16bb0 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
16bc0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
16bd0 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f  urns a result co
16be0 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  de</returns>..  
16bf0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
16c00 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
16c10 6f 64 65 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61  ode SetLogCallba
16c20 63 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c  ck(SQLiteLogCall
16c30 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
16c40 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
16c50 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
16c60 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
16c70 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66  ods.sqlite3_conf
16c80 69 67 5f 6c 6f 67 28 0d 0a 20 20 20 20 20 20 20  ig_log(..       
16c90 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
16ca0 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  gOpsEnum.SQLITE_
16cb0 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66 75 6e 63  CONFIG_LOG, func
16cc0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
16cd0 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
16ce0 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n rc;..    }....
16cf0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d50 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
16d60 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
16d70 2f 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 20  / Creates a new 
16d80 53 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f 62  SQLite backup ob
16d90 6a 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74 68  ject based on th
16da0 65 20 70 72 6f 76 69 64 65 64 20 64 65 73 74 69  e provided desti
16db0 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  nation..    /// 
16dc0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
16dd0 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63 65  ion.  The source
16de0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
16df0 74 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d  tion is the one.
16e00 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61  .    /// associa
16e10 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 62  ted with this ob
16e20 6a 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72 63  ject.  The sourc
16e30 65 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69 6f  e and destinatio
16e40 6e 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  n database..    
16e50 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  /// connections 
16e60 63 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73 61  cannot be the sa
16e70 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  me...    /// </s
16e80 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
16e90 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65   <param name="de
16ea0 73 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74 69  stCnn">The desti
16eb0 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20  nation database 
16ec0 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72  connection.</par
16ed0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
16ee0 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61  ram name="destNa
16ef0 6d 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74  me">The destinat
16f00 69 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61 6d  ion database nam
16f10 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
16f20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
16f30 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68 65  "sourceName">The
16f40 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
16f50 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a   name.</param>..
16f60 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
16f70 3e 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74  >The newly creat
16f80 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  ed backup object
16f90 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
16fa0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
16fb0 64 65 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20  de SQLiteBackup 
16fc0 49 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75 70  InitializeBackup
16fd0 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
16fe0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74  eConnection dest
16ff0 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  Cnn,..        st
17000 72 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a  ring destName,..
17010 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
17020 6f 75 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20 20  ourceName..     
17030 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
17040 20 20 20 20 20 69 66 20 28 64 65 73 74 43 6e 6e       if (destCnn
17050 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
17060 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
17070 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
17080 65 70 74 69 6f 6e 28 22 64 65 73 74 43 6e 6e 22  eption("destCnn"
17090 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
170a0 20 28 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e 75   (destName == nu
170b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
170c0 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
170d0 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
170e0 28 22 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d  ("destName");...
170f0 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f 75  .        if (sou
17100 72 63 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  rceName == null)
17110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
17120 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
17130 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 73  NullException("s
17140 6f 75 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a  ourceName");....
17150 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 33 20          SQLite3 
17160 64 65 73 74 53 71 6c 69 74 65 33 20 3d 20 64 65  destSqlite3 = de
17170 73 74 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53 51  stCnn._sql as SQ
17180 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20 20  Lite3;....      
17190 20 20 69 66 20 28 64 65 73 74 53 71 6c 69 74 65    if (destSqlite
171a0 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  3 == null)..    
171b0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
171c0 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74  w ArgumentExcept
171d0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
171e0 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74 69        "Destinati
171f0 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  on connection ha
17200 73 20 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c 0d  s no wrapper.",.
17210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17220 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a   "destCnn");....
17230 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
17240 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64  nnectionHandle d
17250 65 73 74 48 61 6e 64 6c 65 20 3d 20 64 65 73 74  estHandle = dest
17260 53 71 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d  Sqlite3._sql;...
17270 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73  .        if (des
17280 74 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  tHandle == null)
17290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
172a0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
172b0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
172c0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73              "Des
172d0 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  tination connect
172e0 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
172f0 69 64 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20  id handle.",..  
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64                "d
17310 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20  estCnn");....   
17320 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
17330 63 74 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75 72  ctionHandle sour
17340 63 65 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b  ceHandle = _sql;
17350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
17360 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d 20  sourceHandle == 
17370 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17380 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
17390 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
173a0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
173b0 20 20 20 20 20 20 20 20 20 22 53 6f 75 72 63 65           "Source
173c0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
173d0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
173e0 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
173f0 20 62 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61 6d   byte[] zDestNam
17400 65 20 3d 20 54 6f 55 54 46 38 28 64 65 73 74 4e  e = ToUTF8(destN
17410 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62  ame);..        b
17420 79 74 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61 6d  yte[] zSourceNam
17430 65 20 3d 20 54 6f 55 54 46 38 28 73 6f 75 72 63  e = ToUTF8(sourc
17440 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
17450 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
17460 61 6e 64 6c 65 20 62 61 63 6b 75 70 48 61 6e 64  andle backupHand
17470 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  le = null;....  
17480 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
17490 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
174a0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
174b0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
174c0 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
174d0 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
174e0 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
174f0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
17500 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
17510 74 72 20 62 61 63 6b 75 70 20 3d 20 55 6e 73 61  tr backup = Unsa
17520 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
17530 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69  sqlite3_backup_i
17540 6e 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  nit(..          
17550 20 20 20 20 20 20 64 65 73 74 48 61 6e 64 6c 65        destHandle
17560 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75  , zDestName, sou
17570 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72  rceHandle, zSour
17580 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  ceName);....    
17590 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
175a0 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  up == IntPtr.Zer
175b0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
175c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
175d0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
175e0 64 65 20 72 65 73 75 6c 74 43 6f 64 65 20 3d 20  de resultCode = 
175f0 52 65 73 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d  ResultCode();...
17600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17610 20 69 66 20 28 72 65 73 75 6c 74 43 6f 64 65 20   if (resultCode 
17620 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
17630 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
17640 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
17650 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
17660 70 74 69 6f 6e 28 72 65 73 75 6c 74 43 6f 64 65  ption(resultCode
17670 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
17680 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
17690 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
176a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
176b0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
176c0 63 65 70 74 69 6f 6e 28 22 66 61 69 6c 65 64 20  ception("failed 
176d0 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 62 61  to initialize ba
176e0 63 6b 75 70 22 29 3b 0d 0a 20 20 20 20 20 20 20  ckup");..       
176f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
17700 20 20 20 20 20 20 62 61 63 6b 75 70 48 61 6e 64        backupHand
17710 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 42  le = new SQLiteB
17720 61 63 6b 75 70 48 61 6e 64 6c 65 28 64 65 73 74  ackupHandle(dest
17730 48 61 6e 64 6c 65 2c 20 62 61 63 6b 75 70 29 3b  Handle, backup);
17740 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
17750 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
17760 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
17770 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e  d(null, new Conn
17780 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28  ectionEventArgs(
17790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
177a0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
177b0 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
177c0 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
177d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 75  ..            nu
177e0 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20  ll, null, null, 
177f0 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 6e 75  backupHandle, nu
17800 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  ll, new object[]
17810 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17820 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c  typeof(SQLite3),
17830 20 64 65 73 74 43 6e 6e 2c 20 64 65 73 74 4e 61   destCnn, destNa
17840 6d 65 2c 20 73 6f 75 72 63 65 4e 61 6d 65 20 7d  me, sourceName }
17850 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ));....        r
17860 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65  eturn new SQLite
17870 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
17880 20 20 20 20 20 74 68 69 73 2c 20 62 61 63 6b 75       this, backu
17890 70 48 61 6e 64 6c 65 2c 20 64 65 73 74 48 61 6e  pHandle, destHan
178a0 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20  dle, zDestName, 
178b0 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d 0a 20  sourceHandle,.. 
178c0 20 20 20 20 20 20 20 20 20 20 20 7a 53 6f 75 72             zSour
178d0 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d  ceName);..    }.
178e0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
178f0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f  ary>..    /// Co
17900 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70 61 67  pies up to N pag
17910 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72  es from the sour
17920 63 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  ce database to t
17930 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a  he destination..
17940 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
17950 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
17960 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62   the specified b
17970 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
17980 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
17990 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
179a0 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
179b0 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
179c0 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d  t to use.</param
179d0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
179e0 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d  m name="nPage">.
179f0 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d  .    /// The num
17a00 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
17a10 63 6f 70 79 2c 20 6e 65 67 61 74 69 76 65 20 74  copy, negative t
17a20 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69  o copy all remai
17a30 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20 20  ning pages...   
17a40 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
17a50 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
17a60 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20 20  me="retry">..   
17a70 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72 75 65   /// Set to true
17a80 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   if the operatio
17a90 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  n needs to be re
17aa0 74 72 69 65 64 20 64 75 65 20 74 6f 20 64 61 74  tried due to dat
17ab0 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c  abase..    /// l
17ac0 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 3b 20 6f  ocking issues; o
17ad0 74 68 65 72 77 69 73 65 2c 20 73 65 74 20 74 6f  therwise, set to
17ae0 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f   false...    ///
17af0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
17b00 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
17b10 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74 68    /// True if th
17b20 65 72 65 20 61 72 65 20 6d 6f 72 65 20 70 61 67  ere are more pag
17b30 65 73 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2c  es to be copied,
17b40 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65   false otherwise
17b50 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
17b60 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
17b70 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
17b80 6c 20 53 74 65 70 42 61 63 6b 75 70 28 0d 0a 20  l StepBackup(.. 
17b90 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
17ba0 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20  kup backup,..   
17bb0 20 20 20 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d       int nPage,.
17bc0 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
17bd0 6c 20 72 65 74 72 79 0d 0a 20 20 20 20 20 20 20  l retry..       
17be0 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
17bf0 20 20 20 72 65 74 72 79 20 3d 20 66 61 6c 73 65     retry = false
17c00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
17c10 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
17c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
17c30 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
17c40 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
17c50 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
17c60 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
17c70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
17c80 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
17c90 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
17ca0 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
17cb0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17cc0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
17cd0 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
17ce0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
17cf0 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
17d00 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
17d10 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
17d20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
17d30 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
17d40 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
17d50 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
17d60 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
17d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
17d80 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
17d90 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
17da0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
17db0 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
17dc0 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
17dd0 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
17de0 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
17df0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
17e00 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
17e10 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
17e20 62 61 63 6b 75 70 5f 73 74 65 70 28 68 61 6e 64  backup_step(hand
17e30 6c 65 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a  lePtr, nPage);..
17e40 20 20 20 20 20 20 20 20 62 61 63 6b 75 70 2e 5f          backup._
17e50 73 74 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20  stepResult = n; 
17e60 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f  /* NOTE: Save fo
17e70 72 20 75 73 65 20 62 79 20 46 69 6e 69 73 68 42  r use by FinishB
17e80 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20  ackup. */....   
17e90 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
17ea0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
17eb0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
17ec0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
17ed0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
17ee0 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20  }..        else 
17ef0 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
17f00 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a  rrorCode.Busy)..
17f10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17f20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74         retry = t
17f30 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
17f40 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
17f50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17f60 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
17f70 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
17f80 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20 20  .Locked)..      
17f90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17fa0 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a   retry = true;..
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
17fc0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
17fd0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
17fe0 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
17ff0 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29  eErrorCode.Done)
18000 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
18010 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18020 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
18030 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
18040 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
18050 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
18060 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
18070 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
18080 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  r());..        }
18090 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
180a0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
180b0 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
180c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
180d0 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62  s remaining to b
180e0 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  e copied from th
180f0 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f  e source..    //
18100 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  / database to th
18110 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  e destination da
18120 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
18130 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  d with the speci
18140 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61  fied..    /// ba
18150 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  ckup object...  
18160 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
18170 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
18180 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
18190 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
181a0 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61   to check.</para
181b0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
181c0 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20  urns>The number 
181d0 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69  of pages remaini
181e0 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2e  ng to be copied.
181f0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
18200 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
18210 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42  e int RemainingB
18220 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
18230 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63  SQLiteBackup bac
18240 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  kup..        )..
18250 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
18260 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
18270 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
18280 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
18290 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
182a0 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
182b0 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
182c0 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
182d0 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
182e0 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
182f0 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
18300 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
18310 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
18320 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
18330 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
18340 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
18350 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
18360 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
18370 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
18380 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
18390 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
183a0 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
183b0 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
183c0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
183d0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
183e0 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
183f0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
18400 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
18410 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
18420 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
18430 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  er.");....      
18440 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
18450 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
18460 69 74 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61  ite3_backup_rema
18470 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74 72 29  ining(handlePtr)
18480 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
18490 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
184a0 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
184b0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
184c0 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
184d0 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
184e0 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
184f0 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70 65  /// with the spe
18500 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62  cified backup ob
18510 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
18520 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
18530 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
18540 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
18550 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65  up object to che
18560 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ck.</param>..   
18570 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
18580 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
18590 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
185a0 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 2e 3c  ource database.<
185b0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
185c0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
185d0 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74 42 61   int PageCountBa
185e0 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
185f0 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
18600 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  up..        ).. 
18610 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
18620 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
18630 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
18640 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
18650 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
18660 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
18670 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
18680 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
18690 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
186a0 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
186b0 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
186c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
186d0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
186e0 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
186f0 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
18700 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
18710 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
18720 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
18730 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
18740 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
18750 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
18760 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
18770 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
18780 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
18790 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
187a0 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
187b0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
187c0 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
187d0 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
187e0 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
187f0 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r.");....       
18800 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
18810 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
18820 74 65 33 5f 62 61 63 6b 75 70 5f 70 61 67 65 63  te3_backup_pagec
18830 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74 72 29 3b  ount(handlePtr);
18840 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
18850 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
18860 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20 74    /// Destroys t
18870 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
18880 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61  , rolling back a
18890 6e 79 20 62 61 63 6b 75 70 20 74 68 61 74 20 6d  ny backup that m
188a0 61 79 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f  ay be in..    //
188b0 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20  / progess...    
188c0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
188d0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
188e0 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
188f0 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
18900 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61  o destroy.</para
18910 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
18920 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 46   override void F
18930 69 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a 20 20  inishBackup(..  
18940 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
18950 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20  up backup..     
18960 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
18970 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
18980 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
18990 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
189a0 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
189b0 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
189c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
189d0 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
189e0 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
189f0 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
18a00 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
18a10 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
18a20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
18a30 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
18a40 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
18a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18a60 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
18a70 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
18a80 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
18a90 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
18aa0 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
18ab0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
18ac0 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
18ad0 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
18ae0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
18af0 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
18b00 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
18b10 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
18b20 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
18b30 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
18b40 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
18b50 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
18b60 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51  DARD..        SQ
18b70 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
18b80 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
18b90 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
18ba0 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65  ckup_finish_inte
18bb0 72 6f 70 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  rop(handlePtr);.
18bc0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
18bd0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
18be0 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
18bf0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
18c00 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61  backup_finish(ha
18c10 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6e 64 69  ndlePtr);..#endi
18c20 66 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c  f..        handl
18c30 65 2e 53 65 74 48 61 6e 64 6c 65 41 73 49 6e 76  e.SetHandleAsInv
18c40 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66 20 43  alid();....#if C
18c50 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20 20 20  OUNT_HANDLE..   
18c60 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53       if ((n == S
18c70 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
18c80 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20 62 61 63 6b  k) || (n == back
18c90 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29  up._stepResult))
18ca0 20 68 61 6e 64 6c 65 2e 57 61 73 52 65 6c 65 61   handle.WasRelea
18cb0 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69 66  sedOk();..#endif
18cc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
18cd0 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
18ce0 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e 20  rCode.Ok) && (n 
18cf0 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52  != backup._stepR
18d00 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20  esult))..       
18d10 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
18d20 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
18d30 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
18d40 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
18d50 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18db0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
18dc0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
18dd0 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65  etermines if the
18de0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
18df0 72 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e  rary has been in
18e00 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68  itialized for th
18e10 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65  e..    /// curre
18e20 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20  nt process...   
18e30 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
18e40 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
18e50 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f  s>..    /// A bo
18e60 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67  olean indicating
18e70 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
18e80 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
18e90 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
18ea0 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61  ..    /// initia
18eb0 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75  lized for the cu
18ec0 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
18ed0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
18ee0 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
18ef0 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49   override bool I
18f00 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a  sInitialized()..
18f10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
18f20 65 74 75 72 6e 20 53 74 61 74 69 63 49 73 49 6e  eturn StaticIsIn
18f30 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20 20  itialized();..  
18f40 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
18f50 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
18f60 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
18f70 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
18f80 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
18f90 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
18fa0 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
18fb0 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
18fc0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
18fd0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
18fe0 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
18ff0 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74   boolean indicat
19000 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
19010 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ot the SQLite co
19020 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
19030 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69  een..    /// ini
19040 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
19050 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
19060 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
19070 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
19080 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  nal static bool 
19090 53 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69  StaticIsInitiali
190a0 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  zed()..    {..  
190b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
190c0 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 50 72 65    // BUGFIX: Pre
190d0 76 65 6e 74 20 72 61 63 65 73 20 77 69 74 68 20  vent races with 
190e0 6f 74 68 65 72 20 74 68 72 65 61 64 73 20 66 6f  other threads fo
190f0 72 20 74 68 69 73 20 65 6e 74 69 72 65 20 62 6c  r this entire bl
19100 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20 20  ock, due..      
19110 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74 6f 20    //         to 
19120 74 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79 20  the try/finally 
19130 73 65 6d 61 6e 74 69 63 73 2e 20 20 53 65 65 20  semantics.  See 
19140 74 69 63 6b 65 74 20 5b 37 32 39 30 35 63 39 61  ticket [72905c9a
19150 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  77]...        //
19160 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28  ..        lock (
19170 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
19180 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19190 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
191a0 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65 20    // NOTE: Save 
191b0 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
191c0 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73 20 61   logging class a
191d0 6e 64 20 74 68 65 6e 20 72 65 73 74 6f 72 65 20  nd then restore 
191e0 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  it..            
191f0 2f 2f 20 20 20 20 20 20 20 61 66 74 65 72 20 77  //       after w
19200 65 20 61 72 65 20 64 6f 6e 65 20 74 6f 20 61 76  e are done to av
19210 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f 20  oid logging too 
19220 6d 61 6e 79 20 66 61 6c 73 65 20 65 72 72 6f 72  many false error
19230 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
19240 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19250 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c 65  bool savedEnable
19260 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e  d = SQLiteLog.En
19270 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  abled;..        
19280 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e      SQLiteLog.En
19290 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a  abled = false;..
192a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
192b0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
192c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
192d0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
192e0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
192f0 68 69 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d 75  his method [ab]u
19300 73 65 73 20 74 68 65 20 66 61 63 74 20 74 68 61  ses the fact tha
19310 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c  t SQLite will al
19320 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ways..          
19330 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
19340 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
19350 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f  OR for any unkno
19360 77 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  wn configuration
19370 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20   option..       
19380 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
19390 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20 53    *unless* the S
193a0 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 68 61  QLite library ha
193b0 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69  s already been i
193c0 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20  nitialized...   
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
193e0 20 20 20 20 20 20 49 6e 20 74 68 61 74 20 63 61        In that ca
193f0 73 65 20 69 74 20 77 69 6c 6c 20 61 6c 77 61 79  se it will alway
19400 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  s return SQLITE_
19410 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20 20 20 20  MISUSE...       
19420 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
19440 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
19450 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
19460 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
19470 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20  nfig_none(..    
19480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19490 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
194a0 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
194b0 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20  G_NONE);....    
194c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
194d0 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  rn (rc == SQLite
194e0 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65  ErrorCode.Misuse
194f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
19500 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  }..            f
19510 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
19520 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19530 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
19540 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64  .Enabled = saved
19550 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20  Enabled;..      
19560 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19570 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
19580 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
19590 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66      /// Helper f
195a0 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69  unction to retri
195b0 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20  eve a column of 
195c0 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74  data from an act
195d0 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  ive statement...
195e0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
195f0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
19600 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54  am name="stmt">T
19610 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
19620 6e 67 20 73 74 65 70 28 29 27 64 20 74 68 72 6f  ng step()'d thro
19630 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ugh</param>..   
19640 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
19650 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c 61  ="flags">The fla
19660 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
19670 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  th the connectio
19680 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
19690 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
196a0 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c 75  "index">The colu
196b0 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74 72  mn index to retr
196c0 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ieve</param>..  
196d0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
196e0 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65  e="typ">The type
196f0 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e   of data contain
19700 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ed in the column
19710 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c 69  .  If Uninitiali
19720 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74 69  zed, this functi
19730 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76 65  on will retrieve
19740 20 74 68 65 20 64 61 74 61 74 79 70 65 20 69 6e   the datatype in
19750 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72 61  formation.</para
19760 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
19770 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68 65  urns>Returns the
19780 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f 6c   data in the col
19790 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  umn</returns>.. 
197a0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
197b0 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56  ride object GetV
197c0 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74 65  alue(SQLiteState
197d0 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
197e0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
197f0 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
19800 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74 79  x, SQLiteType ty
19810 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  p)..    {..     
19820 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66   TypeAffinity af
19830 66 20 3d 20 74 79 70 2e 41 66 66 69 6e 69 74 79  f = typ.Affinity
19840 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 61 66 66  ;..      if (aff
19850 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
19860 2e 4e 75 6c 6c 29 20 72 65 74 75 72 6e 20 44 42  .Null) return DB
19870 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20  Null.Value;..   
19880 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c     Type t = null
19890 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74  ;....      if (t
198a0 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70  yp.Type != DbTyp
198b0 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20  e.Object)..     
198c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20   {..        t = 
198d0 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51  SQLiteConvert.SQ
198e0 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74  LiteTypeToType(t
198f0 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66  yp);..        af
19900 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69  f = TypeToAffini
19910 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ty(t);..      }.
19920 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c  ...      if ((fl
19930 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
19940 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41  ectionFlags.GetA
19950 6c 6c 41 73 54 65 78 74 29 20 3d 3d 20 53 51 4c  llAsText) == SQL
19960 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
19970 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29  gs.GetAllAsText)
19980 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
19990 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c  rn GetText(stmt,
199a0 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
199b0 20 20 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a    switch (aff)..
199c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
199d0 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
199e0 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20  ty.Blob:..      
199f0 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65      if (typ.Type
19a00 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20   == DbType.Guid 
19a10 26 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20  && typ.Affinity 
19a20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
19a30 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Text)..         
19a40 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
19a50 69 64 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c  id(GetText(stmt,
19a60 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20   index));....   
19a70 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28         int n = (
19a80 69 6e 74 29 47 65 74 42 79 74 65 73 28 73 74 6d  int)GetBytes(stm
19a90 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c  t, index, 0, nul
19aa0 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20  l, 0, 0);..     
19ab0 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
19ac0 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20  new byte[n];..  
19ad0 20 20 20 20 20 20 20 20 47 65 74 42 79 74 65 73          GetBytes
19ae0 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c  (stmt, index, 0,
19af0 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20   b, 0, n);....  
19b00 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e          if (typ.
19b10 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47  Type == DbType.G
19b20 75 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d  uid && n == 16).
19b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
19b40 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b  urn new Guid(b);
19b50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
19b60 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20  turn b;..       
19b70 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
19b80 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20  ty.DateTime:..  
19b90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
19ba0 65 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c  etDateTime(stmt,
19bb0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
19bc0 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
19bd0 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20  ity.Double:..   
19be0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
19bf0 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74  null) return Get
19c00 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64  Double(stmt, ind
19c10 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
19c20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43  return Convert.C
19c30 68 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75  hangeType(GetDou
19c40 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ble(stmt, index)
19c50 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  , t, null);..   
19c60 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
19c70 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20  finity.Int64:.. 
19c80 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
19c90 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47  = null) return G
19ca0 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  etInt64(stmt, in
19cb0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
19cc0 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
19cd0 28 42 6f 6f 6c 65 61 6e 29 29 20 72 65 74 75 72  (Boolean)) retur
19ce0 6e 20 47 65 74 42 6f 6f 6c 65 61 6e 28 73 74 6d  n GetBoolean(stm
19cf0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
19d00 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
19d10 79 70 65 6f 66 28 53 42 79 74 65 29 29 20 72 65  ypeof(SByte)) re
19d20 74 75 72 6e 20 47 65 74 53 42 79 74 65 28 73 74  turn GetSByte(st
19d30 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
19d40 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
19d50 74 79 70 65 6f 66 28 42 79 74 65 29 29 20 72 65  typeof(Byte)) re
19d60 74 75 72 6e 20 47 65 74 42 79 74 65 28 73 74 6d  turn GetByte(stm
19d70 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
19d80 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
19d90 79 70 65 6f 66 28 49 6e 74 31 36 29 29 20 72 65  ypeof(Int16)) re
19da0 74 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73 74  turn GetInt16(st
19db0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
19dc0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
19dd0 74 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29 20  typeof(UInt16)) 
19de0 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31 36  return GetUInt16
19df0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
19e00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
19e10 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29  == typeof(Int32)
19e20 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 33  ) return GetInt3
19e30 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  2(stmt, index);.
19e40 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
19e50 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 33   == typeof(UInt3
19e60 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49  2)) return GetUI
19e70 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
19e80 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
19e90 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e   (t == typeof(In
19ea0 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65 74  t64)) return Get
19eb0 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
19ec0 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
19ed0 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55  f (t == typeof(U
19ee0 49 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20 47  Int64)) return G
19ef0 65 74 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  etUInt64(stmt, i
19f00 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
19f10 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
19f20 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 49  .ChangeType(GetI
19f30 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
19f40 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  ), t, null);..  
19f50 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a        default:..
19f60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
19f70 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
19f80 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ndex);..      }.
19f90 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
19fa0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
19fb0 69 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72  int GetCursorFor
19fc0 54 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74  Table(SQLiteStat
19fd0 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
19fe0 64 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65  db, int rootPage
19ff0 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
1a000 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
1a010 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
1a020 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1a030 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63  .sqlite3_table_c
1a040 75 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74  ursor_interop(st
1a050 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
1a060 20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d   db, rootPage);.
1a070 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
1a080 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66  turn -1;..#endif
1a090 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1a0a0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1a0b0 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f   long GetRowIdFo
1a0c0 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74  rCursor(SQLiteSt
1a0d0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
1a0e0 74 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b  t cursor)..    {
1a0f0 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
1a100 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f  ANDARD..      lo
1a110 6e 67 20 72 6f 77 69 64 20 3d 20 30 3b 0d 0a 20  ng rowid = 0;.. 
1a120 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1a130 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
1a140 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1a150 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77  lite3_cursor_row
1a160 69 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  id_interop(stmt.
1a170 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75  _sqlite_stmt, cu
1a180 72 73 6f 72 2c 20 72 65 66 20 72 6f 77 69 64 29  rsor, ref rowid)
1a190 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20  ;..      if (rc 
1a1a0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
1a1b0 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f  de.Ok) return ro
1a1c0 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  wid;....      re
1a1d0 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a  turn 0;..#else..
1a1e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
1a1f0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
1a200 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1a210 76 65 72 72 69 64 65 20 76 6f 69 64 20 47 65 74  verride void Get
1a220 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e  IndexColumnExten
1a230 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64  dedInfo(string d
1a240 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20  atabase, string 
1a250 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f  index, string co
1a260 6c 75 6d 6e 2c 20 72 65 66 20 69 6e 74 20 73 6f  lumn, ref int so
1a270 72 74 4d 6f 64 65 2c 20 72 65 66 20 69 6e 74 20  rtMode, ref int 
1a280 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20 73 74 72  onError, ref str
1a290 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71  ing collationSeq
1a2a0 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23  uence)..    {..#
1a2b0 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
1a2c0 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ARD..      IntPt
1a2d0 72 20 63 6f 6c 6c 20 3d 20 49 6e 74 50 74 72 2e  r coll = IntPtr.
1a2e0 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74  Zero;..      int
1a2f0 20 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d 0a 20   colllen = 0;.. 
1a300 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1a310 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20  Code rc;....    
1a320 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74    rc = UnsafeNat
1a330 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1a340 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f  e3_index_column_
1a350 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71  info_interop(_sq
1a360 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62 61  l, ToUTF8(databa
1a370 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65  se), ToUTF8(inde
1a380 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d  x), ToUTF8(colum
1a390 6e 29 2c 20 72 65 66 20 73 6f 72 74 4d 6f 64 65  n), ref sortMode
1a3a0 2c 20 72 65 66 20 6f 6e 45 72 72 6f 72 2c 20 72  , ref onError, r
1a3b0 65 66 20 63 6f 6c 6c 2c 20 72 65 66 20 63 6f 6c  ef coll, ref col
1a3c0 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66  llen);..      if
1a3d0 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
1a3e0 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
1a3f0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
1a400 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b  ption(rc, null);
1a410 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74  ....      collat
1a420 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54  ionSequence = UT
1a430 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c  F8ToString(coll,
1a440 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73   colllen);..#els
1a450 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64  e..      sortMod
1a460 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e  e = 0;..      on
1a470 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20  Error = 2;..    
1a480 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65    collationSeque
1a490 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d  nce = "BINARY";.
1a4a0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
1a4b0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1a4c0 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
1a4d0 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74  rorCode FileCont
1a4e0 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61  rol(string zDbNa
1a4f0 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50  me, int op, IntP
1a500 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d  tr pArg)..    {.
1a510 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
1a520 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1a530 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  s.sqlite3_file_c
1a540 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44  ontrol(_sql, (zD
1a550 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f  bName != null) ?
1a560 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29   ToUTF8(zDbName)
1a570 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72   : null, op, pAr
1a580 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  g);..    }..  }.
1a590 0a 7d 0d 0a                                      .}..