System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact ee9b376bc62a1022509d753089fa3e361959846b:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a 23  ns.Generic;....#
0180: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
0190: 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f 4e  20 && (TRACE_CON
01a0: 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43 45  NECTION || TRACE
01b0: 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20 75  _STATEMENT)..  u
01c0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67  sing System.Diag
01d0: 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69 66  nostics;..#endif
01e0: 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  ....  using Syst
01f0: 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e  em.Globalization
0200: 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  ;..  using Syste
0210: 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f  m.Runtime.Intero
0220: 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75 73  pServices;..  us
0230: 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b  ing System.Text;
0240: 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ..  using System
0250: 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 0d 0a 20  .Threading;.... 
0260: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0270: 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68    /// This is th
0280: 65 20 6d 65 74 68 6f 64 20 73 69 67 6e 61 74 75  e method signatu
0290: 72 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  re for the SQLit
02a0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 6c  e core library l
02b0: 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 0d  ogging callback.
02c0: 0a 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20  .  /// function 
02d0: 66 6f 72 20 75 73 65 20 77 69 74 68 20 73 71 6c  for use with sql
02e0: 69 74 65 33 5f 6c 6f 67 28 29 20 61 6e 64 20 74  ite3_log() and t
02f0: 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  he SQLITE_CONFIG
0300: 5f 4c 4f 47 2e 0d 0a 20 20 2f 2f 2f 0d 0a 20 20  _LOG...  ///..  
0310: 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68 69  /// WARNING: Thi
0320: 73 20 64 65 6c 65 67 61 74 65 20 69 73 20 75 73  s delegate is us
0330: 65 64 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20  ed more-or-less 
0340: 64 69 72 65 63 74 6c 79 20 62 79 20 6e 61 74 69  directly by nati
0350: 76 65 20 63 6f 64 65 2c 20 64 6f 0d 0a 20 20 2f  ve code, do..  /
0360: 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20  //          not 
0370: 6d 6f 64 69 66 79 20 69 74 73 20 74 79 70 65 20  modify its type 
0380: 73 69 67 6e 61 74 75 72 65 2e 0d 0a 20 20 2f 2f  signature...  //
0390: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
03a0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
03b0: 22 70 55 73 65 72 44 61 74 61 22 3e 0d 0a 20 20  "pUserData">..  
03c0: 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20 64 61  /// The extra da
03d0: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
03e0: 74 68 20 74 68 69 73 20 6d 65 73 73 61 67 65 2c  th this message,
03f0: 20 69 66 20 61 6e 79 2e 0d 0a 20 20 2f 2f 2f 20   if any...  /// 
0400: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20  </param>..  /// 
0410: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
0420: 6f 72 43 6f 64 65 22 3e 0d 0a 20 20 2f 2f 2f 20  orCode">..  /// 
0430: 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61  The error code a
0440: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
0450: 68 69 73 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  his message...  
0460: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0470: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0480: 22 70 4d 65 73 73 61 67 65 22 3e 0d 0a 20 20 2f  "pMessage">..  /
0490: 2f 2f 20 54 68 65 20 6d 65 73 73 61 67 65 20 73  // The message s
04a0: 74 72 69 6e 67 20 74 6f 20 62 65 20 6c 6f 67 67  tring to be logg
04b0: 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72  ed...  /// </par
04c0: 61 6d 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  am>..#if !PLATFO
04d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
04e0: 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67 65  ORK..  [Unmanage
04f0: 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74 65 72  dFunctionPointer
0500: 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69  (CallingConventi
0510: 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65 6e 64  on.Cdecl)]..#end
0520: 69 66 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 64  if..  internal d
0530: 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53 51 4c  elegate void SQL
0540: 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 49  iteLogCallback(I
0550: 6e 74 50 74 72 20 70 55 73 65 72 44 61 74 61 2c  ntPtr pUserData,
0560: 20 69 6e 74 20 65 72 72 6f 72 43 6f 64 65 2c 20   int errorCode, 
0570: 49 6e 74 50 74 72 20 70 4d 65 73 73 61 67 65 29  IntPtr pMessage)
0580: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0590: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
05a0: 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74   class implement
05b0: 73 20 53 51 4c 69 74 65 42 61 73 65 20 63 6f 6d  s SQLiteBase com
05c0: 70 6c 65 74 65 6c 79 2c 20 61 6e 64 20 69 73 20  pletely, and is 
05d0: 74 68 65 20 67 75 74 73 20 6f 66 20 74 68 65 20  the guts of the 
05e0: 63 6f 64 65 20 74 68 61 74 20 69 6e 74 65 72 6f  code that intero
05f0: 70 27 73 20 53 51 4c 69 74 65 20 77 69 74 68 20  p's SQLite with 
0600: 2e 4e 45 54 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  .NET..  /// </su
0610: 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72 6e  mmary>..  intern
0620: 61 6c 20 63 6c 61 73 73 20 53 51 4c 69 74 65 33  al class SQLite3
0630: 20 3a 20 53 51 4c 69 74 65 42 61 73 65 0d 0a 20   : SQLiteBase.. 
0640: 20 7b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20   {..    private 
0650: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
0660: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
0670: 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  ect();....    //
0680: 0d 0a 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54  ..    // NOTE: T
0690: 68 69 73 20 69 73 20 74 68 65 20 70 75 62 6c 69  his is the publi
06a0: 63 20 6b 65 79 20 66 6f 72 20 74 68 65 20 53 79  c key for the Sy
06b0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
06c0: 20 61 73 73 65 6d 62 6c 79 2e 20 20 49 66 20 79   assembly.  If y
06d0: 6f 75 20 63 68 61 6e 67 65 20 74 68 65 0d 0a 20  ou change the.. 
06e0: 20 20 20 2f 2f 20 20 20 20 20 20 20 53 4e 4b 20     //       SNK 
06f0: 66 69 6c 65 2c 20 79 6f 75 20 77 69 6c 6c 20 6e  file, you will n
0700: 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68  eed to change th
0710: 69 73 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20 20  is as well...   
0720: 20 2f 2f 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61   //..    interna
0730: 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50  l const string P
0740: 75 62 6c 69 63 4b 65 79 20 3d 0d 0a 20 20 20 20  ublicKey =..    
0750: 20 20 20 20 22 30 30 32 34 30 30 30 30 30 34 38      "00240000048
0760: 30 30 30 30 30 39 34 30 30 30 30 30 30 30 36 30  0000094000000060
0770: 32 30 30 30 30 30 30 32 34 30 30 30 30 35 32 35  2000000240000525
0780: 33 34 31 33 31 30 30 30 34 30 30 30 30 30 31 30  3413100040000010
0790: 30 30 31 30 30 30 35 61 32 38 38 64 65 35 36 38  0010005a288de568
07a0: 37 63 34 65 31 22 20 2b 0d 0a 20 20 20 20 20 20  7c4e1" +..      
07b0: 20 20 22 62 36 32 31 64 64 66 66 35 64 38 34 34    "b621ddff5d844
07c0: 37 32 37 34 31 38 39 35 36 39 39 37 66 34 37 35  727418956997f475
07d0: 65 62 38 32 39 34 32 39 65 34 31 31 61 66 66 33  eb829429e411aff3
07e0: 65 39 33 66 39 37 62 37 30 64 65 36 39 38 62 39  e93f97b70de698b9
07f0: 37 32 36 34 30 39 32 35 62 64 64 34 34 32 38 30  72640925bdd44280
0800: 64 66 30 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  df0" +..        
0810: 22 61 32 35 61 38 34 33 32 36 36 39 37 33 37 30  "a25a84326697370
0820: 34 31 33 37 63 62 62 30 65 37 34 34 31 63 31 66  4137cbb0e7441c1f
0830: 65 37 63 61 65 34 65 32 34 34 30 61 65 39 31 61  e7cae4e2440ae91a
0840: 62 38 63 64 65 33 39 33 33 66 65 62 63 62 31 61  b8cde3933febcb1a
0850: 63 34 38 64 64 33 33 62 34 30 65 31 33 63 34 32  c48dd33b40e13c42
0860: 31 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 22 64  1" +..        "d
0870: 38 32 31 35 63 31 38 61 34 33 34 39 61 34 33 36  8215c18a4349a436
0880: 64 64 34 39 39 65 33 63 33 38 35 63 63 36 38 33  dd499e3c385cc683
0890: 30 31 35 66 38 38 36 66 36 63 31 30 62 64 39 30  015f886f6c10bd90
08a0: 31 31 35 65 62 32 62 64 36 31 62 36 37 37 35 30  115eb2bd61b67750
08b0: 38 33 39 65 33 61 31 39 39 34 31 64 63 39 63 22  839e3a19941dc9c"
08c0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
08d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
08e0: 4f 52 4b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ORK..    interna
08f0: 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44  l const string D
0900: 65 73 69 67 6e 65 72 56 65 72 73 69 6f 6e 20 3d  esignerVersion =
0910: 20 22 31 2e 30 2e 31 30 30 2e 30 22 3b 0d 0a 23   "1.0.100.0";..#
0920: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  endif....    ///
0930: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0940: 2f 2f 2f 20 54 68 65 20 6f 70 61 71 75 65 20 70  /// The opaque p
0950: 6f 69 6e 74 65 72 20 72 65 74 75 72 6e 65 64 20  ointer returned 
0960: 74 6f 20 75 73 20 62 79 20 74 68 65 20 73 71 6c  to us by the sql
0970: 69 74 65 20 70 72 6f 76 69 64 65 72 0d 0a 20 20  ite provider..  
0980: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0990: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
09a0: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 43  internal SQLiteC
09b0: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
09c0: 5f 73 71 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65  _sql;..    prote
09d0: 63 74 65 64 20 73 74 72 69 6e 67 20 5f 66 69 6c  cted string _fil
09e0: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 70 72 6f 74  eName;..    prot
09f0: 65 63 74 65 64 20 53 51 4c 69 74 65 43 6f 6e 6e  ected SQLiteConn
0a00: 65 63 74 69 6f 6e 46 6c 61 67 73 20 5f 66 6c 61  ectionFlags _fla
0a10: 67 73 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  gs;..    protect
0a20: 65 64 20 62 6f 6f 6c 20 5f 75 73 65 50 6f 6f 6c  ed bool _usePool
0a30: 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ;..    protected
0a40: 20 69 6e 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f   int _poolVersio
0a50: 6e 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  n;..    private 
0a60: 69 6e 74 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74  int _cancelCount
0a70: 3b 0d 0a 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35  ;....#if (NET_35
0a80: 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45   || NET_40 || NE
0a90: 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 20  T_45 || NET_451 
0aa0: 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c 20 4e 45  || NET_452 || NE
0ab0: 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34 36 31 29  T_46 || NET_461)
0ac0: 20 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f   && !PLATFORM_CO
0ad0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
0ae0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
0af0: 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61   _buildingSchema
0b00: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
0b10: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0b20: 20 20 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72      /// The user
0b30: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
0b40: 6e 73 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e  ns registered on
0b50: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
0b60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0b70: 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63  ary>..    protec
0b80: 74 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c 53  ted Dictionary<S
0b90: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
0ba0: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
0bb0: 6e 63 74 69 6f 6e 3e 20 5f 66 75 6e 63 74 69 6f  nction> _functio
0bc0: 6e 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52  ns;....#if INTER
0bd0: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
0be0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0bf0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
0c00: 20 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64   modules created
0c10: 20 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e   using this conn
0c20: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
0c30: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0c40: 20 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69   protected Dicti
0c50: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51  onary<string, SQ
0c60: 4c 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64  LiteModule> _mod
0c70: 75 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ules;..#endif...
0c80: 0a 20 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
0cf0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0d00: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68  // Constructs th
0d10: 65 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f  e object used to
0d20: 20 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74   interact with t
0d30: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
0d40: 69 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20  ibrary..    /// 
0d50: 75 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20  using the UTF-8 
0d60: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a  text encoding...
0d70: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0d80: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
0d90: 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a  am name="fmt">..
0da0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65      /// The Date
0db0: 54 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62  Time format to b
0dc0: 65 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76  e used when conv
0dd0: 65 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61  erting string va
0de0: 6c 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f  lues to a..    /
0df0: 2f 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20  // DateTime and 
0e00: 62 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65  binding DateTime
0e10: 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20   parameters...  
0e20: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
0e30: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
0e40: 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20  ame="kind">..   
0e50: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
0e60: 65 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64  ef="DateTimeKind
0e70: 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20  " /> to be used 
0e80: 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61  when creating Da
0e90: 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
0ea0: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f  values...    ///
0eb0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
0ec0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0ed0: 66 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20  fmtString">..   
0ee0: 20 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20   /// The format 
0ef0: 73 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65  string to be use
0f00: 64 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61  d when parsing a
0f10: 6e 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61  nd formatting Da
0f20: 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
0f30: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f  values...    ///
0f40: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
0f50: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0f60: 64 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  db">..    /// Th
0f70: 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20  e native handle 
0f80: 74 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64  to be associated
0f90: 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61   with the databa
0fa0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
0fb0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
0fc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0fd0: 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22   name="fileName"
0fe0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
0ff0: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66  ully qualified f
1000: 69 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61  ile name associa
1010: 74 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72  ted with <paramr
1020: 65 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e  ef name="db "/>.
1030: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1040: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
1050: 61 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64  am name="ownHand
1060: 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  le">..    /// No
1070: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65  n-zero if the ne
1080: 77 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65  wly created obje
1090: 63 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c  ct instance will
10a0: 20 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65   need to dispose
10b0: 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61  ..    /// of <pa
10c0: 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22  ramref name="db"
10d0: 20 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e   /> when it is n
10e0: 6f 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e  o longer needed.
10f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1100: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
1110: 20 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20   SQLite3(..     
1120: 20 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72     SQLiteDateFor
1130: 6d 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20  mats fmt,..     
1140: 20 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20     DateTimeKind 
1150: 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73  kind,..        s
1160: 74 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c  tring fmtString,
1170: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
1180: 20 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74   db,..        st
1190: 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
11a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e          bool own
11b0: 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20  Handle..        
11c0: 29 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28  )..      : base(
11d0: 66 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74  fmt, kind, fmtSt
11e0: 72 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ring)..    {..  
11f0: 20 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20        if (db != 
1200: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
1210: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1220: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20       _sql = new 
1230: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1240: 48 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61  Handle(db, ownHa
1250: 6e 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndle);..        
1260: 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20      _fileName = 
1270: 66 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  fileName;....   
1280: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
1290: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e  onnection.OnChan
12a0: 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f  ged(null, new Co
12b0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
12c0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
12d0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
12e0: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65  tionEventType.Ne
12f0: 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c  wCriticalHandle,
1300: 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
1310: 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75          null, nu
1320: 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20  ll, null, _sql, 
1330: 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62  fileName, new ob
1340: 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ject[] {..      
1350: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
1360: 28 53 51 4c 69 74 65 33 29 2c 20 66 6d 74 2c 20  (SQLite3), fmt, 
1370: 6b 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 2c  kind, fmtString,
1380: 20 64 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a   db, fileName,..
1390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a0: 6f 77 6e 48 61 6e 64 6c 65 20 7d 29 29 3b 0d 0a  ownHandle }));..
13b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
13c0: 0d 0a 0d 0a 20 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
1430: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
1440: 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d  le "Pattern" Mem
1450: 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74  bers..    privat
1460: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
1470: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
1480: 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  id CheckDisposed
1490: 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  () /* throw */..
14a0: 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57      {..#if THROW
14b0: 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20  _ON_DISPOSED..  
14c0: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
14d0: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
14e0: 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63   throw new Objec
14f0: 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69  tDisposedExcepti
1500: 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65  on(typeof(SQLite
1510: 33 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69  3).Name);..#endi
1520: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
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 2f 0d  ///////////////.
1590: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
15a0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44   override void D
15b0: 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70  ispose(bool disp
15c0: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20  osing)..    {.. 
15d0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
15e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15f0: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
1600: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1620: 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e    //if (disposin
1630: 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g)..            
1640: 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20      //{..       
1650: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 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 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
1690: 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69       //    // di
16a0: 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65  spose managed re
16b0: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
16c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16d0: 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d               //}
1710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1720: 20 20 20 20 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 2f 0d 0a 20 20 20 20  //////////..    
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72              // r
1760: 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64  elease unmanaged
1770: 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e   resources here.
1780: 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1790: 20 20 20 20 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 2f 0d 0a 0d 0a 23 69  //////////....#i
17c0: 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  f INTEROP_VIRTUA
17d0: 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20  L_TABLE..       
17e0: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
17f0: 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64  Modules();..#end
1800: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
1810: 20 20 20 20 20 20 43 6c 6f 73 65 28 66 61 6c 73        Close(fals
1820: 65 29 3b 20 2f 2a 20 44 69 73 70 6f 73 69 6e 67  e); /* Disposing
1830: 2c 20 63 61 6e 6e 6f 74 20 74 68 72 6f 77 2e 20  , cannot throw. 
1840: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1850: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
1860: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
1870: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1880: 20 20 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f        base.Dispo
1890: 73 65 28 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a  se(disposing);..
18a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
18b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
18c0: 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e   NOTE: Everythin
18d0: 67 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c  g should be full
18e0: 79 20 64 69 73 70 6f 73 65 64 20 61 74 20 74 68  y disposed at th
18f0: 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20  is point...     
1900: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1910: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
1920: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1930: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23   }..    }..    #
1940: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1950: 20 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 2f  ////////////////
19b0: 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
19c0: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20  VIRTUAL_TABLE.. 
19d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
19e0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d  ..    /// This m
19f0: 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74  ethod attempts t
1a00: 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 61 6c 6c  o dispose of all
1a10: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
1a20: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e  SQLiteModule" />
1a30: 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20 2f 2f   derived..    //
1a40: 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  / object instanc
1a50: 65 73 20 63 75 72 72 65 6e 74 6c 79 20 61 73 73  es currently ass
1a60: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1a70: 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65   native database
1a80: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
1a90: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1aa0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
1ab0: 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65  id DisposeModule
1ac0: 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  s()..    {..    
1ad0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1ae0: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61 6e 79 20  // NOTE: If any 
1af0: 6d 6f 64 75 6c 65 73 20 77 65 72 65 20 63 72 65  modules were cre
1b00: 61 74 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f  ated, attempt to
1b10: 20 64 69 73 70 6f 73 65 20 6f 66 0d 0a 20 20 20   dispose of..   
1b20: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1b30: 65 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63 6f  em now.  This co
1b40: 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74  de is designed t
1b50: 6f 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e 67  o avoid throwing
1b60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
1b70: 20 20 20 65 78 63 65 70 74 69 6f 6e 73 20 75 6e     exceptions un
1b80: 6c 65 73 73 20 74 68 65 20 44 69 73 70 6f 73 65  less the Dispose
1b90: 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
1ba0: 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f  odule..        /
1bb0: 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 74  /       itself t
1bc0: 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69  hrows an excepti
1bd0: 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  on...        //.
1be0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f  .        if (_mo
1bf0: 64 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  dules != null)..
1c00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1c10: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
1c20: 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74 72  KeyValuePair<str
1c30: 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c  ing, SQLiteModul
1c40: 65 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64 75  e> pair in _modu
1c50: 6c 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  les)..          
1c60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c70: 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
1c80: 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72 2e  e module = pair.
1c90: 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  Value;....      
1ca0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
1cb0: 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd0: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf0: 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29  module.Dispose()
1d00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d20: 5f 6d 6f 64 75 6c 65 73 2e 43 6c 65 61 72 28 29  _modules.Clear()
1d30: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1d40: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
1d50: 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20  //....    // It 
1dc0: 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79 20  isn't necessary 
1dd0: 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20 66  to cleanup any f
1de0: 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20 72  unctions we've r
1df0: 65 67 69 73 74 65 72 65 64 2e 20 20 49 66 20 74  egistered.  If t
1e00: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20  he connection.. 
1e10: 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68     // goes to th
1e20: 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65  e pool and is re
1e30: 73 75 72 72 65 63 74 65 64 20 6c 61 74 65 72 2c  surrected later,
1e40: 20 72 65 2d 72 65 67 69 73 74 65 72 65 64 20 66   re-registered f
1e50: 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76  unctions will ov
1e60: 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20 20  erwrite the..   
1e70: 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75 6e   // previous fun
1e80: 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c  ctions.  The SQL
1e90: 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69  iteFunctionCooki
1ea0: 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b  eHandle will tak
1eb0: 65 20 63 61 72 65 20 6f 66 20 66 72 65 65 69 6e  e care of freein
1ec0: 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20  g unmanaged..   
1ed0: 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62 65   // resources be
1ee0: 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20 70  longing to the p
1ef0: 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73 74  reviously-regist
1f00: 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d  ered functions..
1f10: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1f20: 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f 73  erride void Clos
1f30: 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29  e(bool canThrow)
1f40: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
1f50: 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  f (_sql != null)
1f60: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1f70: 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c 2e 4f       if (!_sql.O
1f80: 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20 20 20  wnHandle)..     
1f90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1fa0: 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c        _sql = nul
1fb0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
1fc0: 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20    return;..     
1fd0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1fe0: 20 20 20 20 62 6f 6f 6c 20 75 6e 62 69 6e 64 46      bool unbindF
1ff0: 75 6e 63 74 69 6f 6e 73 20 3d 20 28 28 5f 66 6c  unctions = ((_fl
2000: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
2010: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e 62 69  ectionFlags.Unbi
2020: 6e 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43 6c 6f  ndFunctionsOnClo
2030: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
2040: 20 20 20 20 20 3d 3d 20 53 51 4c 69 74 65 43 6f       == SQLiteCo
2050: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e  nnectionFlags.Un
2060: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43  bindFunctionsOnC
2070: 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lose);....      
2080: 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c      if (_usePool
2090: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
20b0: 20 28 53 51 4c 69 74 65 42 61 73 65 2e 52 65 73   (SQLiteBase.Res
20c0: 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71  etConnection(_sq
20d0: 6c 2c 20 5f 73 71 6c 2c 20 63 61 6e 54 68 72 6f  l, _sql, canThro
20e0: 77 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w))..           
20f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2100: 20 20 20 20 20 20 20 20 69 66 20 28 75 6e 62 69          if (unbi
2110: 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20  ndFunctions)..  
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2130: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2140: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c           if (SQL
2150: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69  iteFunction.Unbi
2160: 6e 64 41 6c 6c 46 75 6e 63 74 69 6f 6e 73 28 74  ndAllFunctions(t
2170: 68 69 73 2c 20 5f 66 6c 61 67 73 2c 20 66 61 6c  his, _flags, fal
2180: 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2190: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23              {..#
21a0: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
21b0: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
21c0: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e0: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
21f0: 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
2200: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
2210: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2230: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
2240: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
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 20 22 55                "U
2270: 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 28  nbindFunctions (
2280: 50 6f 6f 6c 29 20 53 75 63 63 65 73 73 3a 20 7b  Pool) Success: {
2290: 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b0: 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69      HandleToStri
22c0: 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
22d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2300: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2310: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23              {..#
2320: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
2330: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
2340: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
2350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2360: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
2370: 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
2380: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
2390: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b0: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
23c0: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
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 20 22 55                "U
23f0: 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 28  nbindFunctions (
2400: 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b  Pool) Failure: {
2410: 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2430: 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69      HandleToStri
2440: 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
2450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2460: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2470: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2480: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
2490: 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
24b0: 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d  sposeModules();.
24c0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
24e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f  iteConnectionPoo
24f0: 6c 2e 41 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c  l.Add(_fileName,
2500: 20 5f 73 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73   _sql, _poolVers
2510: 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
2520: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
2530: 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68  eConnection.OnCh
2540: 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20  anged(null, new 
2550: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
2560: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
2570: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
2580: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  teConnectionEven
2590: 74 54 79 70 65 2e 43 6c 6f 73 65 64 54 6f 50 6f  tType.ClosedToPo
25a0: 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d  ol, null, null,.
25b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25c0: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c         null, nul
25d0: 6c 2c 20 5f 73 71 6c 2c 20 5f 66 69 6c 65 4e 61  l, _sql, _fileNa
25e0: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
25f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2600: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
2610: 28 53 51 4c 69 74 65 33 29 2c 20 63 61 6e 54 68  (SQLite3), canTh
2620: 72 6f 77 2c 20 5f 66 69 6c 65 4e 61 6d 65 2c 20  row, _fileName, 
2630: 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29 29  _poolVersion }))
2640: 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  ;....#if !NET_CO
2650: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2660: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2680: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
2690: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
26a0: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
26b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26c0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
26d0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
26e0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6c 6f              "Clo
2700: 73 65 20 28 50 6f 6f 6c 29 20 53 75 63 63 65 73  se (Pool) Succes
2710: 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  s: {0}",..      
2720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2730: 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29  HandleToString()
2740: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
2750: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69             }..#i
2760: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
2770: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
2780: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
2790: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
27a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
27c0: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55 6e  ace.WriteLine(Un
27d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
27e0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
27f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2800: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
2810: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
2820: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2830: 20 20 20 20 20 20 20 20 20 20 22 43 6c 6f 73 65            "Close
2840: 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a   (Pool) Failure:
2850: 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61                Ha
2870: 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29  ndleToString()))
2880: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2890: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   }..#endif..    
28a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
28b0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
28c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28d0: 20 20 20 20 69 66 20 28 75 6e 62 69 6e 64 46 75      if (unbindFu
28e0: 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  nctions)..      
28f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2900: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2910: 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e  (SQLiteFunction.
2920: 55 6e 62 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f  UnbindAllFunctio
2930: 6e 73 28 74 68 69 73 2c 20 5f 66 6c 61 67 73 2c  ns(this, _flags,
2940: 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20   false))..      
2950: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23              {..#
2960: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
2970: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
2980: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
29a0: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55 6e  ace.WriteLine(Un
29b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
29c0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
29d0: 0a 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 20 43 75 6c 74 75             Cultu
29f0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
2a00: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a20: 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f    "UnbindFunctio
2a30: 6e 73 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22  ns Success: {0}"
2a40: 2c 0d 0a 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 20 48 61 6e               Han
2a60: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
2a70: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
2ab0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20           {..#if 
2ac0: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
2ad0: 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
2ae0: 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ION..           
2af0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2b00: 2e 57 72 69 74 65 4c 69 6e 65 28 55 6e 73 61 66  .WriteLine(Unsaf
2b10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53  eNativeMethods.S
2b20: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
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 20 43 75 6c 74 75 72 65 49          CultureI
2b50: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
2b60: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
2b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2b80: 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20  UnbindFunctions 
2b90: 46 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a  Failure: {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 20 48 61 6e 64 6c 65            Handle
2bc0: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
2bd0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
2be0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2bf0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
2c10: 6c 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  l.Dispose();..  
2c20: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2c30: 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c       _sql = null
2c40: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
2c50: 7d 0d 0a 0d 0a 20 20 20 20 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 2f 0d 0a 0d 0a 23 69 66 20  ////////....#if 
2cc0: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
2cd0: 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
2ce0: 49 4f 4e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  ION..    protect
2cf0: 65 64 20 73 74 72 69 6e 67 20 48 61 6e 64 6c 65  ed string Handle
2d00: 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20  ToString()..    
2d10: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  {..        if (_
2d20: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
2d30: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d40: 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20   "<null>";....  
2d50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71        return _sq
2d60: 6c 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  l.ToString();.. 
2d70: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
2d80: 20 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
2df0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2e00: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75  / Returns the nu
2e10: 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74 68  mber of times th
2e20: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 61 6e  e <see cref="Can
2e30: 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 20 68  cel" /> method h
2e40: 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f  as been..    ///
2e50: 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 2f 2f   called...    //
2e60: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2e70: 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 47 65    private int Ge
2e80: 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d 0a  tCancelCount()..
2e90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
2ea0: 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65  eturn Interlocke
2eb0: 64 2e 43 6f 6d 70 61 72 65 45 78 63 68 61 6e 67  d.CompareExchang
2ec0: 65 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75  e(ref _cancelCou
2ed0: 6e 74 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20  nt, 0, 0);..    
2ee0: 7d 0d 0a 0d 0a 20 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2f50: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2f60: 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
2f70: 6f 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  od determines wh
2f80: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 3c  ether or not a <
2f90: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
2fa0: 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 0d 0a 20  Exception" />.. 
2fb0: 20 20 20 2f 2f 2f 20 77 69 74 68 20 61 20 72 65     /// with a re
2fc0: 74 75 72 6e 20 63 6f 64 65 20 6f 66 20 3c 73 65  turn code of <se
2fd0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45 72  e cref="SQLiteEr
2fe0: 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70  rorCode.Interrup
2ff0: 74 22 20 2f 3e 20 73 68 6f 75 6c 64 0d 0a 20 20  t" /> should..  
3000: 20 20 2f 2f 2f 20 62 65 20 74 68 72 6f 77 6e 20    /// be thrown 
3010: 61 66 74 65 72 20 6d 61 6b 69 6e 67 20 61 20 63  after making a c
3020: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53 51 4c  all into the SQL
3030: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
3040: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
3050: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
3060: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
3070: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20  / Non-zero if a 
3080: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3090: 65 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20 74  eException" /> t
30a0: 6f 20 62 65 20 74 68 72 6f 77 6e 2e 20 20 54 68  o be thrown.  Th
30b0: 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 2f  is method..    /
30c0: 2f 2f 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 65 74  // will only ret
30d0: 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20  urn non-zero if 
30e0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43  the <see cref="C
30f0: 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64  ancel" /> method
3100: 20 77 61 73 20 63 61 6c 6c 65 64 0d 0a 20 20 20   was called..   
3110: 20 2f 2f 2f 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   /// one or more
3120: 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 61 20   times during a 
3130: 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53 51  call into the SQ
3140: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
3150: 79 20 28 65 2e 67 2e 20 77 68 65 6e 0d 0a 20 20  y (e.g. when..  
3160: 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74 65    /// the sqlite
3170: 33 5f 70 72 65 70 61 72 65 2a 28 29 20 6f 72 20  3_prepare*() or 
3180: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 41  sqlite3_step() A
3190: 50 49 73 20 61 72 65 20 75 73 65 64 29 2e 0d 0a  PIs are used)...
31a0: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
31b0: 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  s>..    private 
31c0: 62 6f 6f 6c 20 53 68 6f 75 6c 64 54 68 72 6f 77  bool ShouldThrow
31d0: 46 6f 72 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20  ForCancel()..   
31e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
31f0: 72 6e 20 47 65 74 43 61 6e 63 65 6c 43 6f 75 6e  rn GetCancelCoun
3200: 74 28 29 20 3e 20 30 3b 0d 0a 20 20 20 20 7d 0d  t() > 0;..    }.
3210: 0a 0d 0a 20 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
3280: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3290: 20 2f 2f 2f 20 52 65 73 65 74 73 20 74 68 65 20   /// Resets the 
32a0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 3c 73 65  value of the <se
32b0: 65 20 63 72 65 66 3d 22 5f 63 61 6e 63 65 6c 43  e cref="_cancelC
32c0: 6f 75 6e 74 22 20 2f 3e 20 66 69 65 6c 64 2e 0d  ount" /> field..
32d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
32e0: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
32f0: 20 69 6e 74 20 52 65 73 65 74 43 61 6e 63 65 6c   int ResetCancel
3300: 43 6f 75 6e 74 28 29 0d 0a 20 20 20 20 7b 0d 0a  Count()..    {..
3310: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
3320: 6e 74 65 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70 61  nterlocked.Compa
3330: 72 65 45 78 63 68 61 6e 67 65 28 72 65 66 20 5f  reExchange(ref _
3340: 63 61 6e 63 65 6c 43 6f 75 6e 74 2c 20 30 2c 20  cancelCount, 0, 
3350: 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a  _cancelCount);..
3360: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 0d 0a 0d 0a  ////////////....
33d0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
33e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d  >..    /// Attem
33f0: 70 74 73 20 74 6f 20 69 6e 74 65 72 72 75 70 74  pts to interrupt
3400: 20 74 68 65 20 71 75 65 72 79 20 63 75 72 72 65   the query curre
3410: 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 6f  ntly executing o
3420: 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  n the associated
3430: 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65  ..    /// native
3440: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
3450: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
3460: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
3470: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
3480: 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a   void Cancel()..
3490: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 74 72 79      {..      try
34a0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
34b0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
34c0: 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ...      }..    
34d0: 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54    finally /* NOT
34e0: 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28  E: Thread.Abort(
34f0: 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f  ) protection. */
3500: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
3510: 20 20 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49     Interlocked.I
3520: 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 5f 63 61  ncrement(ref _ca
3530: 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a 20 20 20  ncelCount);..   
3540: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
3550: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
3560: 5f 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29  _interrupt(_sql)
3570: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
3580: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
3590: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
35a0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62 69  This function bi
35b0: 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e  nds a user-defin
35c0: 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74  ed function to t
35d0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  he connection...
35e0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
35f0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
3600: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f  am name="functio
3610: 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20  nAttribute">..  
3620: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
3630: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
3640: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20  ionAttribute"/> 
3650: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
3660: 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20  containing..    
3670: 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61  /// the metadata
3680: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
3690: 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a  n to be bound...
36a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
36b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
36c0: 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22   name="function"
36d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
36e0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
36f0: 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65  Function"/> obje
3700: 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74  ct instance that
3710: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0d   implements the.
3720: 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f  .    /// functio
3730: 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a  n to be bound...
3740: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
3750: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3760: 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a   name="flags">..
3770: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67      /// The flag
3780: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
3790: 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e  h the parent con
37a0: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d  nection object..
37b0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
37c0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
37d0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
37e0: 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
37f0: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74       SQLiteFunct
3800: 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75 6e  ionAttribute fun
3810: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d  ctionAttribute,.
3820: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46  .        SQLiteF
3830: 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  unction function
3840: 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ,..        SQLit
3850: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
3860: 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20   flags..        
3870: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3880: 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41 74    if (functionAt
3890: 74 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29  tribute == null)
38a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
38b0: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
38c0: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66  NullException("f
38d0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
38e0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
38f0: 66 20 28 66 75 6e 63 74 69 6f 6e 20 3d 3d 20 6e  f (function == n
3900: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3910: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
3920: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
3930: 6e 28 22 66 75 6e 63 74 69 6f 6e 22 29 3b 0d 0a  n("function");..
3940: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
3950: 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e  Function.BindFun
3960: 63 74 69 6f 6e 28 74 68 69 73 2c 20 66 75 6e 63  ction(this, func
3970: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 66  tionAttribute, f
3980: 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29 3b  unction, flags);
3990: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
39a0: 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75  _functions == nu
39b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
39c0: 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65   _functions = ne
39d0: 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c  w Dictionary<SQL
39e0: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
39f0: 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63  bute, SQLiteFunc
3a00: 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  tion>();....    
3a10: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 66      _functions[f
3a20: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3a30: 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a 20  ] = function;.. 
3a40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
3a50: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
3a60: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  // This function
3a70: 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65   binds a user-de
3a80: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74  fined function t
3a90: 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  o the connection
3aa0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
3ab0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
3ac0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
3ad0: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d  tionAttribute">.
3ae0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  .    /// The <se
3af0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
3b00: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
3b10: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
3b20: 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ce containing.. 
3b30: 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64     /// the metad
3b40: 61 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ata for the func
3b50: 74 69 6f 6e 20 74 6f 20 62 65 20 75 6e 62 6f 75  tion to be unbou
3b60: 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  nd...    /// </p
3b70: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
3b80: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
3b90: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
3ba0: 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   flags associate
3bb0: 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65 6e  d with the paren
3bc0: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  t connection obj
3bd0: 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
3be0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
3bf0: 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d 7a 65 72  <returns>Non-zer
3c00: 6f 20 69 66 20 74 68 65 20 66 75 6e 63 74 69 6f  o if the functio
3c10: 6e 20 77 61 73 20 75 6e 62 6f 75 6e 64 20 61 6e  n was unbound an
3c20: 64 20 72 65 6d 6f 76 65 64 2e 3c 2f 72 65 74 75  d removed.</retu
3c30: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
3c40: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
3c50: 20 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28   UnbindFunction(
3c60: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
3c70: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
3c80: 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  e functionAttrib
3c90: 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  ute,..        SQ
3ca0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3cb0: 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20  ags flags..     
3cc0: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
3cd0: 20 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f       if (functio
3ce0: 6e 41 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75  nAttribute == nu
3cf0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3d00: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
3d10: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
3d20: 28 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  ("functionAttrib
3d30: 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ute");....      
3d40: 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73    if (_functions
3d50: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
3d60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
3d70: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
3d80: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
3d90: 75 6e 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20  unction;....    
3da0: 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f      if (_functio
3db0: 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 66  ns.TryGetValue(f
3dc0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3dd0: 2c 20 6f 75 74 20 66 75 6e 63 74 69 6f 6e 29 29  , out function))
3de0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
3df0: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 51 4c           if (SQL
3e00: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69  iteFunction.Unbi
3e10: 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e30: 20 74 68 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41   this, functionA
3e40: 74 74 72 69 62 75 74 65 2c 20 66 75 6e 63 74 69  ttribute, functi
3e50: 6f 6e 2c 20 66 6c 61 67 73 29 20 26 26 0d 0a 20  on, flags) &&.. 
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
3e70: 66 75 6e 63 74 69 6f 6e 73 2e 52 65 6d 6f 76 65  functions.Remove
3e80: 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  (functionAttribu
3e90: 74 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  te))..          
3ea0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3eb0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
3ec0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3ed0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
3ee0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
3ef0: 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  lse;..    }.... 
3f00: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
3f10: 72 69 64 65 20 73 74 72 69 6e 67 20 56 65 72 73  ride string Vers
3f20: 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ion..    {..    
3f30: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
3f40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
3f50: 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  QLiteVersion;.. 
3f60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
3f70: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
3f80: 65 72 72 69 64 65 20 69 6e 74 20 56 65 72 73 69  erride int Versi
3f90: 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d  onNumber..    {.
3fa0: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
3fb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
3fc0: 75 72 6e 20 53 51 4c 69 74 65 56 65 72 73 69 6f  urn SQLiteVersio
3fd0: 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20  nNumber;..      
3fe0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
3ff0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
4000: 73 74 72 69 6e 67 20 44 65 66 69 6e 65 43 6f 6e  string DefineCon
4010: 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b 0d 0a 20  stants..    {.. 
4020: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
4030: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4040: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
4050: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
4060: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a  ringBuilder();..
4070: 20 20 20 20 20 20 20 20 20 20 20 20 49 4c 69 73              ILis
4080: 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73 74 20 3d  t<string> list =
4090: 20 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e   SQLiteDefineCon
40a0: 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e 4c 69 73  stants.OptionLis
40b0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
40c0: 20 20 69 66 20 28 6c 69 73 74 20 21 3d 20 6e 75    if (list != nu
40d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
40e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
40f0: 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72      foreach (str
4100: 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c  ing element in l
4110: 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ist)..          
4120: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4140: 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c  (element == null
4150: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4160: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
4170: 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
4180: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4190: 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20  result.Length > 
41a0: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
41c0: 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d  lt.Append(' ');.
41d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
41e0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
41f0: 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a  pend(element);..
4200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4210: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
4220: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4230: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
4240: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20  String();..     
4250: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4260: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
4270: 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  ic string SQLite
4280: 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a  Version..    {..
4290: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
42a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
42b0: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
42c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
42d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76  ods.sqlite3_libv
42e0: 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a  ersion(), -1);..
42f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
4300: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
4310: 74 61 74 69 63 20 69 6e 74 20 53 51 4c 69 74 65  tatic int SQLite
4320: 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20  VersionNumber.. 
4330: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
4340: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
4350: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
4360: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4370: 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f  ite3_libversion_
4380: 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20 20 20 20  number();..     
4390: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
43a0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
43b0: 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65 53 6f   string SQLiteSo
43c0: 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20  urceId..    {.. 
43d0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
43e0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
43f0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
4400: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4410: 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75 72 63  ds.sqlite3_sourc
4420: 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20  eid(), -1);..   
4430: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4440: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
4450: 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  ic string SQLite
4460: 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a  CompileOptions..
4470: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
4480: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
4490: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
44a0: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
44b0: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
44c0: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
44d0: 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20      int index = 
44e0: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
44f0: 49 6e 74 50 74 72 20 7a 56 61 6c 75 65 20 3d 20  IntPtr zValue = 
4500: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4510: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70  ods.sqlite3_comp
4520: 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e  ileoption_get(in
4530: 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20 20  dex++);....     
4540: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 7a 56         while (zV
4550: 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  alue != IntPtr.Z
4560: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
4570: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4580: 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e       if (result.
4590: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45b0: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27   result.Append('
45c0: 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   ');....        
45d0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
45e0: 70 70 65 6e 64 28 55 54 46 38 54 6f 53 74 72 69  ppend(UTF8ToStri
45f0: 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29 3b  ng(zValue, -1));
4600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4610: 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61 66    zValue = Unsaf
4620: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4630: 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
4640: 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b  tion_get(index++
4650: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4660: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4670: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
4680: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
4690: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
46a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
46b0: 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72  tic string Inter
46c0: 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b  opVersion..    {
46d0: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
46e0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53         {..#if !S
46f0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
4700: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4710: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
4720: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4730: 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 6c 69 62 76  ods.interop_libv
4740: 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a  ersion(), -1);..
4750: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
4760: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4770: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
4780: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
4790: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
47a0: 20 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 53   string InteropS
47b0: 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a  ourceId..    {..
47c0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
47d0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c       {..#if !SQL
47e0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
47f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4800: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
4810: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4820: 73 2e 69 6e 74 65 72 6f 70 5f 73 6f 75 72 63 65  s.interop_source
4830: 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 23 65 6c 73  id(), -1);..#els
4840: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
4850: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e  eturn null;..#en
4860: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
4870: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4880: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72  ernal static str
4890: 69 6e 67 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69  ing InteropCompi
48a0: 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 7b  leOptions..    {
48b0: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
48c0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53         {..#if !S
48d0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
48e0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
48f0: 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74  ngBuilder result
4900: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
4910: 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  lder();..       
4920: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d       int index =
4930: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
4940: 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65 20 3d   IntPtr zValue =
4950: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4960: 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d  hods.interop_com
4970: 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69  pileoption_get(i
4980: 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20  ndex++);....    
4990: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 7a          while (z
49a0: 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e  Value != IntPtr.
49b0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
49c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
49d0: 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
49e0: 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20  .Length > 0)..  
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a00: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
4a10: 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ' ');....       
4a20: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
4a30: 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53 74 72  Append(UTF8ToStr
4a40: 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29  ing(zValue, -1))
4a50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4a60: 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61     zValue = Unsa
4a70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4a80: 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69 6c 65 6f  interop_compileo
4a90: 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b  ption_get(index+
4aa0: 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  +);..           
4ab0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4ac0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
4ad0: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 23 65 6c  ToString();..#el
4ae0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
4af0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65  return null;..#e
4b00: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
4b10: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
4b20: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
4b30: 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d  bool AutoCommit.
4b40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
4b50: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
4b60: 20 20 20 20 72 65 74 75 72 6e 20 49 73 41 75 74      return IsAut
4b70: 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f 73  ocommit(_sql, _s
4b80: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ql);..      }.. 
4b90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4ba0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
4bb0: 6e 67 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77  ng LastInsertRow
4bc0: 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  Id..    {..     
4bd0: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23   get..      {..#
4be0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
4bf0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
4c00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
4c10: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4c20: 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  s.sqlite3_last_i
4c30: 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c  nsert_rowid(_sql
4c40: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
4c50: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
4c60: 20 20 20 20 6c 6f 6e 67 20 72 6f 77 49 64 20 3d      long rowId =
4c70: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73   0;..        Uns
4c80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4c90: 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e  .sqlite3_last_in
4ca0: 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72  sert_rowid_inter
4cb0: 6f 70 28 5f 73 71 6c 2c 20 72 65 66 20 72 6f 77  op(_sql, ref row
4cc0: 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  Id);..        re
4cd0: 74 75 72 6e 20 72 6f 77 49 64 3b 0d 0a 23 65 6c  turn rowId;..#el
4ce0: 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  se..        thro
4cf0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
4d00: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
4d10: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
4d20: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
4d30: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
4d40: 65 20 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a 20  e int Changes.. 
4d50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
4d60: 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  .      {..#if !S
4d70: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
4d80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
4d90: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4da0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  ds.sqlite3_chang
4db0: 65 73 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 29  es_interop(_sql)
4dc0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
4dd0: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
4de0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4df0: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 5f 73 71  ite3_changes(_sq
4e00: 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  l);..#endif..   
4e10: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4e20: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4e30: 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79  ride long Memory
4e40: 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Used..    {..   
4e50: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
4e60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4e70: 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65   return StaticMe
4e80: 6d 6f 72 79 55 73 65 64 3b 0d 0a 20 20 20 20 20  moryUsed;..     
4e90: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4ea0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
4eb0: 69 63 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65  ic long StaticMe
4ec0: 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d  moryUsed..    {.
4ed0: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
4ee0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
4ef0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
4f00: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
4f10: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
4f20: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4f30: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
4f40: 73 65 64 28 29 3b 0d 0a 23 65 6c 69 66 20 21 53  sed();..#elif !S
4f50: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
4f70: 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20   bytes = 0;..   
4f80: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
4f90: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
4fa0: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64  ite3_memory_used
4fb0: 5f 69 6e 74 65 72 6f 70 28 72 65 66 20 62 79 74  _interop(ref byt
4fc0: 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  es);..          
4fd0: 20 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d    return bytes;.
4fe0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
4ff0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
5000: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
5010: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
5020: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5030: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
5040: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
5050: 20 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72   MemoryHighwater
5060: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5070: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
5080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5090: 75 72 6e 20 53 74 61 74 69 63 4d 65 6d 6f 72 79  urn StaticMemory
50a0: 48 69 67 68 77 61 74 65 72 3b 0d 0a 20 20 20 20  Highwater;..    
50b0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
50c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
50d0: 74 69 63 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d  tic long StaticM
50e0: 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a  emoryHighwater..
50f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
5100: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  et..        {..#
5110: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
5120: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
5130: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5140: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
5150: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65  thods.sqlite3_me
5160: 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 28 30  mory_highwater(0
5170: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
5180: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
5190: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74          long byt
51a0: 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  es = 0;..       
51b0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
51c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
51d0: 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
51e0: 72 5f 69 6e 74 65 72 6f 70 28 30 2c 20 72 65 66  r_interop(0, ref
51f0: 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20   bytes);..      
5200: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
5210: 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  es;..#else..    
5220: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
5230: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
5240: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
5250: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
5260: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
5270: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5280: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e   /// Returns non
5290: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 75 6e 64  -zero if the und
52a0: 65 72 6c 79 69 6e 67 20 6e 61 74 69 76 65 20 63  erlying native c
52b0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
52c0: 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20 20 20 2f   is owned..    /
52d0: 2f 2f 20 62 79 20 74 68 69 73 20 69 6e 73 74 61  // by this insta
52e0: 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nce...    /// </
52f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
5300: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5310: 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d 0a  bool OwnHandle..
5320: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
5330: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
5340: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
5350: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
5360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
5370: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
5380: 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e  ception("no conn
5390: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76  ection handle av
53a0: 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d 0a 20 20  ailable");....  
53b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
53c0: 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 3b   _sql.OwnHandle;
53d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
53e0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
53f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
5400: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6c 6f 67   Returns the log
5410: 69 63 61 6c 20 6c 69 73 74 20 6f 66 20 66 75 6e  ical list of fun
5420: 63 74 69 6f 6e 73 20 61 73 73 6f 63 69 61 74 65  ctions associate
5430: 64 20 77 69 74 68 20 74 68 69 73 20 63 6f 6e 6e  d with this conn
5440: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
5450: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5460: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5470: 64 65 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53  de IDictionary<S
5480: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
5490: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
54a0: 6e 63 74 69 6f 6e 3e 20 46 75 6e 63 74 69 6f 6e  nction> Function
54b0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
54c0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
54d0: 66 75 6e 63 74 69 6f 6e 73 3b 20 7d 0d 0a 20 20  functions; }..  
54e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
54f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
5500: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74  iteErrorCode Set
5510: 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f  MemoryStatus(boo
5520: 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  l value)..    {.
5530: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
5540: 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53  StaticSetMemoryS
5550: 74 61 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20  tatus(value);.. 
5560: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
5570: 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
5580: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74  teErrorCode Stat
5590: 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75  icSetMemoryStatu
55a0: 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20  s(bool value).. 
55b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
55c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
55d0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
55e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
55f0: 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20 20 20  onfig_int(..    
5600: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
5610: 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  nfigOpsEnum.SQLI
5620: 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41  TE_CONFIG_MEMSTA
5630: 54 55 53 2c 20 76 61 6c 75 65 20 3f 20 31 20 3a  TUS, value ? 1 :
5640: 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   0);....        
5650: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
5660: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
5670: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
5680: 41 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65  Attempts to free
5690: 20 61 73 20 6d 75 63 68 20 68 65 61 70 20 6d 65   as much heap me
56a0: 6d 6f 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65  mory as possible
56b0: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
56c0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
56d0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
56e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
56f0: 72 6e 73 3e 41 20 73 74 61 6e 64 61 72 64 20 53  rns>A standard S
5700: 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
5710: 65 20 28 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72  e (i.e. zero for
5720: 20 73 75 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e   success and non
5730: 2d 7a 65 72 6f 20 66 6f 72 20 66 61 69 6c 75 72  -zero for failur
5740: 65 29 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  e).</returns>.. 
5750: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
5760: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
5770: 43 6f 64 65 20 52 65 6c 65 61 73 65 4d 65 6d 6f  Code ReleaseMemo
5780: 72 79 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ry()..    {..   
5790: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
57a0: 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
57b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
57c0: 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65  lite3_db_release
57d0: 5f 6d 65 6d 6f 72 79 28 5f 73 71 6c 29 3b 0d 0a  _memory(_sql);..
57e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
57f0: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
5800: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5810: 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73      /// Attempts
5820: 20 74 6f 20 66 72 65 65 20 4e 20 62 79 74 65 73   to free N bytes
5830: 20 6f 66 20 68 65 61 70 20 6d 65 6d 6f 72 79 20   of heap memory 
5840: 62 79 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  by deallocating 
5850: 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65  non-essential me
5860: 6d 6f 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c  mory..    /// al
5870: 6c 6f 63 61 74 69 6f 6e 73 20 68 65 6c 64 20 62  locations held b
5880: 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6c  y the database l
5890: 69 62 72 61 72 79 2e 20 4d 65 6d 6f 72 79 20 75  ibrary. Memory u
58a0: 73 65 64 20 74 6f 20 63 61 63 68 65 20 64 61 74  sed to cache dat
58b0: 61 62 61 73 65 20 70 61 67 65 73 0d 0a 20 20 20  abase pages..   
58c0: 20 2f 2f 2f 20 74 6f 20 69 6d 70 72 6f 76 65 20   /// to improve 
58d0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 73 20 61  performance is a
58e0: 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 6e 6f 6e  n example of non
58f0: 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f 72  -essential memor
5900: 79 2e 20 20 54 68 69 73 20 69 73 20 61 20 6e 6f  y.  This is a no
5910: 2d 6f 70 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 74  -op..    /// ret
5920: 75 72 6e 69 6e 67 20 7a 65 72 6f 20 69 66 20 74  urning zero if t
5930: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
5940: 69 62 72 61 72 79 20 77 61 73 20 6e 6f 74 20 63  ibrary was not c
5950: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65  ompiled with the
5960: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0d 0a 20   compile-time.. 
5970: 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 20 53 51     /// option SQ
5980: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f  LITE_ENABLE_MEMO
5990: 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2e 20 20  RY_MANAGEMENT.  
59a0: 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20 61 74 74 65  Optionally, atte
59b0: 6d 70 74 73 20 74 6f 20 72 65 73 65 74 20 61 6e  mpts to reset an
59c0: 64 2f 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f  d/or..    /// co
59d0: 6d 70 61 63 74 20 74 68 65 20 57 69 6e 33 32 20  mpact the Win32 
59e0: 6e 61 74 69 76 65 20 68 65 61 70 2c 20 69 66 20  native heap, if 
59f0: 61 70 70 6c 69 63 61 62 6c 65 2e 0d 0a 20 20 20  applicable...   
5a00: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5a10: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
5a20: 6e 61 6d 65 3d 22 6e 42 79 74 65 73 22 3e 0d 0a  name="nBytes">..
5a30: 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 71 75      /// The requ
5a40: 65 73 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  ested number of 
5a50: 62 79 74 65 73 20 74 6f 20 66 72 65 65 2e 0d 0a  bytes to free...
5a60: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
5a70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
5a80: 20 6e 61 6d 65 3d 22 72 65 73 65 74 22 3e 0d 0a   name="reset">..
5a90: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
5aa0: 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20 68 65   to attempt a he
5ab0: 61 70 20 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f  ap reset...    /
5ac0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
5ad0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5ae0: 3d 22 63 6f 6d 70 61 63 74 22 3e 0d 0a 20 20 20  ="compact">..   
5af0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f   /// Non-zero to
5b00: 20 61 74 74 65 6d 70 74 20 68 65 61 70 20 63 6f   attempt heap co
5b10: 6d 70 61 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  mpaction...    /
5b20: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
5b30: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5b40: 3d 22 6e 46 72 65 65 22 3e 0d 0a 20 20 20 20 2f  ="nFree">..    /
5b50: 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
5b60: 20 62 79 74 65 73 20 61 63 74 75 61 6c 6c 79 20   bytes actually 
5b70: 66 72 65 65 64 2e 20 20 54 68 69 73 20 76 61 6c  freed.  This val
5b80: 75 65 20 6d 61 79 20 62 65 20 7a 65 72 6f 2e 0d  ue may be zero..
5b90: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
5ba0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
5bb0: 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74 4f 6b 22  m name="resetOk"
5bc0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
5bd0: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 6e 6f  value will be no
5be0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 68 65  n-zero if the he
5bf0: 61 70 20 72 65 73 65 74 20 77 61 73 20 73 75 63  ap reset was suc
5c00: 63 65 73 73 66 75 6c 2e 0d 0a 20 20 20 20 2f 2f  cessful...    //
5c10: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
5c20: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5c30: 22 6e 4c 61 72 67 65 73 74 22 3e 0d 0a 20 20 20  "nLargest">..   
5c40: 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65 20 6f 66   /// The size of
5c50: 20 74 68 65 20 6c 61 72 67 65 73 74 20 63 6f 6d   the largest com
5c60: 6d 69 74 74 65 64 20 66 72 65 65 20 62 6c 6f 63  mitted free bloc
5c70: 6b 20 69 6e 20 74 68 65 20 68 65 61 70 2c 20 69  k in the heap, i
5c80: 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 2f 2f  n bytes...    //
5c90: 2f 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c  / This value wil
5ca0: 6c 20 62 65 20 7a 65 72 6f 20 75 6e 6c 65 73 73  l be zero unless
5cb0: 20 68 65 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e   heap compaction
5cc0: 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20   is enabled...  
5cd0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
5ce0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
5cf0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61  >..    /// A sta
5d00: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
5d10: 75 72 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a  urn code (i.e. z
5d20: 65 72 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20  ero for success 
5d30: 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 0d 0a 20 20  and non-zero..  
5d40: 20 20 2f 2f 2f 20 66 6f 72 20 66 61 69 6c 75 72    /// for failur
5d50: 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  e)...    /// </r
5d60: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
5d70: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c  ernal static SQL
5d80: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61  iteErrorCode Sta
5d90: 74 69 63 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79  ticReleaseMemory
5da0: 28 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  (..        int n
5db0: 42 79 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20  Bytes,..        
5dc0: 62 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a 20 20 20  bool reset,..   
5dd0: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 61 63       bool compac
5de0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  t,..        ref 
5df0: 69 6e 74 20 6e 46 72 65 65 2c 0d 0a 20 20 20 20  int nFree,..    
5e00: 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 72 65 73      ref bool res
5e10: 65 74 4f 6b 2c 0d 0a 20 20 20 20 20 20 20 20 72  etOk,..        r
5e20: 65 66 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74  ef uint nLargest
5e30: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
5e40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
5e50: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
5e60: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5e70: 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .Ok;....        
5e80: 69 6e 74 20 6e 46 72 65 65 4c 6f 63 61 6c 20 3d  int nFreeLocal =
5e90: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5ea0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6c  hods.sqlite3_rel
5eb0: 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6e 42 79 74  ease_memory(nByt
5ec0: 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 75 69  es);..        ui
5ed0: 6e 74 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c  nt nLargestLocal
5ee0: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 62   = 0;..        b
5ef0: 6f 6f 6c 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c  ool resetOkLocal
5f00: 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66   = false;....#if
5f10: 20 21 44 45 42 55 47 20 26 26 20 57 49 4e 44 4f   !DEBUG && WINDO
5f20: 57 53 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 75  WS // NOTE: Shou
5f30: 6c 64 20 62 65 20 22 57 49 4e 33 32 48 45 41 50  ld be "WIN32HEAP
5f40: 20 26 26 20 21 4d 45 4d 44 45 42 55 47 20 26 26   && !MEMDEBUG &&
5f50: 20 57 49 4e 44 4f 57 53 22 0d 0a 20 20 20 20 20   WINDOWS"..     
5f60: 20 20 20 69 66 20 28 28 72 63 20 3d 3d 20 53 51     if ((rc == SQ
5f70: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
5f80: 29 20 26 26 20 72 65 73 65 74 29 0d 0a 20 20 20  ) && reset)..   
5f90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5fa0: 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e      rc = UnsafeN
5fb0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5fc0: 69 74 65 33 5f 77 69 6e 33 32 5f 72 65 73 65 74  ite3_win32_reset
5fd0: 5f 68 65 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20  _heap();....    
5fe0: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
5ff0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6000: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
6010: 20 20 20 20 20 20 20 72 65 73 65 74 4f 6b 4c 6f         resetOkLo
6020: 63 61 6c 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  cal = true;..   
6030: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6040: 20 20 69 66 20 28 28 72 63 20 3d 3d 20 53 51 4c    if ((rc == SQL
6050: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
6060: 20 26 26 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20   && compact)..  
6070: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55            rc = U
6080: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6090: 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  ds.sqlite3_win32
60a0: 5f 63 6f 6d 70 61 63 74 5f 68 65 61 70 28 72 65  _compact_heap(re
60b0: 66 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 29  f nLargestLocal)
60c0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
60d0: 20 20 69 66 20 28 72 65 73 65 74 20 7c 7c 20 63    if (reset || c
60e0: 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20  ompact)..       
60f0: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74 65       rc = SQLite
6100: 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 74 46 6f 75  ErrorCode.NotFou
6110: 6e 64 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  nd;..#endif.... 
6120: 20 20 20 20 20 20 20 6e 46 72 65 65 20 3d 20 6e         nFree = n
6130: 46 72 65 65 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20  FreeLocal;..    
6140: 20 20 20 20 6e 4c 61 72 67 65 73 74 20 3d 20 6e      nLargest = n
6150: 4c 61 72 67 65 73 74 4c 6f 63 61 6c 3b 0d 0a 20  LargestLocal;.. 
6160: 20 20 20 20 20 20 20 72 65 73 65 74 4f 6b 20 3d         resetOk =
6170: 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 3b 0d 0a   resetOkLocal;..
6180: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
6190: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
61a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
61b0: 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f  ..    /// Shutdo
61c0: 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e  wn the SQLite en
61d0: 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20  gine so that it 
61e0: 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64  can be restarted
61f0: 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d   with different.
6200: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75  .    /// configu
6210: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20  ration options. 
6220: 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75   We depend on au
6230: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  to initializatio
6240: 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20  n to recover... 
6250: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
6260: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
6270: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 73 74  rns>Returns a st
6280: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
6290: 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75  sult code.</retu
62a0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
62b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
62c0: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 68 75 74  teErrorCode Shut
62d0: 64 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  down()..    {.. 
62e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
62f0: 61 74 69 63 53 68 75 74 64 6f 77 6e 28 66 61 6c  aticShutdown(fal
6300: 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  se);..    }.... 
6310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6320: 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f  ..    /// Shutdo
6330: 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e  wn the SQLite en
6340: 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20  gine so that it 
6350: 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64  can be restarted
6360: 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d   with different.
6370: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75  .    /// configu
6380: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20  ration options. 
6390: 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75   We depend on au
63a0: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  to initializatio
63b0: 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20  n to recover... 
63c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
63d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
63e0: 6d 20 6e 61 6d 65 3d 22 64 69 72 65 63 74 6f 72  m name="director
63f0: 69 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  ies">..    /// N
6400: 6f 6e 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65 74  on-zero to reset
6410: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
6420: 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  d temporary dire
6430: 63 74 6f 72 69 65 73 20 74 6f 20 74 68 65 69 72  ctories to their
6440: 0d 0a 20 20 20 20 2f 2f 2f 20 64 65 66 61 75 6c  ..    /// defaul
6450: 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20  t values, which 
6460: 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66  should be null f
6470: 6f 72 20 62 6f 74 68 2e 20 20 54 68 69 73 20 70  or both.  This p
6480: 61 72 61 6d 65 74 65 72 20 68 61 73 20 6e 6f 0d  arameter has no.
6490: 0a 20 20 20 20 2f 2f 2f 20 65 66 66 65 63 74 20  .    /// effect 
64a0: 6f 6e 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73 20 6f  on non-Windows o
64b0: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 73  perating systems
64c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
64d0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
64e0: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
64f0: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
6500: 72 65 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65  result code.</re
6510: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
6520: 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
6530: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74  teErrorCode Stat
6540: 69 63 53 68 75 74 64 6f 77 6e 28 0d 0a 20 20 20  icShutdown(..   
6550: 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 65 63 74       bool direct
6560: 6f 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20 29  ories..        )
6570: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6580: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6590: 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
65a0: 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20  rCode.Ok;....   
65b0: 20 20 20 20 20 69 66 20 28 64 69 72 65 63 74 6f       if (directo
65c0: 72 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  ries)..        {
65d0: 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20  ..#if WINDOWS.. 
65e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
65f0: 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c == SQLiteError
6600: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
6610: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55            rc = U
6620: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6630: 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  ds.sqlite3_win32
6640: 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 31  _set_directory(1
6650: 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20  , null);....    
6660: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
6670: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6680: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
6690: 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61         rc = Unsa
66a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
66b0: 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
66c0: 74 5f 64 69 72 65 63 74 6f 72 79 28 32 2c 20 6e  t_directory(2, n
66d0: 75 6c 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23 69  ull);..#else..#i
66e0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
66f0: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
6700: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
6710: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
6720: 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
6730: 20 20 20 20 20 22 53 68 75 74 64 6f 77 6e 3a 20       "Shutdown: 
6740: 43 61 6e 6e 6f 74 20 72 65 73 65 74 20 64 69 72  Cannot reset dir
6750: 65 63 74 6f 72 69 65 73 20 6f 6e 20 74 68 69 73  ectories on this
6760: 20 70 6c 61 74 66 6f 72 6d 2e 22 29 3b 0d 0a 23   platform.");..#
6770: 65 6e 64 69 66 0d 0a 23 65 6e 64 69 66 0d 0a 20  endif..#endif.. 
6780: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6790: 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51      if (rc == SQ
67a0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
67b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
67c0: 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
67d0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
67e0: 73 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 0d 0a 20  shutdown();.... 
67f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
6800: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6810: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6820: 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
6830: 73 20 69 66 20 74 68 65 20 61 73 73 6f 63 69 61  s if the associa
6840: 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65  ted native conne
6850: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20  ction handle is 
6860: 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  open...    /// <
6870: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
6880: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
6890: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
68a0: 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
68b0: 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69   native connecti
68c0: 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f 70 65  on handle is ope
68d0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  n...    /// </re
68e0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
68f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
6900: 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20 20  ol IsOpen()..   
6910: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
6920: 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c  rn (_sql != null
6930: 29 20 26 26 20 21 5f 73 71 6c 2e 49 73 49 6e 76  ) && !_sql.IsInv
6940: 61 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e 49 73  alid && !_sql.Is
6950: 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a  Closed;..    }..
6960: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
6970: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
6980: 75 72 6e 73 20 74 68 65 20 66 75 6c 6c 79 20 71  urns the fully q
6990: 75 61 6c 69 66 69 65 64 20 70 61 74 68 20 61 6e  ualified path an
69a0: 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20  d file name for 
69b0: 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
69c0: 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61  en..    /// data
69d0: 62 61 73 65 2c 20 69 66 20 61 6e 79 2e 0d 0a 20  base, if any... 
69e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
69f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
6a00: 6d 20 6e 61 6d 65 3d 22 64 62 4e 61 6d 65 22 3e  m name="dbName">
6a10: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
6a20: 6d 65 20 6f 66 20 74 68 65 20 61 74 74 61 63 68  me of the attach
6a30: 65 64 20 64 61 74 61 62 61 73 65 20 74 6f 20 71  ed database to q
6a40: 75 65 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  uery...    /// <
6a50: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
6a60: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
6a70: 2f 2f 2f 20 54 68 65 20 66 75 6c 6c 79 20 71 75  /// The fully qu
6a80: 61 6c 69 66 69 65 64 20 70 61 74 68 20 61 6e 64  alified path and
6a90: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74   file name for t
6aa0: 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
6ab0: 6e 20 64 61 74 61 62 61 73 65 2c 0d 0a 20 20 20  n database,..   
6ac0: 20 2f 2f 2f 20 69 66 20 61 6e 79 2e 0d 0a 20 20   /// if any...  
6ad0: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
6ae0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
6af0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
6b00: 65 74 46 69 6c 65 4e 61 6d 65 28 73 74 72 69 6e  etFileName(strin
6b10: 67 20 64 62 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  g dbName)..    {
6b20: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
6b30: 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
6b40: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6b50: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
6b60: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
6b70: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
6b80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6b90: 5f 64 62 5f 66 69 6c 65 6e 61 6d 65 5f 62 79 74  _db_filename_byt
6ba0: 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
6bb0: 20 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 62   _sql, ToUTF8(db
6bc0: 4e 61 6d 65 29 29 2c 20 2d 31 29 3b 0d 0a 20 20  Name)), -1);..  
6bd0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
6be0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
6bf0: 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73 74  d Open(string st
6c00: 72 46 69 6c 65 6e 61 6d 65 2c 20 73 74 72 69 6e  rFilename, strin
6c10: 67 20 76 66 73 4e 61 6d 65 2c 20 53 51 4c 69 74  g vfsName, SQLit
6c20: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
6c30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73   connectionFlags
6c40: 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67  , SQLiteOpenFlag
6c50: 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73 2c  sEnum openFlags,
6c60: 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a 65   int maxPoolSize
6c70: 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29 0d  , bool usePool).
6c80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f  .    {..      //
6c90: 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a  ..      // NOTE:
6ca0: 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
6cb0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
6cc0: 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 61  urrently open, a
6cd0: 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20  ttempt to..     
6ce0: 20 2f 2f 20 20 20 20 20 20 20 63 6c 6f 73 65 20   //       close 
6cf0: 69 74 20 6e 6f 77 2e 20 20 54 68 69 73 20 6d 75  it now.  This mu
6d00: 73 74 20 62 65 20 64 6f 6e 65 20 62 65 63 61 75  st be done becau
6d10: 73 65 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65  se the file name
6d20: 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20   or..      //   
6d30: 20 20 20 20 6f 74 68 65 72 20 70 61 72 61 6d 65      other parame
6d40: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 69 6d  ters that may im
6d50: 70 61 63 74 20 74 68 65 20 75 6e 64 65 72 6c 79  pact the underly
6d60: 69 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 20 20  ing database..  
6d70: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e      //       con
6d80: 6e 65 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65  nection may have
6d90: 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20   changed...     
6da0: 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f   //..      if (_
6db0: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 43 6c 6f  sql != null) Clo
6dc0: 73 65 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  se(true);....   
6dd0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20     //..      // 
6de0: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6e  NOTE: If the con
6df0: 6e 65 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20  nection was not 
6e00: 63 6c 6f 73 65 64 20 73 75 63 63 65 73 73 66 75  closed successfu
6e10: 6c 6c 79 2c 20 74 68 72 6f 77 20 61 6e 0d 0a 20  lly, throw an.. 
6e20: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
6e30: 63 65 70 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20  ception now...  
6e40: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66      //..      if
6e50: 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d   (_sql != null).
6e60: 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77  .          throw
6e70: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
6e80: 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e  tion("connection
6e90: 20 68 61 6e 64 6c 65 20 69 73 20 73 74 69 6c 6c   handle is still
6ea0: 20 61 63 74 69 76 65 22 29 3b 0d 0a 0d 0a 20 20   active");....  
6eb0: 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 75      _usePool = u
6ec0: 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f  sePool;..      _
6ed0: 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46 69  fileName = strFi
6ee0: 6c 65 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 5f  lename;..      _
6ef0: 66 6c 61 67 73 20 3d 20 63 6f 6e 6e 65 63 74 69  flags = connecti
6f00: 6f 6e 46 6c 61 67 73 3b 0d 0a 0d 0a 20 20 20 20  onFlags;....    
6f10: 20 20 69 66 20 28 75 73 65 50 6f 6f 6c 29 0d 0a    if (usePool)..
6f20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6f30: 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65 43 6f   _sql = SQLiteCo
6f40: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d  nnectionPool.Rem
6f50: 6f 76 65 28 73 74 72 46 69 6c 65 6e 61 6d 65 2c  ove(strFilename,
6f60: 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75   maxPoolSize, ou
6f70: 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b  t _poolVersion);
6f80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
6f90: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43  teConnection.OnC
6fa0: 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77  hanged(null, new
6fb0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74   ConnectionEvent
6fc0: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
6fd0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
6fe0: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4f 70 65  ionEventType.Ope
6ff0: 6e 65 64 46 72 6f 6d 50 6f 6f 6c 2c 20 6e 75 6c  nedFromPool, nul
7000: 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  l, null,..      
7010: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
7020: 2c 20 5f 73 71 6c 2c 20 73 74 72 46 69 6c 65 6e  , _sql, strFilen
7030: 61 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b  ame, new object[
7040: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..           
7050: 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29   typeof(SQLite3)
7060: 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 76  , strFilename, v
7070: 66 73 4e 61 6d 65 2c 20 63 6f 6e 6e 65 63 74 69  fsName, connecti
7080: 6f 6e 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  onFlags,..      
7090: 20 20 20 20 20 20 6f 70 65 6e 46 6c 61 67 73 2c        openFlags,
70a0: 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 75 73   maxPoolSize, us
70b0: 65 50 6f 6f 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73  ePool, _poolVers
70c0: 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23 69 66 20  ion }));....#if 
70d0: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
70e0: 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
70f0: 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61  ION..        Tra
7100: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55 6e 73  ce.WriteLine(Uns
7110: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7120: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
7130: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
7140: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
7150: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
7160: 20 20 20 20 20 22 4f 70 65 6e 20 28 50 6f 6f 6c       "Open (Pool
7170: 29 3a 20 7b 30 7d 22 2c 20 48 61 6e 64 6c 65 54  ): {0}", HandleT
7180: 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65  oString()));..#e
7190: 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  ndif..      }...
71a0: 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20  .      if (_sql 
71b0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
71c0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  {..        try..
71d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
71e0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
71f0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
7200: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
7210: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
7220: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
7230: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
7240: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 49    {..          I
7250: 6e 74 50 74 72 20 64 62 20 3d 20 49 6e 74 50 74  ntPtr db = IntPt
7260: 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
7270: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
7280: 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  de n;....#if !SQ
7290: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
72a0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 65 78 74           int ext
72b0: 46 75 6e 63 73 20 3d 20 28 28 63 6f 6e 6e 65 63  Funcs = ((connec
72c0: 74 69 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c 69  tionFlags & SQLi
72d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
72e0: 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e  s.NoExtensionFun
72f0: 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74  ctions) != SQLit
7300: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7310: 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63  .NoExtensionFunc
7320: 74 69 6f 6e 73 29 20 3f 20 31 20 3a 20 30 3b 0d  tions) ? 1 : 0;.
7330: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
7340: 28 65 78 74 46 75 6e 63 73 20 21 3d 20 30 29 0d  (extFuncs != 0).
7350: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
7360: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
7370: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7380: 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69  s.sqlite3_open_i
7390: 6e 74 65 72 6f 70 28 54 6f 55 54 46 38 28 73 74  nterop(ToUTF8(st
73a0: 72 46 69 6c 65 6e 61 6d 65 29 2c 20 54 6f 55 54  rFilename), ToUT
73b0: 46 38 28 76 66 73 4e 61 6d 65 29 2c 20 6f 70 65  F8(vfsName), ope
73c0: 6e 46 6c 61 67 73 2c 20 65 78 74 46 75 6e 63 73  nFlags, extFuncs
73d0: 2c 20 72 65 66 20 64 62 29 3b 0d 0a 20 20 20 20  , ref db);..    
73e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
73f0: 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d     else..#endif.
7400: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
7410: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
7420: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7430: 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76  s.sqlite3_open_v
7440: 32 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65  2(ToUTF8(strFile
7450: 6e 61 6d 65 29 2c 20 72 65 66 20 64 62 2c 20 6f  name), ref db, o
7460: 70 65 6e 46 6c 61 67 73 2c 20 54 6f 55 54 46 38  penFlags, ToUTF8
7470: 28 76 66 73 4e 61 6d 65 29 29 3b 0d 0a 20 20 20  (vfsName));..   
7480: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20         }....#if 
7490: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
74a0: 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
74b0: 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 54  ION..          T
74c0: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 55  race.WriteLine(U
74d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
74e0: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
74f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7500: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
7510: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
7520: 20 20 20 20 20 20 20 20 20 20 20 22 4f 70 65 6e             "Open
7530: 3a 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23  : {0}", db));..#
7540: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
7550: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
7560: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
7570: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
7580: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c  Exception(n, nul
7590: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  l);..          _
75a0: 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sql = new SQLite
75b0: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
75c0: 28 64 62 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20  (db, true);..   
75d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
75e0: 6c 6f 63 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a  lock (_sql) { /*
75f0: 20 48 41 43 4b 3a 20 46 6f 72 63 65 20 74 68 65   HACK: Force the
7600: 20 53 79 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65   SyncBlock to be
7610: 20 22 63 72 65 61 74 65 64 22 20 6e 6f 77 2e 20   "created" now. 
7620: 2a 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  */ }....        
7630: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7640: 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
7650: 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
7660: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
7670: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
7680: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65  nectionEventType
7690: 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64  .NewCriticalHand
76a0: 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  le, null,..     
76b0: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c         null, nul
76c0: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73  l, null, _sql, s
76d0: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20  trFilename, new 
76e0: 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20  object[] {..    
76f0: 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53          typeof(S
7700: 51 4c 69 74 65 33 29 2c 20 73 74 72 46 69 6c 65  QLite3), strFile
7710: 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 63  name, vfsName, c
7720: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 0d  onnectionFlags,.
7730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 65  .            ope
7740: 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53  nFlags, maxPoolS
7750: 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 20 7d 29 29  ize, usePool }))
7760: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
7770: 20 20 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63      // Bind func
7780: 74 69 6f 6e 73 20 74 6f 20 74 68 69 73 20 63 6f  tions to this co
7790: 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e  nnection.  If an
77a0: 79 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74  y previous funct
77b0: 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65  ions of the same
77c0: 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20   name..      // 
77d0: 77 65 72 65 20 61 6c 72 65 61 64 79 20 62 6f 75  were already bou
77e0: 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 65 77  nd, then the new
77f0: 20 62 69 6e 64 69 6e 67 73 20 72 65 70 6c 61 63   bindings replac
7800: 65 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20  e the old...    
7810: 20 20 69 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f    if ((connectio
7820: 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  nFlags & SQLiteC
7830: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
7840: 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 20  oBindFunctions) 
7850: 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  != SQLiteConnect
7860: 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46  ionFlags.NoBindF
7870: 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20  unctions)..     
7880: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
7890: 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20   (_functions == 
78a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
78b0: 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20       _functions 
78c0: 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
78d0: 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41  <SQLiteFunctionA
78e0: 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65  ttribute, SQLite
78f0: 46 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a  Function>();....
7900: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
7910: 68 20 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c  h (KeyValuePair<
7920: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
7930: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
7940: 75 6e 63 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20  unction> pair.. 
7950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7960: 20 69 6e 20 53 51 4c 69 74 65 46 75 6e 63 74 69   in SQLiteFuncti
7970: 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  on.BindFunctions
7980: 28 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f  (this, connectio
7990: 6e 46 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  nFlags))..      
79a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
79b0: 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b       _functions[
79c0: 70 61 69 72 2e 4b 65 79 5d 20 3d 20 70 61 69 72  pair.Key] = pair
79d0: 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  .Value;..       
79e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
79f0: 0a 20 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75  .      SetTimeou
7a00: 74 28 30 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e  t(0);..      GC.
7a10: 4b 65 65 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b  KeepAlive(_sql);
7a20: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
7a30: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
7a40: 20 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28   void ClearPool(
7a50: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7a60: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7a70: 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f  Pool.ClearPool(_
7a80: 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  fileName);..    
7a90: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
7aa0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
7ab0: 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20  ountPool()..    
7ac0: 7b 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69  {..        Dicti
7ad0: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e  onary<string, in
7ae0: 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c  t> counts = null
7af0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f  ;..        int o
7b00: 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20  penCount = 0;.. 
7b10: 20 20 20 20 20 20 20 69 6e 74 20 63 6c 6f 73 65         int close
7b20: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20  Count = 0;..    
7b30: 20 20 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75      int totalCou
7b40: 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  nt = 0;....     
7b50: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
7b60: 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74  ionPool.GetCount
7b70: 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  s(_fileName,..  
7b80: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 63 6f            ref co
7b90: 75 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f  unts, ref openCo
7ba0: 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f  unt, ref closeCo
7bb0: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
7bc0: 20 20 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74    ref totalCount
7bd0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
7be0: 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b  turn totalCount;
7bf0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
7c00: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
7c10: 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74   void SetTimeout
7c20: 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29  (int nTimeoutMS)
7c30: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49  ..    {..      I
7c40: 6e 74 50 74 72 20 64 62 20 3d 20 5f 73 71 6c 3b  ntPtr db = _sql;
7c50: 0d 0a 20 20 20 20 20 20 69 66 20 28 64 62 20 3d  ..      if (db =
7c60: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 74  = IntPtr.Zero) t
7c70: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7c80: 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e  xception("no con
7c90: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61  nection handle a
7ca0: 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 20 20 20  vailable");..   
7cb0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
7cc0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
7cd0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7ce0: 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
7cf0: 64 62 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b  db, nTimeoutMS);
7d00: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
7d10: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7d20: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
7d30: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
7d40: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
7d50: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
7d60: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
7d70: 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c  de bool Step(SQL
7d80: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
7d90: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
7da0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7db0: 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f   n;..      Rando
7dc0: 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  m rnd = null;.. 
7dd0: 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74       uint startt
7de0: 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69  ick = (uint)Envi
7df0: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
7e00: 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 74  t;..      uint t
7e10: 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29 28  imeout = (uint)(
7e20: 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63  stmt._command._c
7e30: 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20  ommandTimeout * 
7e40: 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  1000);....      
7e50: 52 65 73 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74  ResetCancelCount
7e60: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69  ();....      whi
7e70: 6c 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20  le (true)..     
7e80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d   {..        try.
7e90: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7ea0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
7eb0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
7ec0: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
7ed0: 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
7ee0: 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
7ef0: 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
7f00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7f10: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
7f20: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7f30: 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  step(stmt._sqlit
7f40: 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20  e_stmt);..      
7f50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
7f60: 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f  f (ShouldThrowFo
7f70: 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20  rCancel())..    
7f80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7f90: 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c     if ((n == SQL
7fa0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
7fb0: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
7fc0: 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74       (n == SQLit
7fd0: 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20  eErrorCode.Row) 
7fe0: 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
7ff0: 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65      (n == SQLite
8000: 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29  ErrorCode.Done))
8010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8030: 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72   n = SQLiteError
8040: 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d  Code.Interrupt;.
8050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
8070: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8080: 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29  ception(n, null)
8090: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
80a0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
80b0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
80c0: 2e 49 6e 74 65 72 72 75 70 74 29 20 72 65 74 75  .Interrupt) retu
80d0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
80e0: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
80f0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29  teErrorCode.Row)
8100: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
8110: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
8120: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
8130: 44 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61 6c  Done) return fal
8140: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  se;....        i
8150: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
8160: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
8170: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8180: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
8190: 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e r;....        
81a0: 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63    // An error oc
81b0: 63 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74 20  curred, attempt 
81c0: 74 6f 20 72 65 73 65 74 20 74 68 65 20 73 74 61  to reset the sta
81d0: 74 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20  tement.  If the 
81e0: 72 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65 63  reset worked bec
81f0: 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20  ause the..      
8200: 20 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68 61      // schema ha
8210: 73 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74 72  s changed, re-tr
8220: 79 20 74 68 65 20 73 74 65 70 20 61 67 61 69 6e  y the step again
8230: 2e 20 20 49 66 20 69 74 20 65 72 72 6f 72 65 64  .  If it errored
8240: 20 6f 75 72 20 62 65 63 61 75 73 65 20 74 68 65   our because the
8250: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..     
8260: 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65       // is locke
8270: 64 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65 74  d, then keep ret
8280: 72 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65 20  rying until the 
8290: 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20  command timeout 
82a0: 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20  occurs...       
82b0: 20 20 20 72 20 3d 20 52 65 73 65 74 28 73 74 6d     r = Reset(stm
82c0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
82d0: 20 69 66 20 28 72 20 3d 3d 20 53 51 4c 69 74 65   if (r == SQLite
82e0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
82f0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
8300: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8310: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
8320: 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
8330: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28        else if ((
8340: 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  r == SQLiteError
8350: 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72  Code.Locked || r
8360: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
8370: 6f 64 65 2e 42 75 73 79 29 20 26 26 20 73 74 6d  ode.Busy) && stm
8380: 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75  t._command != nu
8390: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ll)..          {
83a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
83b0: 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20   Keep trying..  
83c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e            if (rn
83d0: 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69  d == null) // Fi
83e0: 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65  rst time we've e
83f0: 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c  ncountered the l
8400: 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ock..           
8410: 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e     rnd = new Ran
8420: 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dom();....      
8430: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76        // If we'v
8440: 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63  e exceeded the c
8450: 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74  ommand's timeout
8460: 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68  , give up and th
8470: 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20  row an error..  
8480: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75            if ((u
8490: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
84a0: 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72  TickCount - star
84b0: 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29  ttick > timeout)
84c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
84d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
84e0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
84f0: 78 63 65 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c  xception(r, GetL
8500: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
8510: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8520: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
8530: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
8550: 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66  therwise sleep f
8560: 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75  or a random amou
8570: 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f  nt of time up to
8580: 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20   150ms..        
8590: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72        System.Thr
85a0: 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c  eading.Thread.Sl
85b0: 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20  eep(rnd.Next(1, 
85c0: 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  150));..        
85d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
85e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
85f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
8600: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
8610: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20  y>..    /// Has 
8620: 74 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73  the sqlite3_errs
8630: 74 72 28 29 20 63 6f 72 65 20 6c 69 62 72 61 72  tr() core librar
8640: 79 20 41 50 49 20 62 65 65 6e 20 63 68 65 63 6b  y API been check
8650: 65 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20  ed for yet?..   
8660: 20 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20 69   /// If so, is i
8670: 74 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20  t present?..    
8680: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
8690: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
86a0: 69 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 65 72  ic bool? have_er
86b0: 72 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rstr = null;....
86c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
86d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
86e0: 6e 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  ns the error mes
86f0: 73 61 67 65 20 66 6f 72 20 74 68 65 20 73 70 65  sage for the spe
8700: 63 69 66 69 65 64 20 53 51 4c 69 74 65 20 72 65  cified SQLite re
8710: 74 75 72 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d  turn code using.
8720: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c  .    /// the sql
8730: 69 74 65 33 5f 65 72 72 73 74 72 28 29 20 66 75  ite3_errstr() fu
8740: 6e 63 74 69 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20  nction, falling 
8750: 62 61 63 6b 20 74 6f 20 74 68 65 20 69 6e 74 65  back to the inte
8760: 72 6e 61 6c 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20  rnal lookup..   
8770: 20 2f 2f 2f 20 74 61 62 6c 65 20 69 66 20 6e 65   /// table if ne
8780: 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f  cessary...    //
8790: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
87a0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
87b0: 65 3d 22 72 63 22 3e 54 68 65 20 53 51 4c 69 74  e="rc">The SQLit
87c0: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 3c 2f  e return code.</
87d0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
87e0: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 65 72 72  <returns>The err
87f0: 6f 72 20 6d 65 73 73 61 67 65 20 6f 72 20 6e 75  or message or nu
8800: 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20  ll if it cannot 
8810: 62 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74 75 72  be found.</retur
8820: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
8830: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
8840: 47 65 74 45 72 72 6f 72 53 74 72 69 6e 67 28 53  GetErrorString(S
8850: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
8860: 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
8870: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
8880: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
8890: 66 20 28 68 61 76 65 5f 65 72 72 73 74 72 20 3d  f (have_errstr =
88a0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
88b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
88c0: 20 20 20 20 20 20 20 20 69 6e 74 20 76 65 72 73          int vers
88d0: 69 6f 6e 4e 75 6d 62 65 72 20 3d 20 53 51 4c 69  ionNumber = SQLi
88e0: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b  teVersionNumber;
88f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8900: 20 20 68 61 76 65 5f 65 72 72 73 74 72 20 3d 20    have_errstr = 
8910: 28 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e  (versionNumber >
8920: 3d 20 33 30 30 37 30 31 35 29 3b 0d 0a 20 20 20  = 3007015);..   
8930: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8940: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 62            if ((b
8950: 6f 6f 6c 29 68 61 76 65 5f 65 72 72 73 74 72 29  ool)have_errstr)
8960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8980: 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e   IntPtr ptr = Un
8990: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
89a0: 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72  s.sqlite3_errstr
89b0: 28 72 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  (rc);....       
89c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 74 72           if (ptr
89d0: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
89e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
89f0: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
8a00: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
8a10: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
8a20: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8a30: 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72  Marshal.PtrToStr
8a40: 69 6e 67 41 6e 73 69 28 70 74 72 29 3b 0d 0a 23  ingAnsi(ptr);..#
8a50: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
8a60: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8a70: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74   UTF8ToString(pt
8a80: 72 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  r, -1);..#endif.
8a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8aa0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8ab0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
8ac0: 20 20 20 20 20 20 63 61 74 63 68 20 28 45 6e 74        catch (Ent
8ad0: 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45  ryPointNotFoundE
8ae0: 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20  xception)..     
8af0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8b00: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
8b10: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8b20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 46 61         return Fa
8b30: 6c 6c 62 61 63 6b 47 65 74 45 72 72 6f 72 53 74  llbackGetErrorSt
8b40: 72 69 6e 67 28 72 63 29 3b 0d 0a 20 20 20 20 7d  ring(rc);..    }
8b50: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
8b60: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48  mary>..    /// H
8b70: 61 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  as the sqlite3_s
8b80: 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 29 20 63  tmt_readonly() c
8b90: 6f 72 65 20 6c 69 62 72 61 72 79 20 41 50 49 20  ore library API 
8ba0: 62 65 65 6e 20 63 68 65 63 6b 65 64 20 66 6f 72  been checked for
8bb0: 20 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49   yet?..    /// I
8bc0: 66 20 73 6f 2c 20 69 73 20 69 74 20 70 72 65 73  f so, is it pres
8bd0: 65 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent?..    /// </
8be0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
8bf0: 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
8c00: 6c 3f 20 68 61 76 65 5f 73 74 6d 74 5f 72 65 61  l? have_stmt_rea
8c10: 64 6f 6e 6c 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  donly = null;...
8c20: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
8c30: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
8c40: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20  rns non-zero if 
8c50: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73 74  the specified st
8c60: 61 74 65 6d 65 6e 74 20 69 73 20 72 65 61 64 2d  atement is read-
8c70: 6f 6e 6c 79 20 69 6e 20 6e 61 74 75 72 65 2e 0d  only in nature..
8c80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
8c90: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
8ca0: 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e  ram name="stmt">
8cb0: 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  The statement to
8cc0: 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d   check.</param>.
8cd0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
8ce0: 73 3e 54 72 75 65 20 69 66 20 74 68 65 20 6f 75  s>True if the ou
8cf0: 74 65 72 20 71 75 65 72 79 20 69 73 20 72 65 61  ter query is rea
8d00: 64 2d 6f 6e 6c 79 2e 3c 2f 72 65 74 75 72 6e 73  d-only.</returns
8d10: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
8d20: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
8d30: 52 65 61 64 4f 6e 6c 79 28 0d 0a 20 20 20 20 20  ReadOnly(..     
8d40: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
8d50: 6e 74 20 73 74 6d 74 0d 0a 20 20 20 20 20 20 20  nt stmt..       
8d60: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
8d70: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
8d80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
8d90: 66 20 28 68 61 76 65 5f 73 74 6d 74 5f 72 65 61  f (have_stmt_rea
8da0: 64 6f 6e 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  donly == null)..
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8dd0: 6e 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72  nt versionNumber
8de0: 20 3d 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e   = SQLiteVersion
8df0: 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20  Number;..       
8e00: 20 20 20 20 20 20 20 20 20 68 61 76 65 5f 73 74           have_st
8e10: 6d 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 28 76  mt_readonly = (v
8e20: 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20  ersionNumber >= 
8e30: 33 30 30 37 30 30 34 29 3b 0d 0a 20 20 20 20 20  3007004);..     
8e40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8e50: 20 20 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f          if ((boo
8e60: 6c 29 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64  l)have_stmt_read
8e70: 6f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20  only)..         
8e80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8e90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
8ea0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8eb0: 2e 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65  .sqlite3_stmt_re
8ec0: 61 64 6f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20  adonly(..       
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d               stm
8ee0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 20  t._sqlite_stmt) 
8ef0: 21 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  != 0;..         
8f00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
8f10: 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28  .        catch (
8f20: 45 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75  EntryPointNotFou
8f30: 6e 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20  ndException)..  
8f40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8f50: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
8f60: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
8f70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
8f80: 20 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 45 3a   false; /* NOTE:
8f90: 20 55 6e 6b 6e 6f 77 6e 2c 20 61 73 73 75 6d 65   Unknown, assume
8fa0: 20 66 61 6c 73 65 2e 20 2a 2f 0d 0a 20 20 20 20   false. */..    
8fb0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8fc0: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
8fd0: 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74  eErrorCode Reset
8fe0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
8ff0: 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20   stmt)..    {.. 
9000: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
9010: 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21  Code n;....#if !
9020: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
9030: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
9040: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
9050: 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74  qlite3_reset_int
9060: 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
9070: 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d  e_stmt);..#else.
9080: 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
9090: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
90a0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d  qlite3_reset(stm
90b0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
90c0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
90d0: 20 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65    // If the sche
90e0: 6d 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20  ma changed, try 
90f0: 61 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69  and re-prepare i
9100: 74 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d  t..      if (n =
9110: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
9120: 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20  e.Schema)..     
9130: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52   {..        // R
9140: 65 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20  ecreate a dummy 
9150: 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20  statement..     
9160: 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20     string str = 
9170: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 75  null;..        u
9180: 73 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74  sing (SQLiteStat
9190: 65 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70  ement tmp = Prep
91a0: 61 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f  are(null, stmt._
91b0: 73 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75  sqlStatement, nu
91c0: 6c 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e  ll, (uint)(stmt.
91d0: 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e  _command._comman
91e0: 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29  dTimeout * 1000)
91f0: 2c 20 72 65 66 20 73 74 72 29 29 0d 0a 20 20 20  , ref str))..   
9200: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9210: 20 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68    // Finalize th
9220: 65 20 65 78 69 73 74 69 6e 67 20 73 74 61 74 65  e existing state
9230: 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  ment..          
9240: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9250: 74 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  t.Dispose();..  
9260: 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73          // Reass
9270: 69 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d  ign a new statem
9280: 65 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ent pointer to t
9290: 68 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74  he old statement
92a0: 20 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74   and clear the t
92b0: 65 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20  emporary one..  
92c0: 20 20 20 20 20 20 20 20 69 66 20 28 74 6d 70 20          if (tmp 
92d0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
92e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
92f0: 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f     stmt._sqlite_
9300: 73 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69  stmt = tmp._sqli
9310: 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20  te_stmt;..      
9320: 20 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74        tmp._sqlit
9330: 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a  e_stmt = null;..
9340: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9350: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70           // Reap
9360: 70 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a  ply parameters..
9370: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42            stmt.B
9380: 69 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b  indParameters();
9390: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
93a0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
93b0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e  teErrorCode.Unkn
93c0: 6f 77 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77 61  own; // Reset wa
93d0: 73 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d  s OK, with schem
93e0: 61 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20  a change..      
93f0: 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  }..      else if
9400: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
9410: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
9420: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
9430: 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20  rCode.Busy)..   
9440: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a       return n;..
9450: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
9460: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9470: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 74 68  .Ok)..        th
9480: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
9490: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
94a0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
94b0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f       return n; /
94c0: 2f 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e  / We reset OK, n
94d0: 6f 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  o schema changes
94e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
94f0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
9500: 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45   string GetLastE
9510: 72 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  rror()..    {.. 
9520: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
9530: 74 4c 61 73 74 45 72 72 6f 72 28 6e 75 6c 6c 29  tLastError(null)
9540: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
9550: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
9560: 65 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74  e string GetLast
9570: 45 72 72 6f 72 28 73 74 72 69 6e 67 20 64 65 66  Error(string def
9580: 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  Value)..    {.. 
9590: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65         string re
95a0: 73 75 6c 74 20 3d 20 53 51 4c 69 74 65 42 61 73  sult = SQLiteBas
95b0: 65 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28 5f  e.GetLastError(_
95c0: 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20  sql, _sql);..   
95d0: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
95e0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65  IsNullOrEmpty(re
95f0: 73 75 6c 74 29 29 20 72 65 73 75 6c 74 20 3d 20  sult)) result = 
9600: 64 65 66 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  defValue;..     
9610: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
9620: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
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 2f 0d  ///////////////.
9690: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 51  ...    #region Q
96a0: 75 65 72 79 20 44 69 61 67 6e 6f 73 74 69 63 73  uery Diagnostics
96b0: 20 53 75 70 70 6f 72 74 0d 0a 23 69 66 20 21 50   Support..#if !P
96c0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
96d0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f  RAMEWORK..    //
96e0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
96f0: 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20   /// This field 
9700: 69 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20  is used to keep 
9710: 74 72 61 63 6b 20 6f 66 20 77 68 65 74 68 65 72  track of whether
9720: 20 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 20 20   or not the..   
9730: 20 2f 2f 2f 20 22 53 51 4c 69 74 65 5f 46 6f 72   /// "SQLite_For
9740: 63 65 4c 6f 67 50 72 65 70 61 72 65 22 20 65 6e  ceLogPrepare" en
9750: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
9760: 6c 65 20 68 61 73 20 62 65 65 6e 20 71 75 65 72  le has been quer
9770: 69 65 64 2e 20 20 49 66 20 73 6f 2c 0d 0a 20 20  ied.  If so,..  
9780: 20 20 2f 2f 2f 20 69 74 20 77 69 6c 6c 20 6f 6e    /// it will on
9790: 6c 79 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69  ly be non-zero i
97a0: 66 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e  f the environmen
97b0: 74 20 76 61 72 69 61 62 6c 65 20 77 61 73 20 70  t variable was p
97c0: 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f  resent...    ///
97d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
97e0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
97f0: 62 6f 6f 6c 3f 20 66 6f 72 63 65 4c 6f 67 50 72  bool? forceLogPr
9800: 65 70 61 72 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  epare = null;...
9810: 0a 20 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
9880: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
9890: 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66  // Determines if
98a0: 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72   all calls to pr
98b0: 65 70 61 72 65 20 61 20 53 51 4c 20 71 75 65 72  epare a SQL quer
98c0: 79 20 77 69 6c 6c 20 62 65 20 6c 6f 67 67 65 64  y will be logged
98d0: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 67 61 72  ,..    /// regar
98e0: 64 6c 65 73 73 20 6f 66 20 74 68 65 20 66 6c 61  dless of the fla
98f0: 67 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63  gs for the assoc
9900: 69 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  iated connection
9910: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
9920: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
9930: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
9940: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6c 6f  / Non-zero to lo
9950: 67 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70  g all calls to p
9960: 72 65 70 61 72 65 20 61 20 53 51 4c 20 71 75 65  repare a SQL que
9970: 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ry...    /// </r
9980: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69  eturns>..    pri
9990: 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
99a0: 20 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65   ForceLogPrepare
99b0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
99c0: 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f     lock (syncRoo
99d0: 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t)..        {.. 
99e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
99f0: 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d  orceLogPrepare =
9a00: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9a10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9a20: 20 20 20 20 20 20 20 20 69 66 20 28 55 6e 73 61          if (Unsa
9a30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9a40: 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65 28  GetSettingValue(
9a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9a60: 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 69 74            "SQLit
9a70: 65 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72  e_ForceLogPrepar
9a80: 65 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c  e", null) != nul
9a90: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
9aa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9ab0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 63 65             force
9ac0: 4c 6f 67 50 72 65 70 61 72 65 20 3d 20 74 72 75  LogPrepare = tru
9ad0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
9ae0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
9af0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 20 20 66 6f 72 63 65 4c 6f 67 50 72 65 70      forceLogPrep
9b30: 61 72 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  are = false;..  
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
9b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
9b70: 74 75 72 6e 20 28 62 6f 6f 6c 29 66 6f 72 63 65  turn (bool)force
9b80: 4c 6f 67 50 72 65 70 61 72 65 3b 0d 0a 20 20 20  LogPrepare;..   
9b90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23       }..    }..#
9ba0: 65 6e 64 69 66 0d 0a 20 20 20 20 23 65 6e 64 72  endif..    #endr
9bb0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
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 2f 0d 0a 0d 0a  ////////////....
9c20: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9c30: 72 72 69 64 65 20 53 51 4c 69 74 65 53 74 61 74  rride SQLiteStat
9c40: 65 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53 51  ement Prepare(SQ
9c50: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
9c60: 6e 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71  nn, string strSq
9c70: 6c 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  l, SQLiteStateme
9c80: 6e 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e  nt previous, uin
9c90: 74 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66  t timeoutMS, ref
9ca0: 20 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69   string strRemai
9cb0: 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  n)..    {..     
9cc0: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
9cd0: 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53 71  ullOrEmpty(strSq
9ce0: 6c 29 29 20 73 74 72 53 71 6c 20 3d 20 73 74 72  l)) strSql = str
9cf0: 53 71 6c 2e 54 72 69 6d 28 29 3b 0d 0a 20 20 20  Sql.Trim();..   
9d00: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
9d10: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72  sNullOrEmpty(str
9d20: 53 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  Sql))..      {..
9d30: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9d40: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c      // NOTE: SQL
9d50: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  ite does not sup
9d60: 70 6f 72 74 20 74 68 65 20 63 6f 6e 63 65 70 74  port the concept
9d70: 20 6f 66 20 73 65 70 61 72 61 74 65 20 73 63 68   of separate sch
9d80: 65 6d 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  emas..        //
9d90: 20 20 20 20 20 20 20 69 6e 20 6f 6e 65 20 64 61         in one da
9da0: 74 61 62 61 73 65 3b 20 74 68 65 72 65 66 6f 72  tabase; therefor
9db0: 65 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 62 61  e, remove the ba
9dc0: 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a  se schema name..
9dd0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
9de0: 20 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20   used to smooth 
9df0: 69 6e 74 65 67 72 61 74 69 6f 6e 20 77 69 74 68  integration with
9e00: 20 74 68 65 20 62 61 73 65 20 2e 4e 45 54 20 46   the base .NET F
9e10: 72 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20  ramework..      
9e20: 20 20 2f 2f 20 20 20 20 20 20 20 64 61 74 61 20    //       data 
9e30: 63 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20 20 20  classes...      
9e40: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 73 74    //..        st
9e50: 72 69 6e 67 20 62 61 73 65 53 63 68 65 6d 61 4e  ring baseSchemaN
9e60: 61 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75  ame = (cnn != nu
9e70: 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53  ll) ? cnn._baseS
9e80: 63 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c  chemaName : null
9e90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
9ea0: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
9eb0: 72 45 6d 70 74 79 28 62 61 73 65 53 63 68 65 6d  rEmpty(baseSchem
9ec0: 61 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  aName))..       
9ed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74   {..          st
9ee0: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65  rSql = strSql.Re
9ef0: 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  place(..        
9f00: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
9f10: 76 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  veMethods.String
9f20: 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e  Format(CultureIn
9f30: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
9f40: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
9f50: 20 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62 61      "[{0}].", ba
9f60: 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53  seSchemaName), S
9f70: 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d  tring.Empty);...
9f80: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71  .          strSq
9f90: 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61  l = strSql.Repla
9fa0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
9fb0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
9fc0: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
9fd0: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
9fe0: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
9ff0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a000: 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68   "{0}.", baseSch
a010: 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67  emaName), String
a020: 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20  .Empty);..      
a030: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
a040: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
a050: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
a060: 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28  s =..          (
a070: 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63  cnn != null) ? c
a080: 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74  nn.Flags : SQLit
a090: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
a0a0: 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20  .Default;....   
a0b0: 20 20 20 69 66 20 28 0d 0a 23 69 66 20 21 50 4c     if (..#if !PL
a0c0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
a0d0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
a0e0: 20 20 20 46 6f 72 63 65 4c 6f 67 50 72 65 70 61     ForceLogPrepa
a0f0: 72 65 28 29 20 7c 7c 0d 0a 23 65 6e 64 69 66 0d  re() ||..#endif.
a100: 0a 20 20 20 20 20 20 20 20 20 20 28 28 66 6c 61  .          ((fla
a110: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
a120: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72  ctionFlags.LogPr
a130: 65 70 61 72 65 29 20 3d 3d 20 53 51 4c 69 74 65  epare) == SQLite
a140: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
a150: 4c 6f 67 50 72 65 70 61 72 65 29 29 0d 0a 20 20  LogPrepare))..  
a160: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a170: 20 69 66 20 28 28 73 74 72 53 71 6c 20 3d 3d 20   if ((strSql == 
a180: 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53 71 6c  null) || (strSql
a190: 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20 7c 7c  .Length == 0) ||
a1a0: 20 28 73 74 72 53 71 6c 2e 54 72 69 6d 28 29 2e   (strSql.Trim().
a1b0: 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20  Length == 0)).. 
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
a1d0: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
a1e0: 65 28 22 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e  e("Preparing {<n
a1f0: 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a  othing>}...");..
a200: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
a210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
a220: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
a230: 67 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ge(UnsafeNativeM
a240: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
a250: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
a260: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
a270: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
a280: 72 65 2c 20 22 50 72 65 70 61 72 69 6e 67 20 7b  re, "Preparing {
a290: 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53  {{0}}}...", strS
a2a0: 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ql));..      }..
a2b0: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 73  ..      IntPtr s
a2c0: 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tmt = IntPtr.Zer
a2d0: 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  o;..      IntPtr
a2e0: 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65   ptr = IntPtr.Ze
a2f0: 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ro;..      int l
a300: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53  en = 0;..      S
a310: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
a320: 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
a330: 64 65 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20  de.Schema;..    
a340: 20 20 69 6e 74 20 72 65 74 72 69 65 73 20 3d 20    int retries = 
a350: 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6d 61  0;..      int ma
a360: 78 69 6d 75 6d 52 65 74 72 69 65 73 20 3d 20 28  ximumRetries = (
a370: 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63  cnn != null) ? c
a380: 6e 6e 2e 5f 70 72 65 70 61 72 65 52 65 74 72 69  nn._prepareRetri
a390: 65 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65  es : SQLiteConne
a3a0: 63 74 69 6f 6e 2e 44 65 66 61 75 6c 74 50 72 65  ction.DefaultPre
a3b0: 70 61 72 65 52 65 74 72 69 65 73 3b 0d 0a 20 20  pareRetries;..  
a3c0: 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54      byte[] b = T
a3d0: 6f 55 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a  oUTF8(strSql);..
a3e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
a3f0: 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  edefs = null;.. 
a400: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
a410: 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b  ment cmd = null;
a420: 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72  ..      Random r
a430: 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  nd = null;..    
a440: 20 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b    uint starttick
a450: 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e   = (uint)Environ
a460: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d  ment.TickCount;.
a470: 0a 0d 0a 20 20 20 20 20 20 52 65 73 65 74 43 61  ...      ResetCa
a480: 6e 63 65 6c 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a  ncelCount();....
a490: 20 20 20 20 20 20 47 43 48 61 6e 64 6c 65 20 68        GCHandle h
a4a0: 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65  andle = GCHandle
a4b0: 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64  .Alloc(b, GCHand
a4c0: 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d  leType.Pinned);.
a4d0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 73  .      IntPtr ps
a4e0: 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72  ql = handle.Addr
a4f0: 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29  OfPinnedObject()
a500: 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53  ;..      SQLiteS
a510: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 73  tatementHandle s
a520: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d  tatementHandle =
a530: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 74 72   null;..      tr
a540: 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  y..      {..    
a550: 20 20 20 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d      while ((n ==
a560: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a570: 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20  .Schema || n == 
a580: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a590: 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53  Locked || n == S
a5a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42  QLiteErrorCode.B
a5b0: 75 73 79 29 20 26 26 20 72 65 74 72 69 65 73 20  usy) && retries 
a5c0: 3c 20 6d 61 78 69 6d 75 6d 52 65 74 72 69 65 73  < maximumRetries
a5d0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
a5e0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
a5f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a600: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
a610: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
a620: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6e  }..          fin
a630: 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
a640: 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
a650: 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
a660: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a670: 20 20 20 20 20 20 73 74 6d 74 20 3d 20 49 6e 74        stmt = Int
a680: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
a690: 20 20 20 20 20 20 20 70 74 72 20 3d 20 49 6e 74         ptr = Int
a6a0: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 23 69 66  Ptr.Zero;....#if
a6b0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
a6c0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  D..            l
a6d0: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  en = 0;..       
a6e0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
a6f0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
a700: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74  ite3_prepare_int
a710: 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c  erop(_sql, psql,
a720: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72   b.Length - 1, r
a730: 65 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72  ef stmt, ref ptr
a740: 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c  , ref len);..#el
a750: 73 65 0d 0a 23 69 66 20 55 53 45 5f 50 52 45 50  se..#if USE_PREP
a760: 41 52 45 5f 56 32 0d 0a 20 20 20 20 20 20 20 20  ARE_V2..        
a770: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
a780: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a790: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 5f  te3_prepare_v2(_
a7a0: 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e  sql, psql, b.Len
a7b0: 67 74 68 20 2d 20 31 2c 20 72 65 66 20 73 74 6d  gth - 1, ref stm
a7c0: 74 2c 20 72 65 66 20 70 74 72 29 3b 0d 0a 23 65  t, ref ptr);..#e
a7d0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
a7e0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
a7f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a800: 5f 70 72 65 70 61 72 65 28 5f 73 71 6c 2c 20 70  _prepare(_sql, p
a810: 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  sql, b.Length - 
a820: 31 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65 66  1, ref stmt, ref
a830: 20 70 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   ptr);..#endif..
a840: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20              len 
a850: 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  = -1;..#endif...
a860: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
a870: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 53 54  T_20 && TRACE_ST
a880: 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20 20 20 20  ATEMENT..       
a890: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
a8a0: 4c 69 6e 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Line(UnsafeNativ
a8b0: 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  eMethods.StringF
a8c0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
a8d0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
a8e0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
a8f0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
a900: 20 20 20 20 20 22 50 72 65 70 61 72 65 20 28 7b       "Prepare ({
a910: 30 7d 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74  0}): {1}", n, st
a920: 6d 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  mt));..#endif...
a930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
a940: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
a950: 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73  orCode.Ok) && (s
a960: 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  tmt != IntPtr.Ze
a970: 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ro))..          
a980: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a990: 20 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74     if (statement
a9a0: 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20  Handle != null) 
a9b0: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2e  statementHandle.
a9c0: 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
a9d0: 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
a9e0: 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20  entHandle = new 
a9f0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
aa00: 61 6e 64 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74  andle(_sql, stmt
aa10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
aa20: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
aa30: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
aa40: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
aa50: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
aa60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aa70: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
aa80: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
aa90: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
aaa0: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
aac0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  teConnectionEven
aad0: 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61  tType.NewCritica
aae0: 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e  lHandle, null, n
aaf0: 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
ab00: 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20      null, null, 
ab10: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c  statementHandle,
ab20: 20 73 74 72 53 71 6c 2c 20 6e 65 77 20 6f 62 6a   strSql, new obj
ab30: 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ect[] {..       
ab40: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51         typeof(SQ
ab50: 4c 69 74 65 33 29 2c 20 63 6e 6e 2c 20 73 74 72  Lite3), cnn, str
ab60: 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74  Sql, previous, t
ab70: 69 6d 65 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a 20  imeoutMS }));.. 
ab80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ab90: 20 20 20 20 20 20 20 20 69 66 20 28 53 68 6f 75          if (Shou
aba0: 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c  ldThrowForCancel
abb0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ())..          {
abc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
abd0: 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65  if ((n == SQLite
abe0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c  ErrorCode.Ok) ||
abf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac00: 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65      (n == SQLite
ac10: 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c  ErrorCode.Row) |
ac20: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
ac30: 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74       (n == SQLit
ac40: 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29  eErrorCode.Done)
ac50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ac60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ac70: 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69 74 65        n = SQLite
ac80: 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72  ErrorCode.Interr
ac90: 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  upt;..          
aca0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
acb0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
acc0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
acd0: 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  (n, null);..    
ace0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
acf0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
ad00: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e  LiteErrorCode.In
ad10: 74 65 72 72 75 70 74 29 0d 0a 20 20 20 20 20 20  terrupt)..      
ad20: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
ad30: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
ad40: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
ad50: 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20  rCode.Schema).. 
ad60: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72 69             retri
ad70: 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  es++;..         
ad80: 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
ad90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
ada0: 72 72 6f 72 29 0d 0a 20 20 20 20 20 20 20 20 20  rror)..         
adb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
adc0: 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61  if (String.Compa
add0: 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28  re(GetLastError(
ade0: 29 2c 20 22 6e 65 61 72 20 5c 22 54 59 50 45 53  ), "near \"TYPES
adf0: 5c 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72  \": syntax error
ae00: 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  ", StringCompari
ae10: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
ae20: 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20  eCase) == 0)..  
ae30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ae40: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 70             int p
ae50: 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49 6e 64 65  os = strSql.Inde
ae60: 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20 20 20 20  xOf(';');..     
ae70: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6f 73           if (pos
ae80: 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d 20 73 74   == -1) pos = st
ae90: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 31 3b  rSql.Length - 1;
aea0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
aeb0: 20 20 74 79 70 65 64 65 66 73 20 3d 20 73 74 72    typedefs = str
aec0: 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c  Sql.Substring(0,
aed0: 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20 20 20 20   pos + 1);..    
aee0: 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c            strSql
aef0: 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72   = strSql.Substr
af00: 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d  ing(pos + 1);...
af10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
af20: 74 72 52 65 6d 61 69 6e 20 3d 20 53 74 72 69 6e  trRemain = Strin
af30: 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20  g.Empty;....    
af40: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
af50: 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20  (cmd == null && 
af60: 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20  strSql.Length > 
af70: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
af80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
af90: 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61       cmd = Prepa
afa0: 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20  re(cnn, strSql, 
afb0: 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75  previous, timeou
afc0: 74 4d 53 2c 20 72 65 66 20 73 74 72 52 65 6d 61  tMS, ref strRema
afd0: 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
afe0: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
aff0: 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20  trRemain;..     
b000: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
b010: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b020: 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  cmd != null)..  
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
b040: 64 2e 53 65 74 54 79 70 65 73 28 74 79 70 65 64  d.SetTypes(typed
b050: 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  efs);....       
b060: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d         return cm
b070: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
b080: 7d 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35 20 7c  }..#if (NET_35 |
b090: 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f  | NET_40 || NET_
b0a0: 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 20 7c 7c  45 || NET_451 ||
b0b0: 20 4e 45 54 5f 34 35 32 20 7c 7c 20 4e 45 54 5f   NET_452 || NET_
b0c0: 34 36 20 7c 7c 20 4e 45 54 5f 34 36 31 29 20 26  46 || NET_461) &
b0d0: 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  & !PLATFORM_COMP
b0e0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
b0f0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
b100: 66 20 28 5f 62 75 69 6c 64 69 6e 67 53 63 68 65  f (_buildingSche
b110: 6d 61 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53  ma == false && S
b120: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65  tring.Compare(Ge
b130: 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20 30 2c  tLastError(), 0,
b140: 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a   "no such table:
b150: 20 54 45 4d 50 2e 53 43 48 45 4d 41 22 2c 20 30   TEMP.SCHEMA", 0
b160: 2c 20 32 36 2c 20 53 74 72 69 6e 67 43 6f 6d 70  , 26, StringComp
b170: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
b180: 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d  noreCase) == 0).
b190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
b1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
b1b0: 72 52 65 6d 61 69 6e 20 3d 20 53 74 72 69 6e 67  rRemain = String
b1c0: 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 20  .Empty;..       
b1d0: 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67         _building
b1e0: 53 63 68 65 6d 61 20 3d 20 74 72 75 65 3b 0d 0a  Schema = true;..
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
b200: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
b210: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b220: 20 20 20 20 49 53 51 4c 69 74 65 53 63 68 65 6d      ISQLiteSchem
b230: 61 45 78 74 65 6e 73 69 6f 6e 73 20 65 78 74 20  aExtensions ext 
b240: 3d 20 28 28 49 53 65 72 76 69 63 65 50 72 6f 76  = ((IServiceProv
b250: 69 64 65 72 29 53 51 4c 69 74 65 46 61 63 74 6f  ider)SQLiteFacto
b260: 72 79 2e 49 6e 73 74 61 6e 63 65 29 2e 47 65 74  ry.Instance).Get
b270: 53 65 72 76 69 63 65 28 74 79 70 65 6f 66 28 49  Service(typeof(I
b280: 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65  SQLiteSchemaExte
b290: 6e 73 69 6f 6e 73 29 29 20 61 73 20 49 53 51 4c  nsions)) as ISQL
b2a0: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
b2b0: 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ons;....        
b2c0: 20 20 20 20 20 20 20 20 69 66 20 28 65 78 74 20          if (ext 
b2d0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
b2e0: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 74 2e              ext.
b2f0: 42 75 69 6c 64 54 65 6d 70 53 63 68 65 6d 61 28  BuildTempSchema(
b300: 63 6e 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  cnn);....       
b310: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
b320: 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73  cmd == null && s
b330: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30  trSql.Length > 0
b340: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b350: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b360: 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72          cmd = Pr
b370: 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71  epare(cnn, strSq
b380: 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d  l, previous, tim
b390: 65 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72 52  eoutMS, ref strR
b3a0: 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20  emain);..       
b3b0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71             strSq
b3c0: 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a  l = strRemain;..
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b3f0: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b       return cmd;
b400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b410: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
b420: 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
b430: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b440: 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69 6c             _buil
b450: 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 66 61 6c  dingSchema = fal
b460: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
b470: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b480: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
b490: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b4a0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
b4b0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b4c0: 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d  e.Locked || n ==
b4d0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
b4e0: 2e 42 75 73 79 29 20 2f 2f 20 4c 6f 63 6b 65 64  .Busy) // Locked
b4f0: 20 2d 2d 20 64 65 6c 61 79 20 61 20 73 6d 61 6c   -- delay a smal
b500: 6c 20 61 6d 6f 75 6e 74 20 62 65 66 6f 72 65 20  l amount before 
b510: 72 65 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20  retrying..      
b520: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b530: 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e     // Keep tryin
b540: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  g..            i
b550: 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20  f (rnd == null) 
b560: 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77 65  // First time we
b570: 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  've encountered 
b580: 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20  the lock..      
b590: 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65          rnd = ne
b5a0: 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20  w Random();.... 
b5b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66             // If
b5c0: 20 77 65 27 76 65 20 65 78 63 65 65 64 65 64 20   we've exceeded 
b5d0: 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69  the command's ti
b5e0: 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61  meout, give up a
b5f0: 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f  nd throw an erro
b600: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  r..            i
b610: 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e  f ((uint)Environ
b620: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d  ment.TickCount -
b630: 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d   starttick > tim
b640: 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 20 20 20  eoutMS)..       
b650: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b660: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b670: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
b680: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
b690: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
b6a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
b6b0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
b6c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b6d0: 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20     // Otherwise 
b6e0: 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64  sleep for a rand
b6f0: 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  om amount of tim
b700: 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20  e up to 150ms.. 
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
b720: 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68  tem.Threading.Th
b730: 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e  read.Sleep(rnd.N
b740: 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20  ext(1, 150));.. 
b750: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b760: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b770: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b780: 69 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46  if (ShouldThrowF
b790: 6f 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20  orCancel())..   
b7a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b7b0: 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51      if ((n == SQ
b7c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
b7d0: 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
b7e0: 20 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69        (n == SQLi
b7f0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29  teErrorCode.Row)
b800: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
b810: 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74       (n == SQLit
b820: 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29  eErrorCode.Done)
b830: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b850: 20 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f    n = SQLiteErro
b860: 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 3b  rCode.Interrupt;
b870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b880: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
b890: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
b8a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c  xception(n, null
b8b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
b8c0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d  .        if (n =
b8d0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b8e0: 65 2e 49 6e 74 65 72 72 75 70 74 29 20 72 65 74  e.Interrupt) ret
b8f0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
b900: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
b910: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
b920: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
b930: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
b940: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
b950: 0a 20 20 20 20 20 20 20 20 73 74 72 52 65 6d 61  .        strRema
b960: 69 6e 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  in = UTF8ToStrin
b970: 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a  g(ptr, len);....
b980: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 74          if (stat
b990: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e  ementHandle != n
b9a0: 75 6c 6c 29 20 63 6d 64 20 3d 20 6e 65 77 20 53  ull) cmd = new S
b9b0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28 74  QLiteStatement(t
b9c0: 68 69 73 2c 20 66 6c 61 67 73 2c 20 73 74 61 74  his, flags, stat
b9d0: 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74 72  ementHandle, str
b9e0: 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30 2c  Sql.Substring(0,
b9f0: 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d   strSql.Length -
ba00: 20 73 74 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74   strRemain.Lengt
ba10: 68 29 2c 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a  h), previous);..
ba20: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
ba30: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   cmd;..      }..
ba40: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
ba50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ba60: 68 61 6e 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a  handle.Free();..
ba70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
ba80: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
ba90: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
baa0: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
bab0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
bac0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
bad0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
bae0: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
baf0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
bb00: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
bb10: 4c 6f 67 4d 65 73 73 61 67 65 28 55 6e 73 61 66  LogMessage(Unsaf
bb20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53  eNativeMethods.S
bb30: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
bb40: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
bb50: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
bb60: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
bb70: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
bb80: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
bb90: 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e  er #{1} as NULL.
bba0: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
bbb0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
bbc0: 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d  index));..    }.
bbd0: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
bbe0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
bbf0: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
bc00: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
bc10: 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61  e, int index, Va
bc20: 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a  lueType value)..
bc30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
bc40: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
bc50: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
bc60: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
bc70: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 55 6e 73  g.LogMessage(Uns
bc80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
bc90: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
bcb0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
bcc0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
bcd0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
bce0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
bcf0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
bd00: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
bd10: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
bd20: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
bd30: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
bd40: 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 2c  value.GetType(),
bd50: 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d   value));..    }
bd60: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
bd70: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f  static string Fo
bd80: 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44 61 74  rmatDateTime(Dat
bd90: 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20  eTime value)..  
bda0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74 72    {..        Str
bdb0: 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c  ingBuilder resul
bdc0: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  t = new StringBu
bdd0: 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  ilder();....    
bde0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
bdf0: 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67  d(value.ToString
be00: 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a  ("yyyy-MM-ddTHH:
be10: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 29  mm:ss.FFFFFFFK")
be20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
be30: 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d  lt.Append(' ');.
be40: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
be50: 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b 69 6e  Append(value.Kin
be60: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  d);..        res
be70: 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b  ult.Append(' ');
be80: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
be90: 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 69  .Append(value.Ti
bea0: 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  cks);....       
beb0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
bec0: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
bed0: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
bee0: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
bef0: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
bf00: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
bf10: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
bf20: 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d  DateTime value).
bf30: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
bf40: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
bf50: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
bf60: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
bf70: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 55 6e  og.LogMessage(Un
bf80: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
bf90: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
bfa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c  .            Cul
bfb0: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
bfc0: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
bfd0: 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73        "Binding s
bfe0: 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72  tatement {0} par
bff0: 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79  amter #{1} as ty
c000: 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75  pe {2} with valu
c010: 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a  e {{{3}}}...",..
c020: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
c030: 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c  leIntPtr, index,
c040: 20 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65   typeof(DateTime
c050: 29 2c 20 46 6f 72 6d 61 74 44 61 74 65 54 69 6d  ), FormatDateTim
c060: 65 28 76 61 6c 75 65 29 29 29 3b 0d 0a 20 20 20  e(value)));..   
c070: 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63   }....    protec
c080: 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20  ted static void 
c090: 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74  LogBind(SQLiteSt
c0a0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
c0b0: 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c  ndle, int index,
c0c0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
c0d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
c0e0: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
c0f0: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
c100: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
c110: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 55 6e 73  g.LogMessage(Uns
c120: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
c130: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
c140: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
c150: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
c160: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
c170: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
c180: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
c190: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
c1a0: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
c1b0: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
c1c0: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
c1d0: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
c1e0: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20  typeof(String), 
c1f0: 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20  (value != null) 
c200: 3f 20 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c  ? value : "<null
c210: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
c220: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
c230: 69 63 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61  ic string ToHexa
c240: 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a  decimalString(..
c250: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61          byte[] a
c260: 72 72 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d  rray..        ).
c270: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
c280: 69 66 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c  if (array == nul
c290: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
c2a0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
c2b0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
c2c0: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
c2d0: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
c2e0: 28 61 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20  (array.Length * 
c2f0: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  2);....        i
c300: 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61  nt length = arra
c310: 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  y.Length;....   
c320: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
c330: 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
c340: 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b   length; index++
c350: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
c360: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72  esult.Append(arr
c370: 61 79 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69  ay[index].ToStri
c380: 6e 67 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20  ng("x2"));....  
c390: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
c3a0: 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  ult.ToString();.
c3b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
c3c0: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
c3d0: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
c3e0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
c3f0: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
c400: 64 65 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  dex, byte[] valu
c410: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
c420: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
c430: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
c440: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
c450: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
c460: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
c470: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
c480: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
c490: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
c4a0: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
c4b0: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
c4c0: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
c4d0: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
c4e0: 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76   type {2} with v
c4f0: 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22  alue {{{3}}}..."
c500: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
c510: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
c520: 65 78 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b  ex, typeof(Byte[
c530: 5d 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75  ]), (value != nu
c540: 6c 6c 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69  ll) ? ToHexadeci
c550: 6d 61 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29  malString(value)
c560: 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a   : "<null>"));..
c570: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
c580: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
c590: 6f 69 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28  oid Bind_Double(
c5a0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
c5b0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
c5c0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
c5d0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f  s, int index, do
c5e0: 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  uble value)..   
c5f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
c600: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
c610: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
c620: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
c630: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
c640: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
c650: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
c660: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
c670: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
c680: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
c690: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
c6a0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
c6b0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
c6c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20         }....#if 
c6d0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
c6e0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
c6f0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
c700: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
c710: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
c720: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28  te3_bind_double(
c730: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
c740: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
c750: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
c760: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
c770: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
c780: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
c790: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69  tError());..#eli
c7a0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
c7b0: 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RD..        SQLi
c7c0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
c7d0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c7e0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
c7f0: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
c800: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
c810: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ef value);..    
c820: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
c830: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
c840: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
c850: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
c860: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
c870: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
c880: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
c890: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
c8a0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
c8b0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
c8c0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
c8d0: 20 42 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69   Bind_Int32(SQLi
c8e0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
c8f0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
c900: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
c910: 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61  nt index, int va
c920: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
c930: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
c940: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
c950: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
c960: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
c970: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
c980: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
c990: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
c9a0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
c9b0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
c9c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
c9d0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
c9e0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
c9f0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
ca00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
ca10: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
ca20: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ca30: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
ca40: 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e  d_int(handle, in
ca50: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
ca60: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
ca70: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
ca80: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
ca90: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
caa0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
cab0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
cac0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
cad0: 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 33   void Bind_UInt3
cae0: 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  2(SQLiteStatemen
caf0: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
cb00: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
cb10: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
cb20: 75 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20  uint value)..   
cb30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
cb40: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
cb50: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
cb60: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
cb70: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
cb80: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
cb90: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
cba0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
cbb0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
cbc0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
cbd0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
cbe0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
cbf0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
cc00: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
cc10: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
cc20: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
cc30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
cc40: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
cc50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
cc60: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
cc70: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e  nectionFlags.Bin
cc80: 64 55 49 6e 74 33 32 41 73 49 6e 74 36 34 29 20  dUInt32AsInt64) 
cc90: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
cca0: 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e  ionFlags.BindUIn
ccb0: 74 33 32 41 73 49 6e 74 36 34 29 0d 0a 20 20 20  t32AsInt64)..   
ccc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ccd0: 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 32 20      long value2 
cce0: 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20  = value;....#if 
ccf0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
cd00: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
cd10: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
cd20: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
cd30: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
cd40: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
cd50: 2c 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 69  , value2);..#eli
cd60: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
cd70: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
cd80: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
cd90: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
cda0: 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72  bind_int64_inter
cdb0: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
cdc0: 2c 20 72 65 66 20 76 61 6c 75 65 32 29 3b 0d 0a  , ref value2);..
cdd0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
cde0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
cdf0: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
ce00: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
ce10: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
ce20: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
ce30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ce40: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
ce50: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ce60: 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c  _bind_uint(handl
ce70: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
ce80: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
ce90: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
cea0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
ceb0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
cec0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
ced0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
cee0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
cef0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
cf00: 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36 34   void Bind_Int64
cf10: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
cf20: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
cf30: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
cf40: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c  gs, int index, l
cf50: 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ong value)..    
cf60: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
cf70: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
cf80: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
cf90: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
cfa0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
cfb0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
cfc0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
cfd0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
cfe0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
cff0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
d000: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
d010: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
d020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
d030: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
d040: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
d050: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d060: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
d070: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
d080: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d090: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61  e3_bind_int64(ha
d0a0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
d0b0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ue);..        if
d0c0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
d0d0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
d0e0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
d0f0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
d100: 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69 66 20  rror());..#elif 
d110: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
d120: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d130: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
d140: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d150: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
d160: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
d170: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
d180: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
d190: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
d1a0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
d1b0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
d1c0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
d1d0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c  stError());..#el
d1e0: 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  se..        thro
d1f0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
d200: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
d210: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
d220: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d230: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
d240: 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65  nd_UInt64(SQLite
d250: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
d260: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d270: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
d280: 20 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20 76 61   index, ulong va
d290: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
d2a0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
d2b0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
d2c0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
d2d0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50  _stmt;....#if !P
d2e0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
d2f0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
d300: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
d310: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
d320: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
d330: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d340: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
d350: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d360: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
d370: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
d380: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
d390: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
d3a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
d3b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d3c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
d3d0: 64 5f 75 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  d_uint64(handle,
d3e0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
d3f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
d400: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
d410: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
d420: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
d430: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
d440: 29 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ));..#elif !SQLI
d450: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
d460: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
d470: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
d480: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d490: 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34  ite3_bind_uint64
d4a0: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
d4b0: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
d4c0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
d4d0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
d4e0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
d4f0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
d500: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
d510: 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ror());..#else..
d520: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
d530: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
d540: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
d550: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
d560: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
d570: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 54  ride void Bind_T
d580: 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ext(SQLiteStatem
d590: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
d5a0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
d5b0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
d5c0: 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d  , string value).
d5d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
d5e0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
d5f0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
d600: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
d610: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
d620: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
d630: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ORK..        if 
d640: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
d650: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
d660: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
d670: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
d680: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
d690: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d6a0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
d6b0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
d6c0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
d6d0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
d6e0: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
d6f0: 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 23 69 66  8(value);....#if
d700: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
d710: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
d720: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
d730: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
d740: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
d750: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
d760: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
d770: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
d780: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
d790: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
d7a0: 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  , b);..        }
d7b0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
d7c0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
d7d0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
d7e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d7f0: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61  te3_bind_text(ha
d800: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20  ndle, index, b, 
d810: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
d820: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
d830: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
d840: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
d850: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
d860: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
d870: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
d880: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
d890: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
d8a0: 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65 54   void Bind_DateT
d8b0: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
d8c0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
d8d0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
d8e0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
d8f0: 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d 0a  , DateTime dt)..
d900: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
d910: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
d920: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
d930: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
d940: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
d950: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
d960: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
d970: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
d980: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
d990: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
d9a0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
d9b0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
d9c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d9d0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
d9e0: 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20  , index, dt);.. 
d9f0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
da00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
da10: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
da20: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42  onnectionFlags.B
da30: 69 6e 64 44 61 74 65 54 69 6d 65 57 69 74 68 4b  indDateTimeWithK
da40: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
da50: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69  nnectionFlags.Bi
da60: 6e 64 44 61 74 65 54 69 6d 65 57 69 74 68 4b 69  ndDateTimeWithKi
da70: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
da80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
da90: 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 21  (_datetimeKind !
daa0: 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55  = DateTimeKind.U
dab0: 6e 73 70 65 63 69 66 69 65 64 29 20 26 26 0d 0a  nspecified) &&..
dac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dad0: 28 64 74 2e 4b 69 6e 64 20 21 3d 20 44 61 74 65  (dt.Kind != Date
dae0: 54 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69  TimeKind.Unspeci
daf0: 66 69 65 64 29 20 26 26 0d 0a 20 20 20 20 20 20  fied) &&..      
db00: 20 20 20 20 20 20 20 20 20 20 28 64 74 2e 4b 69            (dt.Ki
db10: 6e 64 20 21 3d 20 5f 64 61 74 65 74 69 6d 65 4b  nd != _datetimeK
db20: 69 6e 64 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ind))..         
db30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
db40: 20 20 20 20 20 20 69 66 20 28 5f 64 61 74 65 74        if (_datet
db50: 69 6d 65 4b 69 6e 64 20 3d 3d 20 44 61 74 65 54  imeKind == DateT
db60: 69 6d 65 4b 69 6e 64 2e 55 74 63 29 0d 0a 20 20  imeKind.Utc)..  
db70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db80: 20 20 64 74 20 3d 20 64 74 2e 54 6f 55 6e 69 76    dt = dt.ToUniv
db90: 65 72 73 61 6c 54 69 6d 65 28 29 3b 0d 0a 20 20  ersalTime();..  
dba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
dbb0: 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65  se if (_datetime
dbc0: 4b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d 65  Kind == DateTime
dbd0: 4b 69 6e 64 2e 4c 6f 63 61 6c 29 0d 0a 20 20 20  Kind.Local)..   
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbf0: 20 64 74 20 3d 20 64 74 2e 54 6f 4c 6f 63 61 6c   dt = dt.ToLocal
dc00: 54 69 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  Time();..       
dc10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
dc20: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69  }....        swi
dc30: 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f  tch (_datetimeFo
dc40: 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  rmat)..        {
dc50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
dc60: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
dc70: 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20  mats.Ticks:..   
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
dc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dca0: 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d      long value =
dcb0: 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 23 69   dt.Ticks;....#i
dcc0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
dcd0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcf0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
dd00: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
dd10: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
dd20: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
dd30: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
dd40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dd50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd70: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
dd80: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dda0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
ddc0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
ddd0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
dde0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
ddf0: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
de00: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de20: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
de30: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
de40: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
de50: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
de60: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de80: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 69      break;..#eli
de90: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
dea0: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
deb0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
dec0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
ded0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
dee0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
def0: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
df00: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
df10: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
df20: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
df30: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
df40: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
df50: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
df60: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
df70: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
df80: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
df90: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
dfb0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
dfc0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
dfd0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
dff0: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
e000: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
e010: 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20  s.JulianDay:..  
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
e030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e040: 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
e050: 65 20 3d 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28  e = ToJulianDay(
e060: 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  dt);....#if !PLA
e070: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
e080: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
e090: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e0a0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
e0b0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
e0c0: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
e0d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e0e0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
e100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e110: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
e120: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
e130: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
e150: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e160: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
e170: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
e180: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
e190: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
e1a0: 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  le(handle, index
e1b0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
e1d0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
e1e0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
e1f0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
e200: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
e210: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
e220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
e230: 72 65 61 6b 3b 0d 0a 23 65 6c 69 66 20 21 53 51  reak;..#elif !SQ
e240: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e260: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
e270: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
e280: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
e290: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69  e3_bind_double_i
e2a0: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
e2b0: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
e2c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e2d0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
e2e0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
e2f0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
e300: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
e310: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
e320: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e330: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23         break;..#
e340: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
e350: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
e360: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
e370: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
e380: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
e390: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e3a0: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
e3b0: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e  teDateFormats.Un
e3c0: 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20  ixEpoch:..      
e3d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3f0: 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 43 6f   long value = Co
e400: 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34 28 64 74  nvert.ToInt64(dt
e410: 2e 53 75 62 74 72 61 63 74 28 55 6e 69 78 45 70  .Subtract(UnixEp
e420: 6f 63 68 29 2e 54 6f 74 61 6c 53 65 63 6f 6e 64  och).TotalSecond
e430: 73 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  s);....#if !PLAT
e440: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
e450: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
e460: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
e470: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
e480: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
e490: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
e4a0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
e4b0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
e4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e4e0: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
e4f0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
e500: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
e510: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
e520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e530: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
e540: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
e550: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e560: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
e570: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
e580: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
e590: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e5a0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
e5b0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
e5c0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e5d0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
e5e0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
e5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
e600: 61 6b 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ak;..#elif !SQLI
e610: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
e620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e630: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e640: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
e650: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
e660: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
e670: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
e680: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
e690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6a0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
e6b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
e6c0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
e6d0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
e6e0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e700: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 73      break;..#els
e710: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
e720: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
e730: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
e740: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
e750: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
e760: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e770: 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20      default:..  
e780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
e790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e7a0: 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20       byte[] b = 
e7b0: 54 6f 55 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 23  ToUTF8(dt);....#
e7c0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
e7d0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7f0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
e800: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e810: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
e820: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
e830: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
e840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e870: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
e880: 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20   index, b);..   
e890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8a0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
e8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8c0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
e8d0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
e8e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
e8f0: 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61 6e 64  3_bind_text(hand
e900: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e  le, index, b, b.
e910: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74  Length - 1, (Int
e920: 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
e930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e940: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
e950: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
e960: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
e970: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
e980: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9a0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
e9b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e9c0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
e9d0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
e9e0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 42  ride void Bind_B
e9f0: 6c 6f 62 28 53 51 4c 69 74 65 53 74 61 74 65 6d  lob(SQLiteStatem
ea00: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
ea10: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
ea20: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
ea30: 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74  , byte[] blobDat
ea40: 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  a)..    {..     
ea50: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
ea60: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
ea70: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
ea80: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
ea90: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
eaa0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
eab0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
eac0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
ead0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
eae0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
eaf0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
eb00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
eb10: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
eb20: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f  ndle, index, blo
eb30: 62 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20  bData);..       
eb40: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
eb50: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
eb60: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
eb70: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
eb80: 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28  lite3_bind_blob(
eb90: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
eba0: 6c 6f 62 44 61 74 61 2c 20 62 6c 6f 62 44 61 74  lobData, blobDat
ebb0: 61 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74  a.Length, (IntPt
ebc0: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r)(-1));..      
ebd0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
ebe0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
ebf0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
ec00: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
ec10: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
ec20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
ec30: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
ec40: 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69  d Bind_Null(SQLi
ec50: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
ec60: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
ec70: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
ec80: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
ec90: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
eca0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
ecb0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
ecc0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
ecd0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
ece0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
ecf0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
ed00: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
ed10: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
ed20: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
ed30: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
ed40: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
ed50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
ed60: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
ed70: 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ex);..        }.
ed80: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
ed90: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
eda0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
edb0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
edc0: 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e  e3_bind_null(han
edd0: 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  dle, index);..  
ede0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
edf0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
ee00: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
ee10: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
ee20: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
ee30: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
ee40: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
ee50: 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43   int Bind_ParamC
ee60: 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65  ount(SQLiteState
ee70: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
ee80: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
ee90: 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a   flags)..    {..
eea0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
eeb0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
eec0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
eed0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
eee0: 20 20 20 69 6e 74 20 76 61 6c 75 65 20 3d 20 55     int value = U
eef0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ef00: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
ef10: 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28  parameter_count(
ef20: 68 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20  handle);....    
ef30: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
ef40: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
ef50: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
ef60: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
ef70: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
ef80: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
ef90: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
efa0: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
efb0: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
efc0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
efd0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 55 6e 73 61  .LogMessage(Unsa
efe0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
eff0: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
f010: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
f020: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
f030: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
f040: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
f050: 74 65 72 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d  ter count is {1}
f060: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
f070: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
f080: 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20  r, value));..   
f090: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f0a0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
f0b0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
f0c0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
f0d0: 73 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61  string Bind_Para
f0e0: 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  mName(SQLiteStat
f0f0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
f100: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
f110: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
f120: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
f130: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
f140: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
f150: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
f160: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 73  stmt;..        s
f170: 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23  tring name;....#
f180: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
f190: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ARD..        int
f1a0: 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
f1b0: 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f     name = UTF8To
f1c0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
f1d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f1e0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
f1f0: 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 68  r_name_interop(h
f200: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
f210: 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  f len), len);..#
f220: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6e 61  else..        na
f230: 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  me = UTF8ToStrin
f240: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
f250: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
f260: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
f270: 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  e(handle, index)
f280: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
f290: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
f2a0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
f2b0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
f2c0: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
f2d0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
f2e0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
f2f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f300: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
f310: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
f320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
f330: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
f340: 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
f350: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
f360: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
f370: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
f380: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
f390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f3a0: 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d    "Statement {0}
f3b0: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 6e   paramter #{1} n
f3c0: 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22  ame is {{{2}}}."
f3d0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f3e0: 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
f3f0: 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29 29 3b 0d   index, name));.
f400: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
f410: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61 6d        return nam
f420: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
f430: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
f440: 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61  de int Bind_Para
f450: 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  mIndex(SQLiteSta
f460: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
f470: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
f480: 67 73 20 66 6c 61 67 73 2c 20 73 74 72 69 6e 67  gs flags, string
f490: 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20 20   paramName)..   
f4a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
f4b0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
f4c0: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
f4d0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20  _sqlite_stmt;.. 
f4e0: 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
f4f0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
f500: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
f510: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
f520: 64 65 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55 54  dex(handle, ToUT
f530: 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b 0d  F8(paramName));.
f540: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
f550: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
f560: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
f570: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
f580: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
f590: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
f5a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f5b0: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
f5c0: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
f5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
f5e0: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
f5f0: 67 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ge(UnsafeNativeM
f600: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
f610: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
f620: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
f630: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
f640: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f650: 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30     "Statement {0
f660: 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65 78  } paramter index
f670: 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d   of name {{{1}}}
f680: 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20   is #{2}.",..   
f690: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
f6a0: 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61 6d  dleIntPtr, param
f6b0: 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  Name, index));..
f6c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
f6d0: 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e 64 65       return inde
f6e0: 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  x;..    }....   
f6f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
f700: 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75  de int ColumnCou
f710: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
f720: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
f730: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
f740: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f750: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
f760: 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c  _count(stmt._sql
f770: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20  ite_stmt);..    
f780: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
f790: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
f7a0: 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c  g ColumnName(SQL
f7b0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
f7c0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
f7d0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
f7e0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
f7f0: 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
f800: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
f810: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f820: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
f830: 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  umn_name_interop
f840: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
f850: 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c  mt, index, ref l
f860: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
f870: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
f880: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f890: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
f8a0: 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
f8b0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
f8c0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
f8d0: 69 66 20 28 70 20 3d 3d 20 49 6e 74 50 74 72 2e  if (p == IntPtr.
f8e0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 74  Zero)..        t
f8f0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
f900: 78 63 65 70 74 69 6f 6e 28 53 51 4c 69 74 65 45  xception(SQLiteE
f910: 72 72 6f 72 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 20  rrorCode.NoMem, 
f920: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
f930: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
f940: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65  ANDARD..      re
f950: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
f960: 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  g(p, len);..#els
f970: 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
f980: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20  UTF8ToString(p, 
f990: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
f9a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f9b0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70  nal override Typ
f9c0: 65 41 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e  eAffinity Column
f9d0: 41 66 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53  Affinity(SQLiteS
f9e0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
f9f0: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
fa00: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
fa10: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
fa20: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
fa30: 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c  n_type(stmt._sql
fa40: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
fa50: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
fa60: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
fa70: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54  e string ColumnT
fa80: 79 70 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ype(SQLiteStatem
fa90: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
faa0: 64 65 78 2c 20 72 65 66 20 54 79 70 65 41 66 66  dex, ref TypeAff
fab0: 69 6e 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29  inity nAffinity)
fac0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
fad0: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21   int len;..#if !
fae0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
faf0: 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 30  .        len = 0
fb00: 3b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ;..        IntPt
fb10: 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
fb20: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
fb30: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
fb40: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
fb50: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
fb60: 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23  ex, ref len);..#
fb70: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6c 65  else..        le
fb80: 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20  n = -1;..       
fb90: 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61   IntPtr p = Unsa
fba0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
fbb0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
fbc0: 65 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73 71  ecltype(stmt._sq
fbd0: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
fbe0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
fbf0: 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20 3d 20      nAffinity = 
fc00: 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
fc10: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a  tmt, index);....
fc20: 20 20 20 20 20 20 20 20 69 66 20 28 28 70 20 21          if ((p !
fc30: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 26  = IntPtr.Zero) &
fc40: 26 20 28 28 6c 65 6e 20 3e 20 30 29 20 7c 7c 20  & ((len > 0) || 
fc50: 28 6c 65 6e 20 3d 3d 20 2d 31 29 29 29 0d 0a 20  (len == -1))).. 
fc60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
fc70: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 63        string dec
fc80: 6c 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74  lType = UTF8ToSt
fc90: 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 0d  ring(p, len);...
fca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
fcb0: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
fcc0: 72 45 6d 70 74 79 28 64 65 63 6c 54 79 70 65 29  rEmpty(declType)
fcd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
fce0: 20 20 20 72 65 74 75 72 6e 20 64 65 63 6c 54 79     return declTy
fcf0: 70 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  pe;..        }..
fd00: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
fd10: 5b 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70  [] ar = stmt.Typ
fd20: 65 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 0d  eDefinitions;...
fd30: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72 20  .        if (ar 
fd40: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
fd50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
fd60: 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61 72 2e   if (index < ar.
fd70: 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69 6e 64  Length && ar[ind
fd80: 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ex] != null)..  
fd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
fda0: 74 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d  turn ar[index];.
fdb0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
fdc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
fdd0: 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20  ing.Empty;..    
fde0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
fdf0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
fe00: 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74  olumnIndex(SQLit
fe10: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
fe20: 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61   string columnNa
fe30: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
fe40: 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e    int x = Column
fe50: 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a  Count(stmt);....
fe60: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
fe70: 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b   = 0; n < x; n++
fe80: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
fe90: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43      if (String.C
fea0: 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d  ompare(columnNam
feb0: 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74  e, ColumnName(st
fec0: 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f  mt, n), StringCo
fed0: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
fee0: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
fef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  )..          ret
ff00: 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d  urn n;..      }.
ff10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31  .      return -1
ff20: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
ff30: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
ff40: 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f  e string ColumnO
ff50: 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69  riginalName(SQLi
ff60: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
ff70: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
ff80: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
ff90: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
ffa0: 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
ffb0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
ffc0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
ffd0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ffe0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
fff0: 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  in_name_interop(
10000 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
10010 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  t, index, ref le
10020 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
10030 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
10040 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
10050 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10060 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
10070 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  rigin_name(stmt.
10080 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
10090 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
100a0 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
100b0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
100c0 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
100d0 44 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c  DatabaseName(SQL
100e0 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
100f0 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
10100 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
10110 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
10120 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
10130 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
10140 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
10150 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10160 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
10170 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72  abase_name_inter
10180 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
10190 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
101a0 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
101b0 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
101c0 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
101d0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
101e0 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
101f0 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28  n_database_name(
10200 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
10210 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  t, index), -1);.
10220 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
10230 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10240 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
10250 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 53  olumnTableName(S
10260 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
10270 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
10280 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
10290 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
102a0 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
102b0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
102c0 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
102d0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
102e0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
102f0 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  able_name_intero
10300 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
10310 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
10320 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
10330 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
10340 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
10350 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10360 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
10370 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74  _table_name(stmt
10380 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
10390 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
103a0 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
103b0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
103c0 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d  ide void ColumnM
103d0 65 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64  etaData(string d
103e0 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20  ataBase, string 
103f0 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f  table, string co
10400 6c 75 6d 6e 2c 20 72 65 66 20 73 74 72 69 6e 67  lumn, ref string
10410 20 64 61 74 61 54 79 70 65 2c 20 72 65 66 20 73   dataType, ref s
10420 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71  tring collateSeq
10430 75 65 6e 63 65 2c 20 72 65 66 20 62 6f 6f 6c 20  uence, ref bool 
10440 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62 6f 6f  notNull, ref boo
10450 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 72 65  l primaryKey, re
10460 66 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65  f bool autoIncre
10470 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ment)..    {..  
10480 20 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54      IntPtr dataT
10490 79 70 65 50 74 72 20 3d 20 49 6e 74 50 74 72 2e  ypePtr = IntPtr.
104a0 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74  Zero;..      Int
104b0 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 20 3d  Ptr collSeqPtr =
104c0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
104d0 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c       int nnotNul
104e0 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e  l = 0;..      in
104f0 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 20  t nprimaryKey = 
10500 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61  0;..      int na
10510 75 74 6f 49 6e 63 20 3d 20 30 3b 0d 0a 20 20 20  utoInc = 0;..   
10520 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
10530 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  de n;..      int
10540 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69   dtLen;..      i
10550 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66  nt csLen;....#if
10560 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
10570 44 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d  D..      dtLen =
10580 20 30 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e   0;..      csLen
10590 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6e 20 3d   = 0;..      n =
105a0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
105b0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
105c0 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
105d0 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  ta_interop(_sql,
105e0 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65   ToUTF8(dataBase
105f0 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29  ), ToUTF8(table)
10600 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
10610 2c 20 72 65 66 20 64 61 74 61 54 79 70 65 50 74  , ref dataTypePt
10620 72 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74  r, ref collSeqPt
10630 72 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c  r, ref nnotNull,
10640 20 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79   ref nprimaryKey
10650 2c 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 2c 20  , ref nautoInc, 
10660 72 65 66 20 64 74 4c 65 6e 2c 20 72 65 66 20 63  ref dtLen, ref c
10670 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  sLen);..#else.. 
10680 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b       dtLen = -1;
10690 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20  ..      csLen = 
106a0 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d  -1;....      n =
106b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
106c0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
106d0 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
106e0 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  ta(_sql, ToUTF8(
106f0 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46  dataBase), ToUTF
10700 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38  8(table), ToUTF8
10710 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61  (column), ref da
10720 74 61 54 79 70 65 50 74 72 2c 20 72 65 66 20 63  taTypePtr, ref c
10730 6f 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e  ollSeqPtr, ref n
10740 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72  notNull, ref npr
10750 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61  imaryKey, ref na
10760 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66  utoInc);..#endif
10770 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
10780 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10790 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
107a0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
107b0 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
107c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74 61  );....      data
107d0 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72  Type = UTF8ToStr
107e0 69 6e 67 28 64 61 74 61 54 79 70 65 50 74 72 2c  ing(dataTypePtr,
107f0 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20 20   dtLen);..      
10800 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 20  collateSequence 
10810 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63  = UTF8ToString(c
10820 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c 65 6e  ollSeqPtr, csLen
10830 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74 4e  );....      notN
10840 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20  ull = (nnotNull 
10850 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 70 72  == 1);..      pr
10860 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70 72 69  imaryKey = (npri
10870 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a  maryKey == 1);..
10880 20 20 20 20 20 20 61 75 74 6f 49 6e 63 72 65 6d        autoIncrem
10890 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63 20  ent = (nautoInc 
108a0 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  == 1);..    }...
108b0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
108c0 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65  erride object Ge
108d0 74 4f 62 6a 65 63 74 28 53 51 4c 69 74 65 53 74  tObject(SQLiteSt
108e0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
108f0 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
10900 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
10910 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  (ColumnAffinity(
10920 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 0d 0a 20  stmt, index)).. 
10930 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10940 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
10950 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a  ffinity.Int64:..
10960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10970 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10980 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
10990 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
109a0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
109b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
109c0 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
109d0 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
109e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10a00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
10a10 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e  tDouble(stmt, in
10a20 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
10a30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10a40 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
10a50 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d 0a 20  ffinity.Text:.. 
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
10a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10a80 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
10a90 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
10aa0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
10ab0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10ac0 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
10ad0 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20  nity.Blob:..    
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b00 20 20 20 6c 6f 6e 67 20 73 69 7a 65 20 3d 20 47     long size = G
10b10 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e  etBytes(stmt, in
10b20 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c  dex, 0, null, 0,
10b30 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   0);....        
10b40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10b50 28 73 69 7a 65 20 3e 20 30 29 20 26 26 20 28 73  (size > 0) && (s
10b60 69 7a 65 20 3c 3d 20 69 6e 74 2e 4d 61 78 56 61  ize <= int.MaxVa
10b70 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lue))..         
10b80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ba0 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74        byte[] byt
10bb0 65 73 20 3d 20 6e 65 77 20 62 79 74 65 5b 28 69  es = new byte[(i
10bc0 6e 74 29 73 69 7a 65 5d 3b 0d 0a 0d 0a 20 20 20  nt)size];....   
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10be0 20 20 20 20 20 47 65 74 42 79 74 65 73 28 73 74       GetBytes(st
10bf0 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 79  mt, index, 0, by
10c00 74 65 73 2c 20 30 2c 20 28 69 6e 74 29 73 69 7a  tes, 0, (int)siz
10c10 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10c30 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 20 20  eturn bytes;..  
10c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
10c60 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
10c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
10c90 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
10ca0 79 2e 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20  y.Null:..       
10cb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cd0 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61  return DBNull.Va
10ce0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
10cf0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10d00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 68   }....        th
10d10 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
10d20 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
10d30 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
10d40 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
10d50 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75  de double GetDou
10d60 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
10d70 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
10d80 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
10d90 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
10da0 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
10db0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
10dc0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10dd0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
10de0 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ble(stmt._sqlite
10df0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
10e00 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
10e10 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 64 6f  ANDARD..      do
10e20 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 30 2e 30  uble value = 0.0
10e30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  ;..      UnsafeN
10e40 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10e50 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
10e60 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  le_interop(stmt.
10e70 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
10e80 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
10e90 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
10ea0 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  alue;..#else..  
10eb0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
10ec0 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
10ed0 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
10ee0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10ef0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10f00 20 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61 6e   bool GetBoolean
10f10 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
10f20 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
10f30 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10f40 72 65 74 75 72 6e 20 54 6f 42 6f 6f 6c 65 61 6e  return ToBoolean
10f50 28 47 65 74 4f 62 6a 65 63 74 28 73 74 6d 74 2c  (GetObject(stmt,
10f60 20 69 6e 64 65 78 29 2c 20 43 75 6c 74 75 72 65   index), Culture
10f70 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
10f80 6c 74 75 72 65 2c 20 66 61 6c 73 65 29 3b 0d 0a  lture, false);..
10f90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
10fa0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
10fb0 62 79 74 65 20 47 65 74 53 42 79 74 65 28 53 51  byte GetSByte(SQ
10fc0 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
10fd0 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
10fe0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
10ff0 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 73  urn unchecked((s
11000 62 79 74 65 29 28 47 65 74 49 6e 74 33 32 28 73  byte)(GetInt32(s
11010 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 62 79  tmt, index) & by
11020 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a  te.MaxValue));..
11030 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11040 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
11050 79 74 65 20 47 65 74 42 79 74 65 28 53 51 4c 69  yte GetByte(SQLi
11060 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
11070 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
11080 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
11090 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 62 79 74  n unchecked((byt
110a0 65 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  e)(GetInt32(stmt
110b0 2c 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e  , index) & byte.
110c0 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20  MaxValue));..   
110d0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
110e0 61 6c 20 6f 76 65 72 72 69 64 65 20 73 68 6f 72  al override shor
110f0 74 20 47 65 74 49 6e 74 31 36 28 53 51 4c 69 74  t GetInt16(SQLit
11100 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
11110 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
11120 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
11130 20 75 6e 63 68 65 63 6b 65 64 28 28 73 68 6f 72   unchecked((shor
11140 74 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  t)(GetInt32(stmt
11150 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f 72  , index) & ushor
11160 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20  t.MaxValue));.. 
11170 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
11180 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 73  rnal override us
11190 68 6f 72 74 20 47 65 74 55 49 6e 74 31 36 28 53  hort GetUInt16(S
111a0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
111b0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
111c0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
111d0 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
111e0 75 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32  ushort)(GetInt32
111f0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
11200 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29  ushort.MaxValue)
11210 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
11220 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11230 64 65 20 69 6e 74 20 47 65 74 49 6e 74 33 32 28  de int GetInt32(
11240 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
11250 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
11260 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
11270 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
11280 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
11290 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d  3_column_int(stm
112a0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
112b0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a  index);..    }..
112c0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
112d0 76 65 72 72 69 64 65 20 75 69 6e 74 20 47 65 74  verride uint Get
112e0 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  UInt32(SQLiteSta
112f0 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
11300 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
11310 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
11320 68 65 63 6b 65 64 28 28 75 69 6e 74 29 47 65 74  hecked((uint)Get
11330 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
11340 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  x));..    }.... 
11350 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
11360 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74  ride long GetInt
11370 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
11380 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
11390 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
113a0 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
113b0 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
113c0 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
113d0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
113e0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
113f0 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  4(stmt._sqlite_s
11400 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
11410 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
11420 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67  DARD..      long
11430 20 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20   value = 0;..   
11440 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
11450 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
11460 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65  olumn_int64_inte
11470 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
11480 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65  _stmt, index, re
11490 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
114a0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
114b0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
114c0 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
114d0 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
114e0 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
114f0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
11500 20 6f 76 65 72 72 69 64 65 20 75 6c 6f 6e 67 20   override ulong 
11510 47 65 74 55 49 6e 74 36 34 28 53 51 4c 69 74 65  GetUInt64(SQLite
11520 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
11530 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
11540 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
11550 75 6e 63 68 65 63 6b 65 64 28 28 75 6c 6f 6e 67  unchecked((ulong
11560 29 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20  )GetInt64(stmt, 
11570 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d  index));..    }.
11580 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11590 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
115a0 47 65 74 54 65 78 74 28 53 51 4c 69 74 65 53 74  GetText(SQLiteSt
115b0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
115c0 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
115d0 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
115e0 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
115f0 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
11600 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
11610 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
11620 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11630 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74  _column_text_int
11640 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
11650 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
11660 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
11670 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
11680 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
11690 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
116a0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
116b0 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73  umn_text(stmt._s
116c0 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
116d0 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  x),..        Uns
116e0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
116f0 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
11700 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69  bytes(stmt._sqli
11710 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  te_stmt, index))
11720 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
11730 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
11740 20 6f 76 65 72 72 69 64 65 20 44 61 74 65 54 69   override DateTi
11750 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 53  me GetDateTime(S
11760 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
11770 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
11780 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
11790 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61   (_datetimeForma
117a0 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46  t == SQLiteDateF
117b0 6f 72 6d 61 74 73 2e 54 69 63 6b 73 29 0d 0a 20  ormats.Ticks).. 
117c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 69         return Ti
117d0 63 6b 73 54 6f 44 61 74 65 54 69 6d 65 28 47 65  cksToDateTime(Ge
117e0 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
117f0 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69  ex), _datetimeKi
11800 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  nd);..      else
11810 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f   if (_datetimeFo
11820 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61  rmat == SQLiteDa
11830 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e  teFormats.Julian
11840 44 61 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65  Day)..        re
11850 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
11860 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20  GetDouble(stmt, 
11870 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d  index), _datetim
11880 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65  eKind);..      e
11890 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d  lse if (_datetim
118a0 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74  eFormat == SQLit
118b0 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69  eDateFormats.Uni
118c0 78 45 70 6f 63 68 29 0d 0a 20 20 20 20 20 20 20  xEpoch)..       
118d0 20 72 65 74 75 72 6e 20 55 6e 69 78 45 70 6f 63   return UnixEpoc
118e0 68 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49  hToDateTime(GetI
118f0 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
11900 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  ), _datetimeKind
11910 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  );....#if !SQLIT
11920 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
11930 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
11940 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
11950 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61  ateTime(UnsafeNa
11960 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11970 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f  te3_column_text_
11980 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
11990 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
119a0 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29  , ref len), len)
119b0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
119c0 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
119d0 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
119e0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
119f0 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f  lumn_text(stmt._
11a00 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
11a10 65 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e  ex),..        Un
11a20 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11a30 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
11a40 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c  _bytes(stmt._sql
11a50 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
11a60 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
11a70 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
11a80 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
11a90 47 65 74 42 79 74 65 73 28 53 51 4c 69 74 65 53  GetBytes(SQLiteS
11aa0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
11ab0 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44  nt index, int nD
11ac0 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b  ataOffset, byte[
11ad0 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74  ] bDest, int nSt
11ae0 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68  art, int nLength
11af0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11b00 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66  int nlen = Unsaf
11b10 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11b20 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
11b30 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tes(stmt._sqlite
11b40 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
11b50 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f  ..      // If no
11b60 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66   destination buf
11b70 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20  fer, return the 
11b80 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20  size needed...  
11b90 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
11ba0 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
11bb0 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74  en;....      int
11bc0 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
11bd0 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
11be0 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
11bf0 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
11c00 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
11c10 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
11c20 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
11c30 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
11c40 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
11c50 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
11c60 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
11c70 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
11c80 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   0)..      {..  
11c90 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
11ca0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
11cb0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
11cc0 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e  olumn_blob(stmt.
11cd0 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
11ce0 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex);....       
11cf0 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49   Marshal.Copy((I
11d00 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74  ntPtr)(ptr.ToInt
11d10 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73  64() + nDataOffs
11d20 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61  et), bDest, nSta
11d30 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20  rt, nCopied);.. 
11d40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
11d50 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  se..      {..   
11d60 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30       nCopied = 0
11d70 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
11d80 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69      return nCopi
11d90 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ed;..    }....  
11da0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11db0 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61 72  ide long GetChar
11dc0 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  s(SQLiteStatemen
11dd0 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
11de0 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  x, int nDataOffs
11df0 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65 73 74  et, char[] bDest
11e00 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
11e10 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
11e20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65  {..      int nle
11e30 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43  n;..      int nC
11e40 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b  opied = nLength;
11e50 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  ....      string
11e60 20 73 74 72 20 3d 20 47 65 74 54 65 78 74 28 73   str = GetText(s
11e70 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
11e80 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c      nlen = str.L
11e90 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
11ea0 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c  if (bDest == nul
11eb0 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d  l) return nlen;.
11ec0 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
11ed0 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20  pied + nStart > 
11ee0 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43  bDest.Length) nC
11ef0 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65  opied = bDest.Le
11f00 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a  ngth - nStart;..
11f10 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
11f20 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20  d + nDataOffset 
11f30 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20  > nlen) nCopied 
11f40 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66  = nlen - nDataOf
11f50 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  fset;....      i
11f60 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d  f (nCopied > 0).
11f70 0a 20 20 20 20 20 20 20 20 73 74 72 2e 43 6f 70  .        str.Cop
11f80 79 54 6f 28 6e 44 61 74 61 4f 66 66 73 65 74 2c  yTo(nDataOffset,
11f90 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20   bDest, nStart, 
11fa0 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20  nCopied);..     
11fb0 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20 3d 20   else nCopied = 
11fc0 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  0;....      retu
11fd0 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20  rn nCopied;..   
11fe0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
11ff0 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
12000 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74   IsNull(SQLiteSt
12010 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
12020 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
12030 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 43  .      return (C
12040 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74  olumnAffinity(st
12050 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20 54 79  mt, index) == Ty
12060 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29  peAffinity.Null)
12070 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
12080 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
12090 65 20 69 6e 74 20 41 67 67 72 65 67 61 74 65 43  e int AggregateC
120a0 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  ount(IntPtr cont
120b0 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ext)..    {..   
120c0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
120d0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
120e0 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
120f0 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d  count(context);.
12100 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
12110 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12120 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
12130 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73  CreateFunction(s
12140 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f  tring strFunctio
12150 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f  n, int nArgs, bo
12160 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20  ol needCollSeq, 
12170 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
12180 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62  unc, SQLiteCallb
12190 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51  ack funcstep, SQ
121a0 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63  LiteFinalCallbac
121b0 6b 20 66 75 6e 63 66 69 6e 61 6c 2c 20 62 6f 6f  k funcfinal, boo
121c0 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20  l canThrow)..   
121d0 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
121e0 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a  ErrorCode n;....
121f0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
12200 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20  DARD..      n = 
12210 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12220 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
12230 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65  te_function_inte
12240 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
12250 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
12260 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e  Args, 4, IntPtr.
12270 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
12280 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c  step, funcfinal,
12290 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d   (needCollSeq ==
122a0 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b   true) ? 1 : 0);
122b0 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
122c0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
122d0 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e  .Ok) n = UnsafeN
122e0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
122f0 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
12300 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71  tion_interop(_sq
12310 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
12320 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31  ction), nArgs, 1
12330 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
12340 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
12350 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43  uncfinal, (needC
12360 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20  ollSeq == true) 
12370 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65  ? 1 : 0);..#else
12380 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
12390 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
123a0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
123b0 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  unction(_sql, To
123c0 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e  UTF8(strFunction
123d0 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74  ), nArgs, 4, Int
123e0 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20  Ptr.Zero, func, 
123f0 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69  funcstep, funcfi
12400 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  nal);..      if 
12410 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
12420 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e  rCode.Ok) n = Un
12430 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12440 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
12450 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  _function(_sql, 
12460 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
12470 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49  on), nArgs, 1, I
12480 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
12490 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
124a0 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d  final);..#endif.
124b0 0a 20 20 20 20 20 20 69 66 20 28 63 61 6e 54 68  .      if (canTh
124c0 72 6f 77 20 26 26 20 28 6e 20 21 3d 20 53 51 4c  row && (n != SQL
124d0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
124e0 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
124f0 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
12500 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
12510 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b  .      return n;
12520 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12530 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12540 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12550 20 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e   CreateCollation
12560 28 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61  (string strColla
12570 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c  tion, SQLiteColl
12580 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69  ation func, SQLi
12590 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63  teCollation func
125a0 31 36 2c 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f  16, bool canThro
125b0 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  w)..    {..     
125c0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
125d0 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
125e0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
125f0 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
12600 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
12610 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c  trCollation), 2,
12620 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
12630 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66  nc16);..      if
12640 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
12650 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
12660 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12670 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
12680 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c  e_collation(_sql
12690 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c  , ToUTF8(strColl
126a0 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74  ation), 1, IntPt
126b0 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a  r.Zero, func);..
126c0 20 20 20 20 20 20 69 66 20 28 63 61 6e 54 68 72        if (canThr
126d0 6f 77 20 26 26 20 28 6e 20 21 3d 20 53 51 4c 69  ow && (n != SQLi
126e0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29  teErrorCode.Ok))
126f0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
12700 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
12710 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
12720 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
12730 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
12740 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12750 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
12760 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
12770 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
12780 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
12790 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20  ext, string s1, 
127a0 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20  string s2)..    
127b0 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
127c0 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62  TANDARD..      b
127d0 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20  yte[] b1;..     
127e0 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20   byte[] b2;..   
127f0 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45     System.Text.E
12800 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65  ncoding converte
12810 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
12820 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d     switch (enc).
12830 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
12840 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
12850 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
12860 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  8:..          co
12870 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
12880 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
12890 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8;..          
128a0 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
128b0 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
128c0 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
128d0 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  LE:..          c
128e0 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
128f0 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
12900 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
12910 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
12920 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
12930 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
12940 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20  TF16BE:..       
12950 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
12960 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
12970 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69  ing.BigEndianUni
12980 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
12990 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
129a0 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63  ....      b1 = c
129b0 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
129c0 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32  s(s1);..      b2
129d0 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
129e0 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20  Bytes(s2);....  
129f0 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
12a00 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12a10 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
12a20 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72  ollcompare_inter
12a30 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20  op(context, b1, 
12a40 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62  b1.Length, b2, b
12a50 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73  2.Length);..#els
12a60 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
12a70 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
12a80 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
12a90 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
12aa0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12ab0 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78  rride int Contex
12ac0 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28  tCollateCompare(
12ad0 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
12ae0 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74  gEnum enc, IntPt
12af0 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b  r context, char[
12b00 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32 29  ] c1, char[] c2)
12b10 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
12b20 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
12b30 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d       byte[] b1;.
12b40 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32  .      byte[] b2
12b50 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  ;..      System.
12b60 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f  Text.Encoding co
12b70 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d  nverter = null;.
12b80 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20  ...      switch 
12b90 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  (enc)..      {..
12ba0 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
12bb0 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
12bc0 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20  um.UTF8:..      
12bd0 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
12be0 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
12bf0 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20  ding.UTF8;..    
12c00 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
12c10 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
12c20 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
12c30 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20  .UTF16LE:..     
12c40 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
12c50 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
12c60 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a  oding.Unicode;..
12c70 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
12c80 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
12c90 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
12ca0 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20  Enum.UTF16BE:.. 
12cb0 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
12cc0 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
12cd0 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64  .Encoding.BigEnd
12ce0 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ianUnicode;..   
12cf0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
12d00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
12d10 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47  b1 = converter.G
12d20 65 74 42 79 74 65 73 28 63 31 29 3b 0d 0a 20 20  etBytes(c1);..  
12d30 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74      b2 = convert
12d40 65 72 2e 47 65 74 42 79 74 65 73 28 63 32 29 3b  er.GetBytes(c2);
12d50 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
12d60 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
12d70 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
12d80 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65  text_collcompare
12d90 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
12da0 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c  , b1, b1.Length,
12db0 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b   b2, b2.Length);
12dc0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
12dd0 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
12de0 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
12df0 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
12e00 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
12e10 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c  al override Coll
12e20 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65  ationSequence Ge
12e30 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e  tCollationSequen
12e40 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ce(SQLiteFunctio
12e50 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63  n func, IntPtr c
12e60 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
12e70 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
12e80 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c  DARD..      Coll
12e90 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65  ationSequence se
12ea0 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f  q = new Collatio
12eb0 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20  nSequence();..  
12ec0 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
12ed0 0d 0a 20 20 20 20 20 20 69 6e 74 20 74 79 70 65  ..      int type
12ee0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74   = 0;..      int
12ef0 20 65 6e 63 20 3d 20 30 3b 0d 0a 20 20 20 20 20   enc = 0;..     
12f00 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61   IntPtr p = Unsa
12f10 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12f20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
12f30 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28  collseq_interop(
12f40 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 74 79 70  context, ref typ
12f50 65 2c 20 72 65 66 20 65 6e 63 2c 20 72 65 66 20  e, ref enc, ref 
12f60 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  len);....      i
12f70 66 20 28 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65  f (p != null) se
12f80 71 2e 4e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53  q.Name = UTF8ToS
12f90 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a  tring(p, len);..
12fa0 20 20 20 20 20 20 73 65 71 2e 54 79 70 65 20 3d        seq.Type =
12fb0 20 28 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45   (CollationTypeE
12fc0 6e 75 6d 29 74 79 70 65 3b 0d 0a 20 20 20 20 20  num)type;..     
12fd0 20 73 65 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e   seq._func = fun
12fe0 63 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 45 6e  c;..      seq.En
12ff0 63 6f 64 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74  coding = (Collat
13000 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29  ionEncodingEnum)
13010 65 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  enc;....      re
13020 74 75 72 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65  turn seq;..#else
13030 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
13040 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
13050 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
13060 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
13070 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13080 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72  ride long GetPar
13090 61 6d 56 61 6c 75 65 42 79 74 65 73 28 49 6e 74  amValueBytes(Int
130a0 50 74 72 20 70 2c 20 69 6e 74 20 6e 44 61 74 61  Ptr p, int nData
130b0 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62  Offset, byte[] b
130c0 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74  Dest, int nStart
130d0 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a  , int nLength)..
130e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
130f0 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61   nlen = UnsafeNa
13100 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13110 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
13120 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20  p);....      // 
13130 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f  If no destinatio
13140 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e  n buffer, return
13150 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64   the size needed
13160 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65  ...      if (bDe
13170 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  st == null) retu
13180 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20  rn nlen;....    
13190 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20    int nCopied = 
131a0 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  nLength;....    
131b0 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
131c0 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c  nStart > bDest.L
131d0 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d  ength) nCopied =
131e0 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20   bDest.Length - 
131f0 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69  nStart;..      i
13200 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61  f (nCopied + nDa
13210 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29  taOffset > nlen)
13220 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20   nCopied = nlen 
13230 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a  - nDataOffset;..
13240 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
13250 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ied > 0)..      
13260 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
13270 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61  r ptr = UnsafeNa
13280 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13290 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70  te3_value_blob(p
132a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61  );....        Ma
132b0 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50  rshal.Copy((IntP
132c0 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28  tr)(ptr.ToInt64(
132d0 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29  ) + nDataOffset)
132e0 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c  , bDest, nStart,
132f0 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20   nCopied);..    
13300 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d    }..      else.
13310 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
13320 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a    nCopied = 0;..
13330 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
13340 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b   return nCopied;
13350 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
13360 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
13370 20 64 6f 75 62 6c 65 20 47 65 74 50 61 72 61 6d   double GetParam
13380 56 61 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74 50  ValueDouble(IntP
13390 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a  tr ptr)..    {..
133a0 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
133b0 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
133c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
133d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
133e0 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64  .sqlite3_value_d
133f0 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c  ouble(ptr);..#el
13400 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
13410 41 52 44 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c  ARD..      doubl
13420 65 20 76 61 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a  e value = 0.0;..
13430 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
13440 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13450 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69  3_value_double_i
13460 6e 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20  nterop(ptr, ref 
13470 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72  value);..      r
13480 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65  eturn value;..#e
13490 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
134a0 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
134b0 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
134c0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
134d0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
134e0 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 50  verride int GetP
134f0 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49  aramValueInt32(I
13500 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
13510 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
13520 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13530 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
13540 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20  e_int(ptr);..   
13550 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
13560 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
13570 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
13580 74 36 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d  t64(IntPtr ptr).
13590 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41  .    {..#if !PLA
135a0 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
135b0 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 72 65  MEWORK..      re
135c0 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
135d0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
135e0 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 74 72  _value_int64(ptr
135f0 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
13600 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
13610 20 20 49 6e 74 36 34 20 76 61 6c 75 65 20 3d 20    Int64 value = 
13620 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  0;..      Unsafe
13630 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13640 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
13650 34 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 72  4_interop(ptr, r
13660 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ef value);..    
13670 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
13680 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
13690 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
136a0 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
136b0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
136c0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
136d0 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
136e0 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54  g GetParamValueT
136f0 65 78 74 28 49 6e 74 50 74 72 20 70 74 72 29 0d  ext(IntPtr ptr).
13700 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
13710 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
13720 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
13730 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
13740 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
13750 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13760 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
13770 78 74 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20  xt_interop(ptr, 
13780 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  ref len), len);.
13790 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
137a0 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
137b0 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
137c0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
137d0 6c 75 65 5f 74 65 78 74 28 70 74 72 29 2c 0d 0a  lue_text(ptr),..
137e0 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
137f0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13800 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
13810 70 74 72 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ptr));..#endif..
13820 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
13830 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54  ernal override T
13840 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74 50  ypeAffinity GetP
13850 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49 6e  aramValueType(In
13860 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
13870 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
13880 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
13890 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
138a0 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20 20 20  _type(ptr);..   
138b0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
138c0 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
138d0 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50   ReturnBlob(IntP
138e0 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74 65  tr context, byte
138f0 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  [] value)..    {
13900 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
13910 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13920 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28  te3_result_blob(
13930 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c 20  context, value, 
13940 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49  value.Length, (I
13950 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
13960 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
13970 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
13980 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 49  d ReturnDouble(I
13990 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 64  ntPtr context, d
139a0 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20  ouble value)..  
139b0 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
139c0 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
139d0 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ORK..      Unsaf
139e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
139f0 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
13a00 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76 61  uble(context, va
13a10 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
13a20 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
13a30 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
13a40 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13a50 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69  _result_double_i
13a60 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20  nterop(context, 
13a70 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
13a80 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
13a90 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
13aa0 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
13ab0 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
13ac0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
13ad0 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
13ae0 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20 63  rnError(IntPtr c
13af0 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76  ontext, string v
13b00 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
13b10 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
13b20 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13b30 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e  result_error(con
13b40 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c  text, ToUTF8(val
13b50 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  ue), value.Lengt
13b60 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  h);..    }....  
13b70 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13b80 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49  ide void ReturnI
13b90 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74  nt32(IntPtr cont
13ba0 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d  ext, int value).
13bb0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
13bc0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13bd0 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
13be0 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76 61  _int(context, va
13bf0 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lue);..    }....
13c00 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
13c10 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
13c20 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63 6f  nInt64(IntPtr co
13c30 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75  ntext, long valu
13c40 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
13c50 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
13c60 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
13c70 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13c80 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
13c90 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78  ult_int64(contex
13ca0 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69  t, value);..#eli
13cb0 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
13cc0 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RD..      Unsafe
13cd0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13ce0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
13cf0 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  64_interop(conte
13d00 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  xt, ref value);.
13d10 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
13d20 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
13d30 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
13d40 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
13d50 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13d60 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
13d70 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74  ReturnNull(IntPt
13d80 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
13d90 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
13da0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13db0 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c  ite3_result_null
13dc0 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20  (context);..    
13dd0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13de0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
13df0 52 65 74 75 72 6e 54 65 78 74 28 49 6e 74 50 74  ReturnText(IntPt
13e00 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
13e10 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
13e20 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20  .      byte[] b 
13e30 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b  = ToUTF8(value);
13e40 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
13e50 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13e60 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
13e70 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28  context, ToUTF8(
13e80 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68  value), b.Length
13e90 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d   - 1, (IntPtr)(-
13ea0 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23  1));..    }....#
13eb0 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  if INTEROP_VIRTU
13ec0 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f  AL_TABLE..    //
13ed0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
13ee0 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e   /// Calls the n
13ef0 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72  ative SQLite cor
13f00 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64  e library in ord
13f10 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 64  er to create a d
13f20 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 2f  isposable..    /
13f30 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69  // module contai
13f40 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65  ning the impleme
13f50 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72  ntation of a vir
13f60 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
13f70 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
13f80 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
13f90 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
13fa0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75      /// The modu
13fb0 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20 62 65 20  le object to be 
13fc0 75 73 65 64 20 77 68 65 6e 20 63 72 65 61 74 69  used when creati
13fd0 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 64 69  ng the native di
13fe0 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75 6c 65 2e  sposable module.
13ff0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
14000 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
14010 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e  am name="flags">
14020 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c  ..    /// The fl
14030 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f  ags for the asso
14040 63 69 61 74 65 64 20 3c 73 65 65 20 63 72 65 66  ciated <see cref
14050 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  ="SQLiteConnecti
14060 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  on" /> object in
14070 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
14080 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
14090 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
140a0 20 76 6f 69 64 20 43 72 65 61 74 65 4d 6f 64 75   void CreateModu
140b0 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20  le(SQLiteModule 
140c0 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f  module, SQLiteCo
140d0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
140e0 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ags)..    {..   
140f0 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
14100 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
14110 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
14120 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
14130 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b  ption("module");
14140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
14150 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
14160 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
14170 6f 4c 6f 67 4d 6f 64 75 6c 65 29 20 21 3d 20 53  oLogModule) != S
14180 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
14190 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65  lags.NoLogModule
141a0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
141b0 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
141c0 2e 4c 6f 67 45 72 72 6f 72 73 20 3d 20 28 28 66  .LogErrors = ((f
141d0 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
141e0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
141f0 4d 6f 64 75 6c 65 45 72 72 6f 72 29 20 3d 3d 20  ModuleError) == 
14200 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
14210 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45  Flags.LogModuleE
14220 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
14230 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 78      module.LogEx
14240 63 65 70 74 69 6f 6e 73 20 3d 20 28 28 66 6c 61  ceptions = ((fla
14250 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
14260 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f  ctionFlags.LogMo
14270 64 75 6c 65 45 78 63 65 70 74 69 6f 6e 29 20 3d  duleException) =
14280 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
14290 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c  onFlags.LogModul
142a0 65 45 78 63 65 70 74 69 6f 6e 29 3b 0d 0a 20 20  eException);..  
142b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
142c0 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
142d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
142e0 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
142f0 74 65 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e  teException("con
14300 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69  nection has an i
14310 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 29 3b  nvalid handle");
14320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 65 74 4c  ....        SetL
14330 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 74 72 75  oadExtension(tru
14340 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 4c 6f 61  e);..        Loa
14350 64 45 78 74 65 6e 73 69 6f 6e 28 55 6e 73 61 66  dExtension(Unsaf
14360 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53  eNativeMethods.S
14370 51 4c 49 54 45 5f 44 4c 4c 2c 20 22 73 71 6c 69  QLITE_DLL, "sqli
14380 74 65 33 5f 76 74 73 68 69 6d 5f 69 6e 69 74 22  te3_vtshim_init"
14390 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
143a0 20 28 6d 6f 64 75 6c 65 2e 43 72 65 61 74 65 44   (module.CreateD
143b0 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 28  isposableModule(
143c0 5f 73 71 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  _sql))..        
143d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
143e0 66 20 28 5f 6d 6f 64 75 6c 65 73 20 3d 3d 20 6e  f (_modules == n
143f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
14400 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73 20 3d        _modules =
14410 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
14420 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f  string, SQLiteMo
14430 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  dule>();....    
14440 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73          _modules
14450 2e 41 64 64 28 6d 6f 64 75 6c 65 2e 4e 61 6d 65  .Add(module.Name
14460 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20  , module);....  
14470 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 75            if (_u
14480 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20  sePool)..       
14490 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
144a0 20 20 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c          _usePool
144b0 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66   = false;....#if
144c0 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
144d0 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
144e0 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
144f0 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
14500 65 4c 69 6e 65 28 55 6e 73 61 66 65 4e 61 74 69  eLine(UnsafeNati
14510 76 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  veMethods.String
14520 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
14540 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
14550 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
14570 72 65 61 74 65 4d 6f 64 75 6c 65 20 28 50 6f 6f  reateModule (Poo
14580 6c 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d  l) Disabled: {0}
14590 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
145a0 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f          HandleTo
145b0 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e  String()));..#en
145c0 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
145d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
145e0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
145f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14600 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
14610 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65  LiteException(Ge
14620 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
14630 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
14640 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
14650 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
14660 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
14670 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
14680 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
14690 63 6c 65 61 6e 75 70 20 74 68 65 20 72 65 73 6f  cleanup the reso
146a0 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61  urces..    /// a
146b0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
146c0 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69   module containi
146d0 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  ng the implement
146e0 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75  ation of a virtu
146f0 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  al table...    /
14700 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
14710 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
14720 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
14730 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65    /// The module
14740 20 6f 62 6a 65 63 74 20 70 72 65 76 69 6f 75 73   object previous
14750 6c 79 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  ly passed to the
14760 20 3c 73 65 65 20 63 72 65 66 3d 22 43 72 65 61   <see cref="Crea
14770 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20  teModule" />..  
14780 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20    /// method... 
14790 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
147a0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
147b0 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20  name="flags">.. 
147c0 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73     /// The flags
147d0 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61   for the associa
147e0 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ted <see cref="S
147f0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22  QLiteConnection"
14800 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
14810 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nce...    /// </
14820 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
14830 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
14840 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65  id DisposeModule
14850 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f  (SQLiteModule mo
14860 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  dule, SQLiteConn
14870 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
14880 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
14890 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
148a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
148b0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
148c0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
148d0 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a  ion("module");..
148e0 0d 0a 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65  ..        module
148f0 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
14900 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
14910 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
14920 69 64 65 20 49 6e 74 50 74 72 20 41 67 67 72 65  ide IntPtr Aggre
14930 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50  gateContext(IntP
14940 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20  tr context)..   
14950 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
14960 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14970 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67  hods.sqlite3_agg
14980 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63  regate_context(c
14990 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20  ontext, 1);..   
149a0 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f   }....#if INTERO
149b0 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
149c0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
149d0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c  y>..    /// Call
149e0 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c  s the native SQL
149f0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
14a00 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63   in order to dec
14a10 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c 20 74  lare a virtual t
14a20 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  able..    /// in
14a30 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63   response to a c
14a40 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65  all into the <se
14a50 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
14a60 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65  ativeModule.xCre
14a70 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  ate" />..    ///
14a80 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49   or <see cref="I
14a90 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
14aa0 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  le.xConnect" /> 
14ab0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65  virtual table me
14ac0 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  thods...    /// 
14ad0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
14ae0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
14af0 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f  "module">..    /
14b00 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20 74  // The virtual t
14b10 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74  able module that
14b20 20 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e   is to be respon
14b30 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69  sible for the vi
14b40 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
14b50 20 2f 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c 61   /// being decla
14b60 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
14b70 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
14b80 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72  <param name="str
14b90 53 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  Sql">..    /// T
14ba0 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  he string contai
14bb0 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
14bc0 74 65 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e  tement describin
14bd0 67 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  g the virtual ta
14be0 62 6c 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20  ble to..    /// 
14bf0 62 65 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  be declared...  
14c00 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
14c10 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
14c20 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20  ame="error">..  
14c30 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
14c40 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  ss, the contents
14c50 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74   of this paramet
14c60 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  er are undefined
14c70 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c  .  Upon failure,
14c80 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f  ..    /// it sho
14c90 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61  uld contain an a
14ca0 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72  ppropriate error
14cb0 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f   message...    /
14cc0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
14cd0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
14ce0 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
14cf0 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
14d00 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   code...    /// 
14d10 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
14d20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
14d30 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
14d40 65 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c  e DeclareVirtual
14d50 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  Table(..        
14d60 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
14d70 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ule,..        st
14d80 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20  ring strSql,..  
14d90 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
14da0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
14db0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14dc0 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
14dd0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ll)..        {..
14de0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
14df0 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20  r = "connection 
14e00 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
14e10 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20  andle";..       
14e20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
14e30 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
14e40 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  r;..        }...
14e50 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
14e60 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65  pSql = IntPtr.Ze
14e70 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
14e80 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
14e90 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20             pSql 
14ea0 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
14eb0 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
14ec0 69 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a  ing(strSql);....
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
14ee0 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
14ef0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
14f00 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c  ods.sqlite3_decl
14f10 61 72 65 5f 76 74 61 62 28 0d 0a 20 20 20 20 20  are_vtab(..     
14f20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c             _sql,
14f30 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20   pSql);....     
14f40 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d         if ((n ==
14f50 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
14f60 2e 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65 20  .Ok) && (module 
14f70 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  != null))..     
14f80 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
14f90 65 2e 44 65 63 6c 61 72 65 64 20 3d 20 74 72 75  e.Declared = tru
14fa0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
14fb0 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
14fc0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65  eErrorCode.Ok) e
14fd0 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72  rror = GetLastEr
14fe0 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ror();....      
14ff0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
15000 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
15010 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
15020 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15030 20 20 20 20 69 66 20 28 70 53 71 6c 20 21 3d 20      if (pSql != 
15040 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
15050 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
15070 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
15080 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  Sql);..         
15090 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20 49 6e         pSql = In
150a0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
150b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
150c0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
150d0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
150e0 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20  ..    /// Calls 
150f0 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74  the native SQLit
15100 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
15110 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61  n order to decla
15120 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  re a virtual tab
15130 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  le..    /// func
15140 74 69 6f 6e 20 69 6e 20 72 65 73 70 6f 6e 73 65  tion in response
15150 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20   to a call into 
15160 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
15170 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
15180 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a  le.xCreate" />..
15190 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20      /// or <see 
151a0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
151b0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65  iveModule.xConne
151c0 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74  ct" /> virtual t
151d0 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20  able methods... 
151e0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
151f0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
15200 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e  m name="module">
15210 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69  ..    /// The vi
15220 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
15230 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65  le that is to be
15240 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
15250 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
15260 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  le..    /// func
15270 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61  tion being decla
15280 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
15290 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
152a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
152b0 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20  umentCount">..  
152c0 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
152d0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
152e0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65   the function be
152f0 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
15300 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
15310 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
15320 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20  name="name">..  
15330 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
15340 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62  f the function b
15350 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
15360 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
15370 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
15380 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a   name="error">..
15390 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
153a0 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e  cess, the conten
153b0 74 73 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d  ts of this param
153c0 65 74 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e  eter are undefin
153d0 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72  ed.  Upon failur
153e0 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73  e,..    /// it s
153f0 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e  hould contain an
15400 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72   appropriate err
15410 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20  or message...   
15420 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
15430 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
15440 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e  ..    /// A stan
15450 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
15460 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  rn code...    //
15470 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
15480 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
15490 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
154a0 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72 74 75  ode DeclareVirtu
154b0 61 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  alFunction(..   
154c0 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
154d0 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,..     
154e0 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43     int argumentC
154f0 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 73  ount,..        s
15500 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
15510 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
15520 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29  error..        )
15530 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
15540 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
15550 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
15560 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
15570 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68   = "connection h
15580 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
15590 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  ndle";..        
155a0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
155b0 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
155c0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
155d0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
155e0 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65  Name = IntPtr.Ze
155f0 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
15600 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
15610 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65             pName
15620 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
15630 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
15640 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20  ring(name);.... 
15650 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
15660 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
15670 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
15680 64 73 2e 73 71 6c 69 74 65 33 5f 6f 76 65 72 6c  ds.sqlite3_overl
15690 6f 61 64 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a 20  oad_function(.. 
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
156b0 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 61 72 67 75  sql, pName, argu
156c0 6d 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  mentCount);.... 
156d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
156e0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
156f0 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20  ode.Ok) error = 
15700 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d  GetLastError();.
15710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
15720 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20  eturn n;..      
15730 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
15740 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
15750 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
15760 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72  (pName != IntPtr
15770 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
15780 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15790 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
157a0 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b  ory.Free(pName);
157b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
157c0 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72    pName = IntPtr
157d0 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
157e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
157f0 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
15800 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
15810 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
15820 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65  ables or disable
15830 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64  d extension load
15840 69 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a  ing by SQLite...
15850 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
15860 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
15870 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22  am name="bOnOff"
15880 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20  >..    /// True 
15890 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e  to enable loadin
158a0 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c  g of extensions,
158b0 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c   false to disabl
158c0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
158d0 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
158e0 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
158f0 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f   SetLoadExtensio
15900 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a  n(bool bOnOff)..
15910 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
15920 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
15930 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
15940 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
15950 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e  nable_load_exten
15960 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
15970 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66     _sql, (bOnOff
15980 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a   ? -1 : 0));....
15990 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
159a0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
159b0 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
159c0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
159d0 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
159e0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
159f0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
15a00 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20      /// Loads a 
15a10 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e  SQLite extension
15a20 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68   library from th
15a30 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20  e named file... 
15a40 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
15a50 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
15a60 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65  m name="fileName
15a70 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
15a80 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61  name of the dyna
15a90 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79  mic link library
15aa0 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67   file containing
15ab0 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d   the extension..
15ac0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
15ad0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
15ae0 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65  m name="procName
15af0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
15b00 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f  name of the expo
15b10 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73  rted function us
15b20 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ed to initialize
15b30 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d   the extension..
15b40 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c  .    /// If null
15b50 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73  , the default "s
15b60 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e  qlite3_extension
15b70 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75  _init" will be u
15b80 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  sed...    /// </
15b90 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
15ba0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
15bb0 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  id LoadExtension
15bc0 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65  (string fileName
15bd0 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d  , string procNam
15be0 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
15bf0 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20     if (fileName 
15c00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15c10 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
15c20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
15c30 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22  ption("fileName"
15c40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
15c50 74 50 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e  tPtr pError = In
15c60 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
15c70 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
15c80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15c90 20 20 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c    byte[] utf8Fil
15ca0 65 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f  eName = UTF8Enco
15cb0 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74  ding.UTF8.GetByt
15cc0 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c  es(fileName + '\
15cd0 30 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  0');..          
15ce0 20 20 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f    byte[] utf8Pro
15cf0 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  cName = null;...
15d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
15d10 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c  (procName != nul
15d20 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
15d30 20 20 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65      utf8ProcName
15d40 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e   = UTF8Encoding.
15d50 55 54 46 38 2e 47 65 74 42 79 74 65 73 28 70 72  UTF8.GetBytes(pr
15d60 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d  ocName + '\0');.
15d70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
15d80 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
15d90 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
15da0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
15db0 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a  oad_extension(..
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61  _sql, utf8FileNa
15de0 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65  me, utf8ProcName
15df0 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a  , ref pError);..
15e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
15e10 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
15e20 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
15e30 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
15e40 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
15e50 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53  ption(n, UTF8ToS
15e60 74 72 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31  tring(pError, -1
15e70 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
15e80 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
15e90 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
15ea0 20 20 20 20 20 20 20 20 69 66 20 28 70 45 72 72          if (pErr
15eb0 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  or != IntPtr.Zer
15ec0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
15ed0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15ee0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
15ef0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66  ethods.sqlite3_f
15f00 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20  ree(pError);..  
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
15f20 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rror = IntPtr.Ze
15f30 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
15f40 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
15f50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
15f60 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62  Enables or disab
15f70 6c 65 64 20 65 78 74 65 6e 64 65 64 20 72 65 73  led extended res
15f80 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e  ult codes return
15f90 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20  ed by SQLite..  
15fa0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
15fb0 69 64 65 20 76 6f 69 64 20 53 65 74 45 78 74 65  ide void SetExte
15fc0 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28  ndedResultCodes(
15fd0 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20  bool bOnOff)..  
15fe0 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
15ff0 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
16000 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
16010 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  ds.sqlite3_exten
16020 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73  ded_result_codes
16030 28 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71  (..          _sq
16040 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20  l, (bOnOff ? -1 
16050 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  : 0));....      
16060 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
16070 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
16080 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
16090 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
160a0 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
160b0 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20  }..    /// Gets 
160c0 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20  the last SQLite 
160d0 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20  error code..    
160e0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
160f0 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
16100 65 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a  e ResultCode()..
16110 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
16120 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
16130 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16140 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a  errcode(_sql);..
16150 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47      }..    /// G
16160 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c  ets the last SQL
16170 69 74 65 20 65 78 74 65 6e 64 65 64 20 65 72 72  ite extended err
16180 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74  or code..    int
16190 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
161a0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45  QLiteErrorCode E
161b0 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64  xtendedResultCod
161c0 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  e()..    {..    
161d0 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
161e0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
161f0 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72  ite3_extended_er
16200 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20  rcode(_sql);..  
16210 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41    }....    /// A
16220 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65  dd a log message
16230 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20   via the SQLite 
16240 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65  sqlite3_log inte
16250 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65  rface...    inte
16260 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
16270 69 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 53 51  id LogMessage(SQ
16280 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45  LiteErrorCode iE
16290 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a  rrCode, string z
162a0 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d  Message)..    {.
162b0 0a 20 20 20 20 20 20 53 74 61 74 69 63 4c 6f 67  .      StaticLog
162c0 4d 65 73 73 61 67 65 28 69 45 72 72 43 6f 64 65  Message(iErrCode
162d0 2c 20 7a 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20  , zMessage);..  
162e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41    }....    /// A
162f0 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65  dd a log message
16300 20 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20   via the SQLite 
16310 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65  sqlite3_log inte
16320 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65  rface...    inte
16330 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64  rnal static void
16340 20 53 74 61 74 69 63 4c 6f 67 4d 65 73 73 61 67   StaticLogMessag
16350 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e(SQLiteErrorCod
16360 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69  e iErrCode, stri
16370 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20  ng zMessage)..  
16380 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
16390 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
163a0 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43  qlite3_log(iErrC
163b0 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73  ode, ToUTF8(zMes
163c0 73 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  sage));..    }..
163d0 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f  ..#if INTEROP_CO
163e0 44 45 43 20 7c 7c 20 49 4e 54 45 52 4f 50 5f 49  DEC || INTEROP_I
163f0 4e 43 4c 55 44 45 5f 53 45 45 0d 0a 20 20 20 20  NCLUDE_SEE..    
16400 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
16410 65 20 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f  e void SetPasswo
16420 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f  rd(byte[] passwo
16430 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d  rdBytes)..    {.
16440 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
16450 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
16460 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
16470 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c  qlite3_key(_sql,
16480 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20   passwordBytes, 
16490 70 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65  passwordBytes.Le
164a0 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66  ngth);..      if
164b0 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
164c0 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
164d0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
164e0 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
164f0 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
16500 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d    if (_usePool).
16510 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
16520 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c    _usePool = fal
16530 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f  se;....#if !NET_
16540 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
16550 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
16560 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
16570 69 74 65 4c 69 6e 65 28 55 6e 73 61 66 65 4e 61  iteLine(UnsafeNa
16580 74 69 76 65 4d 65 74 68 6f 64 73 2e 53 74 72 69  tiveMethods.Stri
16590 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
165a0 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
165b0 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
165c0 0d 0a 20 20 20 20 20 20 20 20 20 20 22 53 65 74  ..          "Set
165d0 50 61 73 73 77 6f 72 64 20 28 50 6f 6f 6c 29 20  Password (Pool) 
165e0 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d  Disabled: {0}",.
165f0 0a 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c  .          Handl
16600 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a  eToString()));..
16610 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d  #endif..      }.
16620 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
16630 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
16640 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73 77  void ChangePassw
16650 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61  ord(byte[] newPa
16660 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20  sswordBytes)..  
16670 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
16680 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
16690 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
166a0 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65 79  ds.sqlite3_rekey
166b0 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f  (_sql, newPasswo
166c0 72 64 42 79 74 65 73 2c 20 28 6e 65 77 50 61 73  rdBytes, (newPas
166d0 73 77 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e 75  swordBytes == nu
166e0 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50 61 73  ll) ? 0 : newPas
166f0 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74  swordBytes.Lengt
16700 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  h);..      if (n
16710 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
16720 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
16730 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
16740 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
16750 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  r());....      i
16760 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20  f (_usePool)..  
16770 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f      {..        _
16780 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b  usePool = false;
16790 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
167a0 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
167b0 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
167c0 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
167d0 4c 69 6e 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Line(UnsafeNativ
167e0 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  eMethods.StringF
167f0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
16800 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
16810 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
16820 20 20 20 20 20 20 20 20 20 22 43 68 61 6e 67 65           "Change
16830 50 61 73 73 77 6f 72 64 20 28 50 6f 6f 6c 29 20  Password (Pool) 
16840 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d  Disabled: {0}",.
16850 0a 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c  .          Handl
16860 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a  eToString()));..
16870 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d  #endif..      }.
16880 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
16890 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
168a0 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
168b0 50 72 6f 67 72 65 73 73 48 6f 6f 6b 28 69 6e 74  ProgressHook(int
168c0 20 6e 4f 70 73 2c 20 53 51 4c 69 74 65 50 72 6f   nOps, SQLitePro
168d0 67 72 65 73 73 43 61 6c 6c 62 61 63 6b 20 66 75  gressCallback fu
168e0 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
168f0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
16900 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16910 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72  progress_handler
16920 28 5f 73 71 6c 2c 20 6e 4f 70 73 2c 20 66 75 6e  (_sql, nOps, fun
16930 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
16940 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
16950 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
16960 20 76 6f 69 64 20 53 65 74 41 75 74 68 6f 72 69   void SetAuthori
16970 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65 41 75  zerHook(SQLiteAu
16980 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61 63 6b  thorizerCallback
16990 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
169a0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
169b0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
169c0 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28  _set_authorizer(
169d0 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
169e0 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
169f0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
16a00 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
16a10 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c  etUpdateHook(SQL
16a20 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  iteUpdateCallbac
16a30 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
16a40 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
16a50 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
16a60 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73  3_update_hook(_s
16a70 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
16a80 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
16a90 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
16aa0 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
16ab0 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74  CommitHook(SQLit
16ac0 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20  eCommitCallback 
16ad0 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
16ae0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
16af0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16b00 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c  commit_hook(_sql
16b10 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
16b20 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
16b30 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
16b40 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 72  rride void SetTr
16b50 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69  aceCallback(SQLi
16b60 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  teTraceCallback 
16b70 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
16b80 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
16b90 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16ba0 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63  trace(_sql, func
16bb0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
16bc0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
16bd0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
16be0 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b  void SetRollback
16bf0 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62  Hook(SQLiteRollb
16c00 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  ackCallback func
16c10 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
16c20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
16c30 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c  ods.sqlite3_roll
16c40 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20  back_hook(_sql, 
16c50 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
16c60 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
16c70 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
16c80 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20  .    /// Allows 
16c90 74 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61  the setting of a
16ca0 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63   logging callbac
16cb0 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c  k invoked by SQL
16cc0 69 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20  ite when a..    
16cd0 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63  /// log event oc
16ce0 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20  curs.  Only one 
16cf0 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20  callback may be 
16d00 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73  set.  If NULL is
16d10 20 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f   passed,..    //
16d20 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61  / the logging ca
16d30 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69  llback is unregi
16d40 73 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  stered...    ///
16d50 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
16d60 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
16d70 3d 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c  ="func">The call
16d80 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f  back function to
16d90 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e   invoke.</param>
16da0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
16db0 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73  ns>Returns a res
16dc0 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e  ult code</return
16dd0 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
16de0 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
16df0 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67  ErrorCode SetLog
16e00 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c  Callback(SQLiteL
16e10 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ogCallback func)
16e20 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
16e30 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
16e40 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
16e50 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
16e60 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20  3_config_log(.. 
16e70 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16e80 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53  eConfigOpsEnum.S
16e90 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47  QLITE_CONFIG_LOG
16ea0 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
16eb0 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ero);....       
16ec0 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20   return rc;..   
16ed0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
16ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
16f40 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
16f50 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20      /// Creates 
16f60 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63  a new SQLite bac
16f70 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64  kup object based
16f80 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64   on the provided
16f90 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20   destination..  
16fa0 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63    /// database c
16fb0 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
16fc0 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
16fd0 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68  connection is th
16fe0 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61  e one..    /// a
16ff0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
17000 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65  his object.  The
17010 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74   source and dest
17020 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
17030 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63  ..    /// connec
17040 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20  tions cannot be 
17050 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f  the same...    /
17060 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
17070 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
17080 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65  me="destCnn">The
17090 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
170a0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
170b0 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
170c0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
170d0 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65  destName">The de
170e0 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
170f0 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e  se name.</param>
17100 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
17110 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d   name="sourceNam
17120 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61  e">The source da
17130 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61  tabase name.</pa
17140 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
17150 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79  eturns>The newly
17160 20 63 72 65 61 74 65 64 20 62 61 63 6b 75 70 20   created backup 
17170 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73  object.</returns
17180 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
17190 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 42  override SQLiteB
171a0 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65  ackup Initialize
171b0 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
171c0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
171d0 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20  n destCnn,..    
171e0 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e      string destN
171f0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ame,..        st
17200 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d  ring sourceName.
17210 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
17220 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  {..        if (d
17230 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  estCnn == null).
17240 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
17250 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
17260 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65  ullException("de
17270 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  stCnn");....    
17280 20 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65      if (destName
17290 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
172a0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
172b0 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
172c0 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65  eption("destName
172d0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
172e0 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d  f (sourceName ==
172f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
17300 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
17310 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
17320 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22  ion("sourceName"
17330 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
17340 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69 74 65  Lite3 destSqlite
17350 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c  3 = destCnn._sql
17360 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a   as SQLite3;....
17370 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
17380 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29  Sqlite3 == null)
17390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
173a0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
173b0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
173c0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73              "Des
173d0 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  tination connect
173e0 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70  ion has no wrapp
173f0 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  er.",..         
17400 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22         "destCnn"
17410 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
17420 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
17430 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20  ndle destHandle 
17440 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73  = destSqlite3._s
17450 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ql;....        i
17460 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d  f (destHandle ==
17470 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
17480 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
17490 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
174a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
174b0 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63    "Destination c
174c0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
174d0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
174e0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
174f0 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d      "destCnn");.
17500 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
17510 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
17520 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d  e sourceHandle =
17530 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   _sql;....      
17540 20 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64    if (sourceHand
17550 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
17560 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
17570 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
17580 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
175a0 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f  Source connectio
175b0 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
175c0 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
175d0 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44         byte[] zD
175e0 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38  estName = ToUTF8
175f0 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20  (destName);..   
17600 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75       byte[] zSou
17610 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38  rceName = ToUTF8
17620 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d  (sourceName);...
17630 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
17640 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63 6b  ackupHandle back
17650 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b  upHandle = null;
17660 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
17670 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
17680 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
17690 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
176a0 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
176b0 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
176c0 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
176d0 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
176e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
176f0 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20    IntPtr backup 
17700 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
17710 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
17720 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20  ckup_init(..    
17730 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74              dest
17740 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d  Handle, zDestNam
17750 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c  e, sourceHandle,
17760 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a   zSourceName);..
17770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
17780 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50   (backup == IntP
17790 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
177a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
177b0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
177c0 72 72 6f 72 43 6f 64 65 20 72 65 73 75 6c 74 43  rrorCode resultC
177d0 6f 64 65 20 3d 20 52 65 73 75 6c 74 43 6f 64 65  ode = ResultCode
177e0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
177f0 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
17800 74 43 6f 64 65 20 21 3d 20 53 51 4c 69 74 65 45  tCode != SQLiteE
17810 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17830 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
17840 74 65 45 78 63 65 70 74 69 6f 6e 28 72 65 73 75  teException(resu
17850 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61 73 74 45  ltCode, GetLastE
17860 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
17870 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17890 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
178a0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 66  LiteException("f
178b0 61 69 6c 65 64 20 74 6f 20 69 6e 69 74 69 61 6c  ailed to initial
178c0 69 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d 0a 20  ize backup");.. 
178d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
178e0 20 20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b              back
178f0 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53  upHandle = new S
17900 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
17910 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62 61  e(destHandle, ba
17920 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  ckup);..        
17930 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
17940 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e  iteConnection.On
17950 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65  Changed(null, ne
17960 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  w ConnectionEven
17970 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
17980 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
17990 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65  tionEventType.Ne
179a0 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c  wCriticalHandle,
179b0 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
179c0 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20      null, null, 
179d0 6e 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61 6e 64  null, backupHand
179e0 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62  le, null, new ob
179f0 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ject[] {..      
17a00 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
17a10 69 74 65 33 29 2c 20 64 65 73 74 43 6e 6e 2c 20  ite3), destCnn, 
17a20 64 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65  destName, source
17a30 4e 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20  Name }));....   
17a40 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
17a50 53 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20  SQLiteBackup(.. 
17a60 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2c             this,
17a70 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64   backupHandle, d
17a80 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74  estHandle, zDest
17a90 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64  Name, sourceHand
17aa0 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
17ab0 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a   zSourceName);..
17ac0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
17ad0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
17ae0 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f  /// Copies up to
17af0 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68   N pages from th
17b00 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
17b10 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61  e to the destina
17b20 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  tion..    /// da
17b30 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
17b40 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  d with the speci
17b50 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65  fied backup obje
17b60 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ct...    /// </s
17b70 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
17b80 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
17b90 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
17ba0 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c   object to use.<
17bb0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
17bc0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50   <param name="nP
17bd0 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  age">..    /// T
17be0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
17bf0 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61  es to copy, nega
17c00 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c  tive to copy all
17c10 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73   remaining pages
17c20 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
17c30 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
17c40 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22  ram name="retry"
17c50 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74  >..    /// Set t
17c60 6f 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70  o true if the op
17c70 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  eration needs to
17c80 20 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20   be retried due 
17c90 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  to database..   
17ca0 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73   /// locking iss
17cb0 75 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ues; otherwise, 
17cc0 73 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20  set to false... 
17cd0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
17ce0 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
17cf0 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65  s>..    /// True
17d00 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f   if there are mo
17d10 72 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63  re pages to be c
17d20 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68  opied, false oth
17d30 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f  erwise...    ///
17d40 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
17d50 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
17d60 64 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b  de bool StepBack
17d70 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
17d80 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
17d90 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  ,..        int n
17da0 50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 72  Page,..        r
17db0 65 66 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20  ef bool retry.. 
17dc0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
17dd0 0a 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d  .        retry =
17de0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
17df0 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
17e00 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
17e10 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
17e20 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
17e30 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
17e40 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
17e50 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
17e60 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
17e70 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
17e80 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
17e90 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
17ea0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
17eb0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
17ec0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
17ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17ee0 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
17ef0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
17f00 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
17f10 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
17f20 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
17f30 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
17f40 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
17f50 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
17f60 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
17f70 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
17f80 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
17f90 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
17fa0 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
17fb0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
17fc0 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
17fd0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
17fe0 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
17ff0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
18000 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65  lite3_backup_ste
18010 70 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61  p(handlePtr, nPa
18020 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61  ge);..        ba
18030 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74  ckup._stepResult
18040 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53   = n; /* NOTE: S
18050 61 76 65 20 66 6f 72 20 75 73 65 20 62 79 20 46  ave for use by F
18060 69 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d  inishBackup. */.
18070 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
18080 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
18090 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
180a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
180b0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
180c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
180d0 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
180e0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42  QLiteErrorCode.B
180f0 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  usy)..        {.
18100 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
18110 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ry = true;..    
18120 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
18130 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
18140 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66  .        else if
18150 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
18160 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a  orCode.Locked)..
18170 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18180 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74         retry = t
18190 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
181a0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
181b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
181c0 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
181d0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
181e0 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20  .Done)..        
181f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
18200 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
18210 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
18220 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b   else..        {
18230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
18240 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
18250 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
18260 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
18270 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
18280 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
18290 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
182a0 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
182b0 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e  f pages remainin
182c0 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66  g to be copied f
182d0 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a  rom the source..
182e0 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
182f0 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
18300 69 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73  ion database ass
18310 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
18320 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20   specified..    
18330 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  /// backup objec
18340 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
18350 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
18360 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
18370 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
18380 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e  object to check.
18390 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
183a0 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e  / <returns>The n
183b0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72  umber of pages r
183c0 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63  emaining to be c
183d0 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e  opied.</returns>
183e0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
183f0 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61  verride int Rema
18400 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20  iningBackup(..  
18410 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
18420 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20  up backup..     
18430 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
18440 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
18450 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
18460 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
18470 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
18480 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
18490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
184a0 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
184b0 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
184c0 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
184d0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
184e0 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
184f0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
18500 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
18510 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
18520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18530 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
18540 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
18550 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
18560 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
18570 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
18580 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
18590 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
185a0 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
185b0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
185c0 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
185d0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
185e0 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
185f0 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
18600 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
18610 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
18620 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
18630 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
18640 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
18650 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64  p_remaining(hand
18660 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lePtr);..    }..
18670 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
18680 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
18690 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  urns the total n
186a0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
186b0 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74  n the source dat
186c0 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
186d0 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74  ..    /// with t
186e0 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63  he specified bac
186f0 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
18700 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
18710 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
18720 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
18730 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
18740 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d  to check.</param
18750 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
18760 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75  rns>The total nu
18770 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
18780 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
18790 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  base.</returns>.
187a0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
187b0 65 72 72 69 64 65 20 69 6e 74 20 50 61 67 65 43  erride int PageC
187c0 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20  ountBackup(..   
187d0 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
187e0 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
187f0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
18800 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
18810 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
18820 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
18830 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
18840 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
18850 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
18860 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
18870 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
18880 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
18890 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
188a0 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
188b0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
188c0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
188d0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
18900 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
18910 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
18920 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
18930 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
18940 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
18950 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
18960 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
18970 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
18980 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
18990 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
189a0 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
189b0 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
189c0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
189d0 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
189e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
189f0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
18a00 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
18a10 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c  _pagecount(handl
18a20 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ePtr);..    }...
18a30 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
18a40 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74  y>..    /// Dest
18a50 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20  roys the backup 
18a60 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20  object, rolling 
18a70 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20  back any backup 
18a80 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a  that may be in..
18a90 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e      /// progess.
18aa0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
18ab0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
18ac0 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
18ad0 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
18ae0 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e  ject to destroy.
18af0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
18b00 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
18b10 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75  void FinishBacku
18b20 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
18b30 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
18b40 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
18b50 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
18b60 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
18b70 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
18b80 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
18b90 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
18ba0 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
18bb0 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
18bc0 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
18bd0 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
18be0 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
18bf0 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
18c00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
18c10 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
18c20 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
18c30 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
18c40 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
18c50 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
18c60 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
18c70 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
18c80 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
18c90 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
18ca0 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
18cb0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
18cd0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
18ce0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
18cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d00 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
18d10 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
18d20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
18d30 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  );....#if !SQLIT
18d40 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
18d50 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
18d60 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
18d70 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
18d80 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
18d90 68 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  h_interop(handle
18da0 50 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  Ptr);..#else..  
18db0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
18dc0 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
18dd0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
18de0 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
18df0 69 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  ish(handlePtr);.
18e00 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
18e10 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c   handle.SetHandl
18e20 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d  eAsInvalid();...
18e30 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c  .#if COUNT_HANDL
18e40 45 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  E..        if ((
18e50 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
18e60 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d  Code.Ok) || (n =
18e70 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65  = backup._stepRe
18e80 73 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61  sult)) handle.Wa
18e90 73 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a  sReleasedOk();..
18ea0 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
18eb0 20 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69    if ((n != SQLi
18ec0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
18ed0 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e  && (n != backup.
18ee0 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20  _stepResult)).. 
18ef0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
18f00 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
18f10 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
18f20 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
18f30 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
18f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f90 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
18fa0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
18fb0 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
18fc0 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
18fd0 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
18fe0 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
18ff0 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
19000 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
19010 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
19020 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
19030 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
19040 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69  / A boolean indi
19050 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
19060 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65  r not the SQLite
19070 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
19080 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
19090 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
190a0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
190b0 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
190c0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
190d0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
190e0 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a  bool IsInitializ
190f0 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
19100 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74       return Stat
19110 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
19120 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
19130 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
19140 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
19150 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  es if the SQLite
19160 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
19170 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  s been initializ
19180 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ed for the..    
19190 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63  /// current proc
191a0 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
191b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
191c0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
191d0 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69   /// A boolean i
191e0 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
191f0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c  r or not the SQL
19200 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
19210 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f   has been..    /
19220 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  // initialized f
19230 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  or the current p
19240 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
19250 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
19260 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
19270 20 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e   bool StaticIsIn
19280 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20  itialized()..   
19290 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
192a0 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49          // BUGFI
192b0 58 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73  X: Prevent races
192c0 20 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65   with other thre
192d0 61 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74  ads for this ent
192e0 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a  ire block, due..
192f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
19300 20 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69     to the try/fi
19310 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e  nally semantics.
19320 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32    See ticket [72
19330 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20  905c9a77]...    
19340 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
19350 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
19360 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
19370 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
19380 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
19390 20 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20   Save the state 
193a0 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  of the logging c
193b0 6c 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65  lass and then re
193c0 73 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20  store it..      
193d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
193e0 66 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65  fter we are done
193f0 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e   to avoid loggin
19400 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65  g too many false
19410 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20   errors...      
19420 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19430 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64        bool saved
19440 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65  Enabled = SQLite
19450 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20  Log.Enabled;..  
19460 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
19470 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61  Log.Enabled = fa
19480 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
19490 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
194a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
194b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
194c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
194d0 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64  OTE: This method
194e0 20 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61   [ab]uses the fa
194f0 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77  ct that SQLite w
19500 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20  ill always..    
19510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
19520 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
19530 54 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79  TE_ERROR for any
19540 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75   unknown configu
19550 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20  ration option.. 
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19570 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a  /       *unless*
19580 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
19590 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20  ary has already 
195a0 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
195b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
195c0 20 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74     //       In t
195d0 68 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c  hat case it will
195e0 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53   always return S
195f0 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20  QLITE_MISUSE... 
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19610 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
19620 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
19630 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
19640 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
19650 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28  te3_config_none(
19660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19670 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
19680 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  igOpsEnum.SQLITE
19690 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a  _CONFIG_NONE);..
196a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
196b0 20 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20    return (rc == 
196c0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
196d0 4d 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20  Misuse);..      
196e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
196f0 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
19700 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
19720 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d  iteLog.Enabled =
19730 20 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a   savedEnabled;..
19740 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
19750 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
19760 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
19770 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65  ary>..    /// He
19780 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f  lper function to
19790 20 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75   retrieve a colu
197a0 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20  mn of data from 
197b0 61 6e 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  an active statem
197c0 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent...    /// </
197d0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
197e0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
197f0 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65  tmt">The stateme
19800 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28 29 27  nt being step()'
19810 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d  d through</param
19820 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
19830 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54  m name="flags">T
19840 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61  he flags associa
19850 74 65 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e  ted with the con
19860 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e  nection.</param>
19870 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
19880 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68   name="index">Th
19890 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74  e column index t
198a0 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
198b0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
198c0 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68  am name="typ">Th
198d0 65 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63  e type of data c
198e0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
198f0 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e  column.  If Unin
19900 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20  itialized, this 
19910 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65  function will re
19920 74 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74  trieve the datat
19930 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ype information.
19940 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
19950 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
19960 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74  ns the data in t
19970 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72  he column</retur
19980 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
19990 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  l override objec
199a0 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74  t GetValue(SQLit
199b0 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
199c0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
199d0 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
199e0 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54  t index, SQLiteT
199f0 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d  ype typ)..    {.
19a00 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
19a10 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41 66  ity aff = typ.Af
19a20 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 69  finity;..      i
19a30 66 20 28 61 66 66 20 3d 3d 20 54 79 70 65 41 66  f (aff == TypeAf
19a40 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 20 72 65 74  finity.Null) ret
19a50 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65  urn DBNull.Value
19a60 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74 20  ;..      Type t 
19a70 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
19a80 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 21 3d   if (typ.Type !=
19a90 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d   DbType.Object).
19aa0 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
19ab0 20 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76    t = SQLiteConv
19ac0 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f  ert.SQLiteTypeTo
19ad0 54 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20 20  Type(typ);..    
19ae0 20 20 20 20 61 66 66 20 3d 20 54 79 70 65 54 6f      aff = TypeTo
19af0 41 66 66 69 6e 69 74 79 28 74 29 3b 0d 0a 20 20  Affinity(t);..  
19b00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
19b10 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
19b20 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
19b30 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29 20  s.GetAllAsText) 
19b40 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
19b50 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41  ionFlags.GetAllA
19b60 73 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20  sText)..        
19b70 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74    return GetText
19b80 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
19b90 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
19ba0 61 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  aff)..      {.. 
19bb0 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
19bc0 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
19bd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
19be0 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65  p.Type == DbType
19bf0 2e 47 75 69 64 20 26 26 20 74 79 70 2e 41 66 66  .Guid && typ.Aff
19c00 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66  inity == TypeAff
19c10 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20  inity.Text)..   
19c20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
19c30 6e 65 77 20 47 75 69 64 28 47 65 74 54 65 78 74  new Guid(GetText
19c40 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  (stmt, index));.
19c50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ...          int
19c60 20 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74   n = (int)GetByt
19c70 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  es(stmt, index, 
19c80 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d  0, null, 0, 0);.
19c90 0a 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b  .          byte[
19ca0 5d 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e  ] b = new byte[n
19cb0 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65  ];..          Ge
19cc0 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64  tBytes(stmt, ind
19cd0 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b  ex, 0, b, 0, n);
19ce0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
19cf0 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62   (typ.Type == Db
19d00 54 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d  Type.Guid && n =
19d10 3d 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20  = 16)..         
19d20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75     return new Gu
19d30 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  id(b);....      
19d40 20 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20      return b;.. 
19d50 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
19d60 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d  Affinity.DateTim
19d70 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e:..          re
19d80 74 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65  turn GetDateTime
19d90 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
19da0 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
19db0 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65  eAffinity.Double
19dc0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  :..          if 
19dd0 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  (t == null) retu
19de0 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d  rn GetDouble(stm
19df0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
19e00 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e        return Con
19e10 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28  vert.ChangeType(
19e20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20  GetDouble(stmt, 
19e30 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29  index), t, null)
19e40 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
19e50 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
19e60 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  64:..          i
19e70 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  f (t == null) re
19e80 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74  turn GetInt64(st
19e90 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
19ea0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
19eb0 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
19ec0 20 72 65 74 75 72 6e 20 47 65 74 42 6f 6f 6c 65   return GetBoole
19ed0 61 6e 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  an(stmt, index);
19ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
19ef0 74 20 3d 3d 20 74 79 70 65 6f 66 28 53 42 79 74  t == typeof(SByt
19f00 65 29 29 20 72 65 74 75 72 6e 20 47 65 74 53 42  e)) return GetSB
19f10 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  yte(stmt, index)
19f20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
19f30 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 42 79 74  (t == typeof(Byt
19f40 65 29 29 20 72 65 74 75 72 6e 20 47 65 74 42 79  e)) return GetBy
19f50 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te(stmt, index);
19f60 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
19f70 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 31  t == typeof(Int1
19f80 36 29 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e  6)) return GetIn
19f90 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t16(stmt, index)
19fa0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
19fb0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e  (t == typeof(UIn
19fc0 74 31 36 29 29 20 72 65 74 75 72 6e 20 47 65 74  t16)) return Get
19fd0 55 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64  UInt16(stmt, ind
19fe0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
19ff0 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
1a000 49 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20 47  Int32)) return G
1a010 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
1a020 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
1a030 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
1a040 28 55 49 6e 74 33 32 29 29 20 72 65 74 75 72 6e  (UInt32)) return
1a050 20 47 65 74 55 49 6e 74 33 32 28 73 74 6d 74 2c   GetUInt32(stmt,
1a060 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
1a070 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
1a080 65 6f 66 28 49 6e 74 36 34 29 29 20 72 65 74 75  eof(Int64)) retu
1a090 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d 74  rn GetInt64(stmt
1a0a0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
1a0b0 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
1a0c0 70 65 6f 66 28 55 49 6e 74 36 34 29 29 20 72 65  peof(UInt64)) re
1a0d0 74 75 72 6e 20 47 65 74 55 49 6e 74 36 34 28 73  turn GetUInt64(s
1a0e0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
1a0f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43          return C
1a100 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70  onvert.ChangeTyp
1a110 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c  e(GetInt64(stmt,
1a120 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c   index), t, null
1a130 29 3b 0d 0a 20 20 20 20 20 20 20 20 64 65 66 61  );..        defa
1a140 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ult:..          
1a150 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28 73  return GetText(s
1a160 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
1a170 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
1a180 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1a190 72 72 69 64 65 20 69 6e 74 20 47 65 74 43 75 72  rride int GetCur
1a1a0 73 6f 72 46 6f 72 54 61 62 6c 65 28 53 51 4c 69  sorForTable(SQLi
1a1b0 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
1a1c0 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74 20 72 6f  , int db, int ro
1a1d0 6f 74 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a  otPage)..    {..
1a1e0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
1a1f0 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75  DARD..      retu
1a200 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
1a210 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74  ethods.sqlite3_t
1a220 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65  able_cursor_inte
1a230 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
1a240 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50  _stmt, db, rootP
1a250 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  age);..#else..  
1a260 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a      return -1;..
1a270 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
1a280 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1a290 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 52  erride long GetR
1a2a0 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28 53 51  owIdForCursor(SQ
1a2b0 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
1a2c0 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72 29 0d  mt, int cursor).
1a2d0 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
1a2e0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
1a2f0 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64 20 3d      long rowid =
1a300 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74   0;..      SQLit
1a310 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
1a320 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1a330 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72 73  ods.sqlite3_curs
1a340 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70  or_rowid_interop
1a350 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
1a360 6d 74 2c 20 63 75 72 73 6f 72 2c 20 72 65 66 20  mt, cursor, ref 
1a370 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20 69  rowid);..      i
1a380 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
1a390 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74  rrorCode.Ok) ret
1a3a0 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20  urn rowid;....  
1a3b0 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23      return 0;..#
1a3c0 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
1a3d0 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  rn 0;..#endif.. 
1a3e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1a3f0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
1a400 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d  id GetIndexColum
1a410 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73 74  nExtendedInfo(st
1a420 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20 73  ring database, s
1a430 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74 72  tring index, str
1a440 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65 66 20  ing column, ref 
1a450 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 72 65  int sortMode, re
1a460 66 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 72  f int onError, r
1a470 65 66 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74  ef string collat
1a480 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20 20  ionSequence)..  
1a490 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
1a4a0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
1a4b0 20 49 6e 74 50 74 72 20 63 6f 6c 6c 20 3d 20 49   IntPtr coll = I
1a4c0 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
1a4d0 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e 20 3d     int colllen =
1a4e0 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74   0;..      SQLit
1a4f0 65 45 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a  eErrorCode rc;..
1a500 0d 0a 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73  ..      rc = Uns
1a510 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1a520 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63  .sqlite3_index_c
1a530 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72  olumn_info_inter
1a540 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
1a550 64 61 74 61 62 61 73 65 29 2c 20 54 6f 55 54 46  database), ToUTF
1a560 38 28 69 6e 64 65 78 29 2c 20 54 6f 55 54 46 38  8(index), ToUTF8
1a570 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 73 6f  (column), ref so
1a580 72 74 4d 6f 64 65 2c 20 72 65 66 20 6f 6e 45 72  rtMode, ref onEr
1a590 72 6f 72 2c 20 72 65 66 20 63 6f 6c 6c 2c 20 72  ror, ref coll, r
1a5a0 65 66 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20  ef colllen);..  
1a5b0 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51      if (rc != SQ
1a5c0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
1a5d0 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
1a5e0 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20  teException(rc, 
1a5f0 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
1a600 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
1a610 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
1a620 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b  (coll, colllen);
1a630 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 73  ..#else..      s
1a640 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20  ortMode = 0;..  
1a650 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b      onError = 2;
1a660 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f  ..      collatio
1a670 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49 4e  nSequence = "BIN
1a680 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ARY";..#endif.. 
1a690 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1a6a0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
1a6b0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69  LiteErrorCode Fi
1a6c0 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67  leControl(string
1a6d0 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70   zDbName, int op
1a6e0 2c 20 49 6e 74 50 74 72 20 70 41 72 67 29 0d 0a  , IntPtr pArg)..
1a6f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
1a700 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
1a710 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1a720 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71  file_control(_sq
1a730 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e  l, (zDbName != n
1a740 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a 44  ull) ? ToUTF8(zD
1a750 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f  bName) : null, o
1a760 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d  p, pArg);..    }
1a770 0d 0a 20 20 7d 0d 0a 7d 0d 0a                    ..  }..}..