System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact a3230b50898e4dad71ab806f982ca02506ffec52:


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 32 2e 30 22 3b 0d 0a 23   "1.0.102.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 69  ry>..    /// Thi
0c00: 73 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  s is the name of
0c10: 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72   the native libr
0c20: 61 72 79 20 66 69 6c 65 20 74 68 61 74 20 63 6f  ary file that co
0c30: 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 20  ntains the..    
0c40: 2f 2f 2f 20 22 76 74 73 68 69 6d 22 20 65 78 74  /// "vtshim" ext
0c50: 65 6e 73 69 6f 6e 20 5b 77 72 61 70 70 65 72 5d  ension [wrapper]
0c60: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
0c70: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0c80: 63 74 65 64 20 73 74 72 69 6e 67 20 5f 73 68 69  cted string _shi
0c90: 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61  mExtensionFileNa
0ca0: 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  me = null;....  
0cb0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0cc0: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73  .    /// This is
0cd0: 20 74 68 65 20 66 6c 61 67 20 69 6e 64 69 63 61   the flag indica
0ce0: 74 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6e  te whether the n
0cf0: 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 66 69  ative library fi
0d00: 6c 65 20 74 68 61 74 0d 0a 20 20 20 20 2f 2f 2f  le that..    ///
0d10: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 22 76   contains the "v
0d20: 74 73 68 69 6d 22 20 65 78 74 65 6e 73 69 6f 6e  tshim" extension
0d30: 20 6d 75 73 74 20 62 65 20 64 79 6e 61 6d 69 63   must be dynamic
0d40: 61 6c 6c 79 20 6c 6f 61 64 65 64 20 62 79 0d 0a  ally loaded by..
0d50: 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 63 6c 61      /// this cla
0d60: 73 73 20 70 72 69 6f 72 20 74 6f 20 75 73 65 2e  ss prior to use.
0d70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0d80: 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63  ary>..    protec
0d90: 74 65 64 20 62 6f 6f 6c 3f 20 5f 73 68 69 6d 49  ted bool? _shimI
0da0: 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 6e 75  sLoadNeeded = nu
0db0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ll;....    /// <
0dc0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0dd0: 2f 20 54 68 69 73 20 69 73 20 74 68 65 20 6e 61  / This is the na
0de0: 6d 65 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65  me of the native
0df0: 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 66 6f 72   entry point for
0e00: 20 74 68 65 20 22 76 74 73 68 69 6d 22 0d 0a 20   the "vtshim".. 
0e10: 20 20 20 2f 2f 2f 20 65 78 74 65 6e 73 69 6f 6e     /// extension
0e20: 20 5b 77 72 61 70 70 65 72 5d 2e 0d 0a 20 20 20   [wrapper]...   
0e30: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0e40: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
0e50: 74 72 69 6e 67 20 5f 73 68 69 6d 45 78 74 65 6e  tring _shimExten
0e60: 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 20 3d 20 22  sionProcName = "
0e70: 73 71 6c 69 74 65 33 5f 76 74 73 68 69 6d 5f 69  sqlite3_vtshim_i
0e80: 6e 69 74 22 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  nit";....    ///
0e90: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0ea0: 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 73 20  /// The modules 
0eb0: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
0ec0: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  is connection...
0ed0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ee0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0ef0: 64 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  d Dictionary<str
0f00: 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c  ing, SQLiteModul
0f10: 65 3e 20 5f 6d 6f 64 75 6c 65 73 3b 0d 0a 23 65  e> _modules;..#e
0f20: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  ndif....    ////
0f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0f90: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0fa0: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72  ..    /// Constr
0fb0: 75 63 74 73 20 74 68 65 20 6f 62 6a 65 63 74 20  ucts the object 
0fc0: 75 73 65 64 20 74 6f 20 69 6e 74 65 72 61 63 74  used to interact
0fd0: 20 77 69 74 68 20 74 68 65 20 53 51 4c 69 74 65   with the SQLite
0fe0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 0d 0a 20   core library.. 
0ff0: 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20 74 68 65     /// using the
1000: 20 55 54 46 2d 38 20 74 65 78 74 20 65 6e 63 6f   UTF-8 text enco
1010: 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ding...    /// <
1020: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
1030: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1040: 66 6d 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  fmt">..    /// T
1050: 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d  he DateTime form
1060: 61 74 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  at to be used wh
1070: 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67 20 73 74  en converting st
1080: 72 69 6e 67 20 76 61 6c 75 65 73 20 74 6f 20 61  ring values to a
1090: 0d 0a 20 20 20 20 2f 2f 2f 20 44 61 74 65 54 69  ..    /// DateTi
10a0: 6d 65 20 61 6e 64 20 62 69 6e 64 69 6e 67 20 44  me and binding D
10b0: 61 74 65 54 69 6d 65 20 70 61 72 61 6d 65 74 65  ateTime paramete
10c0: 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  rs...    /// </p
10d0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
10e0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64  param name="kind
10f0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
1100: 3c 73 65 65 20 63 72 65 66 3d 22 44 61 74 65 54  <see cref="DateT
1110: 69 6d 65 4b 69 6e 64 22 20 2f 3e 20 74 6f 20 62  imeKind" /> to b
1120: 65 20 75 73 65 64 20 77 68 65 6e 20 63 72 65 61  e used when crea
1130: 74 69 6e 67 20 44 61 74 65 54 69 6d 65 0d 0a 20  ting DateTime.. 
1140: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a     /// values...
1150: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1160: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1170: 20 6e 61 6d 65 3d 22 66 6d 74 53 74 72 69 6e 67   name="fmtString
1180: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
1190: 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 74 6f  format string to
11a0: 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 61   be used when pa
11b0: 72 73 69 6e 67 20 61 6e 64 20 66 6f 72 6d 61 74  rsing and format
11c0: 74 69 6e 67 20 44 61 74 65 54 69 6d 65 0d 0a 20  ting DateTime.. 
11d0: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a     /// values...
11e0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
11f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1200: 20 6e 61 6d 65 3d 22 64 62 22 3e 0d 0a 20 20 20   name="db">..   
1210: 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
1220: 68 61 6e 64 6c 65 20 74 6f 20 62 65 20 61 73 73  handle to be ass
1230: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1240: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
1250: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
1260: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1270: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69   <param name="fi
1280: 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  leName">..    //
1290: 2f 20 54 68 65 20 66 75 6c 6c 79 20 71 75 61 6c  / The fully qual
12a0: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20  ified file name 
12b0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12c0: 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22  <paramref name="
12d0: 64 62 20 22 2f 3e 2e 0d 0a 20 20 20 20 2f 2f 2f  db "/>...    ///
12e0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
12f0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1300: 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d 0a 20 20 20  ownHandle">..   
1310: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
1320: 20 74 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74   the newly creat
1330: 65 64 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  ed object instan
1340: 63 65 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20  ce will need to 
1350: 64 69 73 70 6f 73 65 0d 0a 20 20 20 20 2f 2f 2f  dispose..    ///
1360: 20 6f 66 20 3c 70 61 72 61 6d 72 65 66 20 6e 61   of <paramref na
1370: 6d 65 3d 22 64 62 22 20 2f 3e 20 77 68 65 6e 20  me="db" /> when 
1380: 69 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20  it is no longer 
1390: 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  needed...    ///
13a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
13b0: 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 33 28  nternal SQLite3(
13c0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
13d0: 44 61 74 65 46 6f 72 6d 61 74 73 20 66 6d 74 2c  DateFormats fmt,
13e0: 0d 0a 20 20 20 20 20 20 20 20 44 61 74 65 54 69  ..        DateTi
13f0: 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20  meKind kind,..  
1400: 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6d 74        string fmt
1410: 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  String,..       
1420: 20 49 6e 74 50 74 72 20 64 62 2c 0d 0a 20 20 20   IntPtr db,..   
1430: 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
1440: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 62  Name,..        b
1450: 6f 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65 0d 0a 20  ool ownHandle.. 
1460: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1470: 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b 69 6e 64  : base(fmt, kind
1480: 2c 20 66 6d 74 53 74 72 69 6e 67 29 0d 0a 20 20  , fmtString)..  
1490: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
14a0: 28 64 62 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  (db != IntPtr.Ze
14b0: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ro)..        {..
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
14d0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
14e0: 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62  nectionHandle(db
14f0: 2c 20 6f 77 6e 48 61 6e 64 6c 65 29 3b 0d 0a 20  , ownHandle);.. 
1500: 20 20 20 20 20 20 20 20 20 20 20 5f 66 69 6c 65             _file
1510: 4e 61 6d 65 20 3d 20 66 69 6c 65 4e 61 6d 65 3b  Name = fileName;
1520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1530: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1540: 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
1550: 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
1560: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
1570: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1580: 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74  eConnectionEvent
1590: 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c  Type.NewCritical
15a0: 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a 20  Handle, null,.. 
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
15c0: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ull, null, null,
15d0: 20 5f 73 71 6c 2c 20 66 69 6c 65 4e 61 6d 65 2c   _sql, fileName,
15e0: 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d   new object[] {.
15f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1600: 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29   typeof(SQLite3)
1610: 2c 20 66 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74  , fmt, kind, fmt
1620: 53 74 72 69 6e 67 2c 20 64 62 2c 20 66 69 6c 65  String, db, file
1630: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1640: 20 20 20 20 20 20 20 6f 77 6e 48 61 6e 64 6c 65         ownHandle
1650: 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d   }));..        }
1660: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16d0: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44  ..    #region ID
16e0: 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65  isposable "Patte
16f0: 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  rn" Members..   
1700: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
1710: 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 70 72 69  sposed;..    pri
1720: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44  vate void CheckD
1730: 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72  isposed() /* thr
1740: 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 23 69  ow */..    {..#i
1750: 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f  f THROW_ON_DISPO
1760: 53 45 44 0d 0a 20 20 20 20 20 20 20 20 69 66 20  SED..        if 
1770: 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
1780: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1790: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
17a0: 45 78 63 65 70 74 69 6f 6e 28 74 79 70 65 6f 66  Exception(typeof
17b0: 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d 65 29 3b  (SQLite3).Name);
17c0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
17d0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
17e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1830: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72  //////....    pr
1840: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
1850: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f   void Dispose(bo
1860: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  ol disposing).. 
1870: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72     {..        tr
1880: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
1890: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
18a0: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
18b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18c0: 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64           //if (d
18d0: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
18e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a             //{..
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1900: 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //    //////////
1910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
1930: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1940: 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e    // dispose man
1950: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
1960: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
1970: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 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 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19b0: 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20      //}....     
19c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1a00: 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
1a10: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1a20: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1a30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a60: 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  /....#if INTEROP
1a70: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a  _VIRTUAL_TABLE..
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a90: 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29  DisposeModules()
1aa0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6c 6f               Clo
1ac0: 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a 20 44 69  se(false); /* Di
1ad0: 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f 74 20  sposing, cannot 
1ae0: 74 68 72 6f 77 2e 20 2a 2f 0d 0a 20 20 20 20 20  throw. */..     
1af0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1b00: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
1b10: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
1b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73  .            bas
1b30: 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70 6f 73  e.Dispose(dispos
1b40: 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ing);....       
1b50: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1b60: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 45 76       // NOTE: Ev
1b70: 65 72 79 74 68 69 6e 67 20 73 68 6f 75 6c 64 20  erything should 
1b80: 62 65 20 66 75 6c 6c 79 20 64 69 73 70 6f 73 65  be fully dispose
1b90: 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 2e  d at this point.
1ba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 69  ..            di
1bc0: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
1bd0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
1be0: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
1bf0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
1c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c50: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49  ///////....#if I
1c60: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
1c70: 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  ABLE..    /// <s
1c80: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1c90: 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74 74   This method att
1ca0: 65 6d 70 74 73 20 74 6f 20 64 69 73 70 6f 73 65  empts to dispose
1cb0: 20 6f 66 20 61 6c 6c 20 74 68 65 20 3c 73 65 65   of all the <see
1cc0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64   cref="SQLiteMod
1cd0: 75 6c 65 22 20 2f 3e 20 64 65 72 69 76 65 64 0d  ule" /> derived.
1ce0: 0a 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20  .    /// object 
1cf0: 69 6e 73 74 61 6e 63 65 73 20 63 75 72 72 65 6e  instances curren
1d00: 74 6c 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  tly associated w
1d10: 69 74 68 20 74 68 65 20 6e 61 74 69 76 65 20 64  ith the native d
1d20: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
1d30: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
1d40: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
1d50: 76 61 74 65 20 76 6f 69 64 20 44 69 73 70 6f 73  vate void Dispos
1d60: 65 4d 6f 64 75 6c 65 73 28 29 0d 0a 20 20 20 20  eModules()..    
1d70: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  {..        //.. 
1d80: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1d90: 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65 73 20 77  If any modules w
1da0: 65 72 65 20 63 72 65 61 74 65 64 2c 20 61 74 74  ere created, att
1db0: 65 6d 70 74 20 74 6f 20 64 69 73 70 6f 73 65 20  empt to dispose 
1dc0: 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  of..        //  
1dd0: 20 20 20 20 20 74 68 65 6d 20 6e 6f 77 2e 20 20       them now.  
1de0: 54 68 69 73 20 63 6f 64 65 20 69 73 20 64 65 73  This code is des
1df0: 69 67 6e 65 64 20 74 6f 20 61 76 6f 69 64 20 74  igned to avoid t
1e00: 68 72 6f 77 69 6e 67 0d 0a 20 20 20 20 20 20 20  hrowing..       
1e10: 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70 74   //       except
1e20: 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74 68 65 20  ions unless the 
1e30: 44 69 73 70 6f 73 65 20 6d 65 74 68 6f 64 20 6f  Dispose method o
1e40: 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a 20 20  f the module..  
1e50: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
1e60: 74 73 65 6c 66 20 74 68 72 6f 77 73 20 61 6e 20  tself throws an 
1e70: 65 78 63 65 70 74 69 6f 6e 2e 0d 0a 20 20 20 20  exception...    
1e80: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1e90: 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 21 3d 20  if (_modules != 
1ea0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
1eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
1ec0: 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75 65 50  reach (KeyValueP
1ed0: 61 69 72 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69  air<string, SQLi
1ee0: 74 65 4d 6f 64 75 6c 65 3e 20 70 61 69 72 20 69  teModule> pair i
1ef0: 6e 20 5f 6d 6f 64 75 6c 65 73 29 0d 0a 20 20 20  n _modules)..   
1f00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1f20: 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 20  teModule module 
1f30: 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b 0d 0a 0d  = pair.Value;...
1f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f50: 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
1f60: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1f70: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1f80: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
1f90: 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69         module.Di
1fa0: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
1fb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fc0: 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73 2e         _modules.
1fd0: 43 6c 65 61 72 28 29 3b 0d 0a 20 20 20 20 20 20  Clear();..      
1fe0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64    }..    }..#end
1ff0: 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  if....    //////
2000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2060: 20 2f 2f 20 49 74 20 69 73 6e 27 74 20 6e 65 63   // It isn't nec
2070: 65 73 73 61 72 79 20 74 6f 20 63 6c 65 61 6e 75  essary to cleanu
2080: 70 20 61 6e 79 20 66 75 6e 63 74 69 6f 6e 73 20  p any functions 
2090: 77 65 27 76 65 20 72 65 67 69 73 74 65 72 65 64  we've registered
20a0: 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63  .  If the connec
20b0: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 20 67 6f 65  tion..    // goe
20c0: 73 20 74 6f 20 74 68 65 20 70 6f 6f 6c 20 61 6e  s to the pool an
20d0: 64 20 69 73 20 72 65 73 75 72 72 65 63 74 65 64  d is resurrected
20e0: 20 6c 61 74 65 72 2c 20 72 65 2d 72 65 67 69 73   later, re-regis
20f0: 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 20  tered functions 
2100: 77 69 6c 6c 20 6f 76 65 72 77 72 69 74 65 20 74  will overwrite t
2110: 68 65 0d 0a 20 20 20 20 2f 2f 20 70 72 65 76 69  he..    // previ
2120: 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20  ous functions.  
2130: 54 68 65 20 53 51 4c 69 74 65 46 75 6e 63 74 69  The SQLiteFuncti
2140: 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65 20 77  onCookieHandle w
2150: 69 6c 6c 20 74 61 6b 65 20 63 61 72 65 20 6f 66  ill take care of
2160: 20 66 72 65 65 69 6e 67 20 75 6e 6d 61 6e 61 67   freeing unmanag
2170: 65 64 0d 0a 20 20 20 20 2f 2f 20 72 65 73 6f 75  ed..    // resou
2180: 72 63 65 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74  rces belonging t
2190: 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  o the previously
21a0: 2d 72 65 67 69 73 74 65 72 65 64 20 66 75 6e 63  -registered func
21b0: 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 69 6e 74 65  tions...    inte
21c0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
21d0: 69 64 20 43 6c 6f 73 65 28 62 6f 6f 6c 20 63 61  id Close(bool ca
21e0: 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a  nThrow)..    {..
21f0: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21        if (_sql !
2200: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
2210: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
2220: 21 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 29  !_sql.OwnHandle)
2230: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
2240: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
2250: 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  l = null;..     
2260: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
2270: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
2280: 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  .          bool 
2290: 75 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20  unbindFunctions 
22a0: 3d 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  = ((_flags & SQL
22b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
22c0: 67 73 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f  gs.UnbindFunctio
22d0: 6e 73 4f 6e 43 6c 6f 73 65 29 0d 0a 20 20 20 20  nsOnClose)..    
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 53              == S
22f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
2300: 6c 61 67 73 2e 55 6e 62 69 6e 64 46 75 6e 63 74  lags.UnbindFunct
2310: 69 6f 6e 73 4f 6e 43 6c 6f 73 65 29 3b 0d 0a 0d  ionsOnClose);...
2320: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f  .          if (_
2330: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20  usePool)..      
2340: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2350: 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65 42       if (SQLiteB
2360: 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e 65 63 74  ase.ResetConnect
2370: 69 6f 6e 28 5f 73 71 6c 2c 20 5f 73 71 6c 2c 20  ion(_sql, _sql, 
2380: 63 61 6e 54 68 72 6f 77 29 29 0d 0a 20 20 20 20  canThrow))..    
2390: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
23b0: 66 20 28 75 6e 62 69 6e 64 46 75 6e 63 74 69 6f  f (unbindFunctio
23c0: 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns)..           
23d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f0: 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74 69  if (SQLiteFuncti
2400: 6f 6e 2e 55 6e 62 69 6e 64 41 6c 6c 46 75 6e 63  on.UnbindAllFunc
2410: 74 69 6f 6e 73 28 74 68 69 73 2c 20 5f 66 6c 61  tions(this, _fla
2420: 67 73 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  gs, false))..   
2430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2440: 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43     {..#if !NET_C
2450: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
2460: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2480: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
2490: 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
24a0: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
24b0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
24c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d0: 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
24e0: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
24f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2510: 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20  UnbindFunctions 
2520: 28 50 6f 6f 6c 29 20 53 75 63 63 65 73 73 3a 20  (Pool) Success: 
2530: 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
2540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2550: 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72       HandleToStr
2560: 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66  ing()));..#endif
2570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2580: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25c0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
25d0: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
25e0: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2600: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
2610: 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
2620: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
2630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
2650: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
2660: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
2670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2680: 20 20 20 20 20 20 20 20 20 22 55 6e 62 69 6e 64           "Unbind
2690: 46 75 6e 63 74 69 6f 6e 73 20 28 50 6f 6f 6c 29  Functions (Pool)
26a0: 20 46 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d   Failure: {0}",.
26b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48                 H
26d0: 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29  andleToString())
26e0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2700: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2710: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20         }....#if 
2720: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
2730: 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 20  TABLE..         
2740: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
2750: 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64  Modules();..#end
2760: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
2770: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
2780: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64  nnectionPool.Add
2790: 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c  (_fileName, _sql
27a0: 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b  , _poolVersion);
27b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27c0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
27d0: 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64  ection.OnChanged
27e0: 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65  (null, new Conne
27f0: 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d  ctionEventArgs(.
2800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2810: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
2820: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65  nectionEventType
2830: 2e 43 6c 6f 73 65 64 54 6f 50 6f 6f 6c 2c 20 6e  .ClosedToPool, n
2840: 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20  ull, null,..    
2850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2860: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73    null, null, _s
2870: 71 6c 2c 20 5f 66 69 6c 65 4e 61 6d 65 2c 20 6e  ql, _fileName, n
2880: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20  ew object[] {.. 
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
28b0: 74 65 33 29 2c 20 63 61 6e 54 68 72 6f 77 2c 20  te3), canThrow, 
28c0: 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 70 6f 6f 6c  _fileName, _pool
28d0: 56 65 72 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a  Version }));....
28e0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
28f0: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
2900: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
2910: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2920: 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
2930: 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
2940: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
2960: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
2970: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2990: 20 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53   "Close (Pool) S
29a0: 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a 20  uccess: {0}",.. 
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c0: 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72       HandleToStr
29d0: 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66  ing()));..#endif
29e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29f0: 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  }..#if !NET_COMP
2a00: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
2a10: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
2a20: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a50: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
2a60: 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
2a70: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a90: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
2aa0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
2ab0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ac0: 20 20 20 20 20 20 20 20 20 22 43 6c 6f 73 65 20           "Close 
2ad0: 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20  (Pool) Failure: 
2ae0: 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
2af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e               Han
2b00: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
2b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b20: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
2b30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2b40: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
2b50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b60: 20 20 20 69 66 20 28 75 6e 62 69 6e 64 46 75 6e     if (unbindFun
2b70: 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20  ctions)..       
2b80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ba0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55  SQLiteFunction.U
2bb0: 6e 62 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f 6e  nbindAllFunction
2bc0: 73 28 74 68 69 73 2c 20 5f 66 6c 61 67 73 2c 20  s(this, _flags, 
2bd0: 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20  false))..       
2be0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
2bf0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
2c00: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
2c10: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
2c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2c30: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
2c40: 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
2c50: 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c70: 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
2c80: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
2c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ca0: 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 62 69             "Unbi
2cb0: 6e 64 46 75 6e 63 74 69 6f 6e 73 20 53 75 63 63  ndFunctions Succ
2cc0: 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ess: {0}",..    
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce0: 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74        HandleToSt
2cf0: 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69  ring()));..#endi
2d00: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
2d10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2d20: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d40: 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
2d50: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2d60: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d80: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
2d90: 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
2da0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
2db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dc0: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
2dd0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
2de0: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e00: 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f    "UnbindFunctio
2e10: 6e 73 20 46 61 69 6c 75 72 65 3a 20 7b 30 7d 22  ns Failure: {0}"
2e20: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e               Han
2e40: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
2e50: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e90: 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28 29 3b 0d  _sql.Dispose();.
2ea0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
2eb0: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
2ec0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ull;..      }.. 
2ed0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
2ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23  ///////////....#
2f40: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
2f50: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
2f60: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 70 72 6f 74  ECTION..    prot
2f70: 65 63 74 65 64 20 73 74 72 69 6e 67 20 48 61 6e  ected string Han
2f80: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20  dleToString().. 
2f90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
2fa0: 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
2fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2fc0: 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d  urn "<null>";...
2fd0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2fe0: 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 3b  _sql.ToString();
2ff0: 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
3000: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
3010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3060: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
3070: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3080: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
3090: 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   number of times
30a0: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
30b0: 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f  Cancel" /> metho
30c0: 64 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  d has been..    
30d0: 2f 2f 2f 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20  /// called...   
30e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
30f0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
3100: 20 47 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28   GetCancelCount(
3110: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3120: 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f    return Interlo
3130: 63 6b 65 64 2e 43 6f 6d 70 61 72 65 45 78 63 68  cked.CompareExch
3140: 61 6e 67 65 28 72 65 66 20 5f 63 61 6e 63 65 6c  ange(ref _cancel
3150: 43 6f 75 6e 74 2c 20 30 2c 20 30 29 3b 0d 0a 20  Count, 0, 0);.. 
3160: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
3170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
31d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
31e0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d  ..    /// This m
31f0: 65 74 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 73  ethod determines
3200: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
3210: 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  a <see cref="SQL
3220: 69 74 65 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e  iteException" />
3230: 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 61  ..    /// with a
3240: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 6f 66 20   return code of 
3250: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3260: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
3270: 72 75 70 74 22 20 2f 3e 20 73 68 6f 75 6c 64 0d  rupt" /> should.
3280: 0a 20 20 20 20 2f 2f 2f 20 62 65 20 74 68 72 6f  .    /// be thro
3290: 77 6e 20 61 66 74 65 72 20 6d 61 6b 69 6e 67 20  wn after making 
32a0: 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  a call into the 
32b0: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
32c0: 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ary...    /// </
32d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
32e0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
32f0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
3300: 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51   a <see cref="SQ
3310: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 22 20 2f  LiteException" /
3320: 3e 20 74 6f 20 62 65 20 74 68 72 6f 77 6e 2e 20  > to be thrown. 
3330: 20 54 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20   This method..  
3340: 20 20 2f 2f 2f 20 77 69 6c 6c 20 6f 6e 6c 79 20    /// will only 
3350: 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  return non-zero 
3360: 69 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  if the <see cref
3370: 3d 22 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74  ="Cancel" /> met
3380: 68 6f 64 20 77 61 73 20 63 61 6c 6c 65 64 0d 0a  hod was called..
3390: 20 20 20 20 2f 2f 2f 20 6f 6e 65 20 6f 72 20 6d      /// one or m
33a0: 6f 72 65 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ore times during
33b0: 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65   a call into the
33c0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
33d0: 72 61 72 79 20 28 65 2e 67 2e 20 77 68 65 6e 0d  rary (e.g. when.
33e0: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c  .    /// the sql
33f0: 69 74 65 33 5f 70 72 65 70 61 72 65 2a 28 29 20  ite3_prepare*() 
3400: 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  or sqlite3_step(
3410: 29 20 41 50 49 73 20 61 72 65 20 75 73 65 64 29  ) APIs are used)
3420: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
3430: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61  urns>..    priva
3440: 74 65 20 62 6f 6f 6c 20 53 68 6f 75 6c 64 54 68  te bool ShouldTh
3450: 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 0d 0a  rowForCancel()..
3460: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
3470: 65 74 75 72 6e 20 47 65 74 43 61 6e 63 65 6c 43  eturn GetCancelC
3480: 6f 75 6e 74 28 29 20 3e 20 30 3b 0d 0a 20 20 20  ount() > 0;..   
3490: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
34a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3500: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3510: 20 20 20 20 2f 2f 2f 20 52 65 73 65 74 73 20 74      /// Resets t
3520: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
3530: 3c 73 65 65 20 63 72 65 66 3d 22 5f 63 61 6e 63  <see cref="_canc
3540: 65 6c 43 6f 75 6e 74 22 20 2f 3e 20 66 69 65 6c  elCount" /> fiel
3550: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
3560: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
3570: 61 74 65 20 69 6e 74 20 52 65 73 65 74 43 61 6e  ate int ResetCan
3580: 63 65 6c 43 6f 75 6e 74 28 29 0d 0a 20 20 20 20  celCount()..    
3590: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
35a0: 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 43 6f  n Interlocked.Co
35b0: 6d 70 61 72 65 45 78 63 68 61 6e 67 65 28 72 65  mpareExchange(re
35c0: 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 2c 20  f _cancelCount, 
35d0: 30 2c 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29  0, _cancelCount)
35e0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
35f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3650: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
3660: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74  ary>..    /// At
3670: 74 65 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72  tempts to interr
3680: 75 70 74 20 74 68 65 20 71 75 65 72 79 20 63 75  upt the query cu
3690: 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
36a0: 67 20 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61  g on the associa
36b0: 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74  ted..    /// nat
36c0: 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ive database con
36d0: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
36e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
36f0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3700: 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28  ide void Cancel(
3710: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3720: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
3730: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
3740: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ing...      }.. 
3750: 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
3760: 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
3770: 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
3780: 20 2a 2f 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   */..      {..  
3790: 20 20 20 20 20 20 49 6e 74 65 72 6c 6f 63 6b 65        Interlocke
37a0: 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20  d.Increment(ref 
37b0: 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a  _cancelCount);..
37c0: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
37d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
37e0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 5f 73  te3_interrupt(_s
37f0: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ql);..      }.. 
3800: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
3810: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
3820: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  // This function
3830: 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65   binds a user-de
3840: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74  fined function t
3850: 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  o the connection
3860: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
3870: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
3880: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
3890: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d  tionAttribute">.
38a0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  .    /// The <se
38b0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
38c0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
38d0: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
38e0: 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ce containing.. 
38f0: 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64     /// the metad
3900: 61 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ata for the func
3910: 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64  tion to be bound
3920: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
3930: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
3940: 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69  ram name="functi
3950: 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  on">..    /// Th
3960: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
3970: 69 74 65 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f  iteFunction"/> o
3980: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74  bject instance t
3990: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
39a0: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  he..    /// func
39b0: 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64  tion to be bound
39c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
39d0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
39e0: 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
39f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
3a00: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
3a10: 77 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20  with the parent 
3a20: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
3a30: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  t...    /// </pa
3a40: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
3a50: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
3a60: 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a   BindFunction(..
3a70: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
3a80: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
3a90: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
3aa0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e,..        SQLi
3ab0: 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74  teFunction funct
3ac0: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  ion,..        SQ
3ad0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3ae0: 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20  ags flags..     
3af0: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
3b00: 20 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f       if (functio
3b10: 6e 41 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75  nAttribute == nu
3b20: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3b30: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
3b40: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
3b50: 28 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  ("functionAttrib
3b60: 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ute");....      
3b70: 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 20 3d    if (function =
3b80: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3b90: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
3ba0: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
3bb0: 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 22 29  tion("function")
3bc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
3bd0: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64  iteFunction.Bind
3be0: 46 75 6e 63 74 69 6f 6e 28 74 68 69 73 2c 20 66  Function(this, f
3bf0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3c00: 2c 20 66 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67  , function, flag
3c10: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  s);....        i
3c20: 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d  f (_functions ==
3c30: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
3c40: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d      _functions =
3c50: 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
3c60: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
3c70: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
3c80: 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20  unction>();.... 
3c90: 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e         _function
3ca0: 73 5b 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  s[functionAttrib
3cb0: 75 74 65 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 3b  ute] = function;
3cc0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
3cd0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
3ce0: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
3cf0: 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73 65 72  ion binds a user
3d00: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
3d10: 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74  n to the connect
3d20: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
3d30: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
3d40: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
3d50: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3d60: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
3d70: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3d80: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
3d90: 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  te"/> object ins
3da0: 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67  tance containing
3db0: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65  ..    /// the me
3dc0: 74 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66  tadata for the f
3dd0: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 75 6e  unction to be un
3de0: 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bound...    /// 
3df0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
3e00: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
3e10: 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
3e20: 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
3e30: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61  ated with the pa
3e40: 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  rent connection 
3e50: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
3e60: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
3e70: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d  // <returns>Non-
3e80: 7a 65 72 6f 20 69 66 20 74 68 65 20 66 75 6e 63  zero if the func
3e90: 74 69 6f 6e 20 77 61 73 20 75 6e 62 6f 75 6e 64  tion was unbound
3ea0: 20 61 6e 64 20 72 65 6d 6f 76 65 64 2e 3c 2f 72   and removed.</r
3eb0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
3ec0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
3ed0: 6f 6f 6c 20 55 6e 62 69 6e 64 46 75 6e 63 74 69  ool UnbindFuncti
3ee0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  on(..        SQL
3ef0: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
3f00: 62 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74  bute functionAtt
3f10: 72 69 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20  ribute,..       
3f20: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
3f30: 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20  nFlags flags..  
3f40: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
3f50: 20 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63          if (func
3f60: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 3d 3d  tionAttribute ==
3f70: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
3f80: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
3f90: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
3fa0: 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 41 74 74  ion("functionAtt
3fb0: 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20  ribute");....   
3fc0: 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69       if (_functi
3fd0: 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
3fe0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3ff0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
4000: 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f     SQLiteFunctio
4010: 6e 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a 0d 0a 20  n function;.... 
4020: 20 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63         if (_func
4030: 74 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  tions.TryGetValu
4040: 65 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  e(functionAttrib
4050: 75 74 65 2c 20 6f 75 74 20 66 75 6e 63 74 69 6f  ute, out functio
4060: 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n))..        {..
4070: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4080: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55  SQLiteFunction.U
4090: 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  nbindFunction(..
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40b0: 20 20 20 20 74 68 69 73 2c 20 66 75 6e 63 74 69      this, functi
40c0: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e  onAttribute, fun
40d0: 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29 20 26 26  ction, flags) &&
40e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
40f0: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 52 65 6d    _functions.Rem
4100: 6f 76 65 28 66 75 6e 63 74 69 6f 6e 41 74 74 72  ove(functionAttr
4110: 69 62 75 74 65 29 29 0d 0a 20 20 20 20 20 20 20  ibute))..       
4120: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4130: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
4140: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
4150: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
4160: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4170: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a   false;..    }..
4180: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4190: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 56  verride string V
41a0: 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20  ersion..    {.. 
41b0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
41c0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
41d0: 6e 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b  n SQLiteVersion;
41e0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
41f0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
4200: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 65   override int Ve
4210: 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20  rsionNumber..   
4220: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
4230: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4240: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72  return SQLiteVer
4250: 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20  sionNumber;..   
4260: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4270: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
4280: 69 63 20 73 74 72 69 6e 67 20 44 65 66 69 6e 65  ic string Define
4290: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b  Constants..    {
42a0: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
42b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
42c0: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
42d0: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
42e0: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29   StringBuilder()
42f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ;..            I
4300: 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73  List<string> lis
4310: 74 20 3d 20 53 51 4c 69 74 65 44 65 66 69 6e 65  t = SQLiteDefine
4320: 43 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e  Constants.Option
4330: 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  List;....       
4340: 20 20 20 20 20 69 66 20 28 6c 69 73 74 20 21 3d       if (list !=
4350: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4360: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4370: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
4380: 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69  string element i
4390: 6e 20 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20  n list)..       
43a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
43b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43c0: 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e  if (element == n
43d0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
43f0: 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4410: 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68  f (result.Length
4420: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
4430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4440: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
4450: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4460: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
4470: 2e 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29  .Append(element)
4480: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4490: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
44a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
44b0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
44c0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
44d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
44e0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
44f0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c  tatic string SQL
4500: 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  iteVersion..    
4510: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
4520: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
4530: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
4540: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
4550: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
4560: 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29  ibversion(), -1)
4570: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
4580: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4590: 6c 20 73 74 61 74 69 63 20 69 6e 74 20 53 51 4c  l static int SQL
45a0: 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72  iteVersionNumber
45b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
45c0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
45d0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
45e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
45f0: 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
4600: 6f 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20  on_number();..  
4610: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4620: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4630: 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74  tic string SQLit
4640: 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b  eSourceId..    {
4650: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
4660: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
4670: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
4680: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
4690: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f  thods.sqlite3_so
46a0: 75 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a  urceid(), -1);..
46b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
46c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
46d0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c  tatic string SQL
46e0: 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  iteCompileOption
46f0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
4700: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
4710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74  ..            St
4720: 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75  ringBuilder resu
4730: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  lt = new StringB
4740: 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20  uilder();..     
4750: 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
4760: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
4770: 20 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65     IntPtr zValue
4780: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4790: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
47a0: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
47b0: 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20  (index++);....  
47c0: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
47d0: 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74  (zValue != IntPt
47e0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
47f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4800: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
4810: 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  lt.Length > 0)..
4820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4830: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
4840: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
4850: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
4860: 74 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53  t.Append(UTF8ToS
4870: 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31  tring(zValue, -1
4880: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
4890: 20 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e       zValue = Un
48a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
48b0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c  s.sqlite3_compil
48c0: 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65  eoption_get(inde
48d0: 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  x++);..         
48e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
48f0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
4900: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
4910: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
4920: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4930: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e  static string In
4940: 74 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20  teropVersion..  
4950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
4960: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
4970: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
4980: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  D..            r
4990: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
49a0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
49b0: 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 6c  ethods.interop_l
49c0: 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29  ibversion(), -1)
49d0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
49e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
49f0: 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l;..#endif..    
4a00: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4a10: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4a20: 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72  tic string Inter
4a30: 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20  opSourceId..    
4a40: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
4a50: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
4a60: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
4a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4a80: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
4a90: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
4aa0: 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 73 6f 75  hods.interop_sou
4ab0: 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 23  rceid(), -1);..#
4ac0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
4ad0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
4ae0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
4af0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
4b00: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
4b10: 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 43 6f  string InteropCo
4b20: 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20  mpileOptions..  
4b30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
4b40: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
4b50: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
4b60: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  D..            S
4b70: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
4b80: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
4b90: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20  Builder();..    
4ba0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
4bb0: 78 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  x = 0;..        
4bc0: 20 20 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75      IntPtr zValu
4bd0: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
4be0: 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f  Methods.interop_
4bf0: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
4c00: 74 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20  t(index++);.... 
4c10: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
4c20: 20 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50   (zValue != IntP
4c30: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
4c40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4c50: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
4c60: 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  ult.Length > 0).
4c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4c80: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
4c90: 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20  nd(' ');....    
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
4cb0: 6c 74 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f  lt.Append(UTF8To
4cc0: 53 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d  String(zValue, -
4cd0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  1));..          
4ce0: 20 20 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55        zValue = U
4cf0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4d00: 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69  ds.interop_compi
4d10: 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64  leoption_get(ind
4d20: 65 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20  ex++);..        
4d30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4d40: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
4d50: 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  lt.ToString();..
4d60: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
4d70: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4d80: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
4d90: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
4da0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
4db0: 64 65 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d  de bool AutoComm
4dc0: 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  it..    {..     
4dd0: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
4de0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 73         return Is
4df0: 41 75 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c  Autocommit(_sql,
4e00: 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d   _sql);..      }
4e10: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
4e20: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
4e30: 20 6c 6f 6e 67 20 4c 61 73 74 49 6e 73 65 72 74   long LastInsert
4e40: 52 6f 77 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  RowId..    {..  
4e50: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
4e60: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
4e70: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
4e80: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4e90: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4ea0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73  hods.sqlite3_las
4eb0: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f  t_insert_rowid(_
4ec0: 73 71 6c 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  sql);..#elif !SQ
4ed0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
4ee0: 20 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 49         long rowI
4ef0: 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  d = 0;..        
4f00: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4f10: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74  ods.sqlite3_last
4f20: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e  _insert_rowid_in
4f30: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 72 65 66 20  terop(_sql, ref 
4f40: 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20  rowId);..       
4f50: 20 72 65 74 75 72 6e 20 72 6f 77 49 64 3b 0d 0a   return rowId;..
4f60: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
4f70: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
4f80: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
4f90: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
4fa0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4fb0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4fc0: 72 69 64 65 20 69 6e 74 20 43 68 61 6e 67 65 73  ride int Changes
4fd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
4fe0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66  et..      {..#if
4ff0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
5000: 44 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  D..        retur
5010: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
5020: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68  thods.sqlite3_ch
5030: 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28 5f 73  anges_interop(_s
5040: 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ql);..#else..   
5050: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
5060: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5070: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
5080: 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  _sql);..#endif..
5090: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
50a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
50b0: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d  verride long Mem
50c0: 6f 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a  oryUsed..    {..
50d0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
50e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
50f0: 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
5100: 63 4d 65 6d 6f 72 79 55 73 65 64 3b 0d 0a 20 20  cMemoryUsed;..  
5110: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
5120: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
5130: 74 61 74 69 63 20 6c 6f 6e 67 20 53 74 61 74 69  tatic long Stati
5140: 63 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20  cMemoryUsed..   
5150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
5160: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
5170: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
5180: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
5190: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
51a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
51b0: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
51c0: 79 5f 75 73 65 64 28 29 3b 0d 0a 23 65 6c 69 66  y_used();..#elif
51d0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
51e0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  D..            l
51f0: 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a  ong bytes = 0;..
5200: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
5210: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5220: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
5230: 73 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20  sed_interop(ref 
5240: 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  bytes);..       
5250: 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65       return byte
5260: 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  s;..#else..     
5270: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
5280: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
5290: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
52a0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
52b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
52c0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
52d0: 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61  ong MemoryHighwa
52e0: 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ter..    {..    
52f0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
5300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5310: 72 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65 6d  return StaticMem
5320: 6f 72 79 48 69 67 68 77 61 74 65 72 3b 0d 0a 20  oryHighwater;.. 
5330: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
5340: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
5350: 73 74 61 74 69 63 20 6c 6f 6e 67 20 53 74 61 74  static long Stat
5360: 69 63 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65  icMemoryHighwate
5370: 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  r..    {..      
5380: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
5390: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
53a0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
53b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
53c0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
53d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
53e0: 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
53f0: 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  r(0);..#elif !SQ
5400: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
5410: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
5420: 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  bytes = 0;..    
5430: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
5440: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5450: 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
5460: 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 30 2c 20  ater_interop(0, 
5470: 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20  ref bytes);..   
5480: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5490: 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20  bytes;..#else.. 
54a0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
54b0: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
54c0: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
54d0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
54e0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
54f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5500: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
5510: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
5520: 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61 74 69 76  underlying nativ
5530: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
5540: 64 6c 65 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20  dle is owned..  
5550: 20 20 2f 2f 2f 20 62 79 20 74 68 69 73 20 69 6e    /// by this in
5560: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
5570: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5580: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5590: 64 65 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c  de bool OwnHandl
55a0: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
55b0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
55c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
55d0: 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
55e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
55f0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
5600: 65 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63  eException("no c
5610: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
5620: 20 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d   available");...
5630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5640: 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64  urn _sql.OwnHand
5650: 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  le;..        }..
5660: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
5670: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5680: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
5690: 6c 6f 67 69 63 61 6c 20 6c 69 73 74 20 6f 66 20  logical list of 
56a0: 66 75 6e 63 74 69 6f 6e 73 20 61 73 73 6f 63 69  functions associ
56b0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 63  ated with this c
56c0: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
56d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
56e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
56f0: 72 72 69 64 65 20 49 44 69 63 74 69 6f 6e 61 72  rride IDictionar
5700: 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  y<SQLiteFunction
5710: 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74  Attribute, SQLit
5720: 65 46 75 6e 63 74 69 6f 6e 3e 20 46 75 6e 63 74  eFunction> Funct
5730: 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ions..    {..   
5740: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
5750: 6e 20 5f 66 75 6e 63 74 69 6f 6e 73 3b 20 7d 0d  n _functions; }.
5760: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5770: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5780: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
5790: 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28  SetMemoryStatus(
57a0: 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20  bool value)..   
57b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
57c0: 72 6e 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f  rn StaticSetMemo
57d0: 72 79 53 74 61 74 75 73 28 76 61 6c 75 65 29 3b  ryStatus(value);
57e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
57f0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53  nternal static S
5800: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
5810: 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74  taticSetMemorySt
5820: 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29  atus(bool value)
5830: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5840: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5850: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
5860: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5870: 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20  3_config_int(.. 
5880: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
5890: 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53  eConfigOpsEnum.S
58a0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
58b0: 53 54 41 54 55 53 2c 20 76 61 6c 75 65 20 3f 20  STATUS, value ? 
58c0: 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20  1 : 0);....     
58d0: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
58e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
58f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
5900: 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 66  // Attempts to f
5910: 72 65 65 20 61 73 20 6d 75 63 68 20 68 65 61 70  ree as much heap
5920: 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73 73 69   memory as possi
5930: 62 6c 65 20 66 6f 72 20 74 68 65 20 64 61 74 61  ble for the data
5940: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
5950: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
5960: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
5970: 65 74 75 72 6e 73 3e 41 20 73 74 61 6e 64 61 72  eturns>A standar
5980: 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
5990: 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72 6f 20  code (i.e. zero 
59a0: 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e 64 20  for success and 
59b0: 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 66 61 69  non-zero for fai
59c0: 6c 75 72 65 29 2e 3c 2f 72 65 74 75 72 6e 73 3e  lure).</returns>
59d0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
59e0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
59f0: 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73 65 4d  rorCode ReleaseM
5a00: 65 6d 6f 72 79 28 29 0d 0a 20 20 20 20 7b 0d 0a  emory()..    {..
5a10: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
5a20: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
5a30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5a40: 2e 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65  .sqlite3_db_rele
5a50: 61 73 65 5f 6d 65 6d 6f 72 79 28 5f 73 71 6c 29  ase_memory(_sql)
5a60: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
5a70: 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n rc;..    }....
5a80: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
5a90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d  >..    /// Attem
5aa0: 70 74 73 20 74 6f 20 66 72 65 65 20 4e 20 62 79  pts to free N by
5ab0: 74 65 73 20 6f 66 20 68 65 61 70 20 6d 65 6d 6f  tes of heap memo
5ac0: 72 79 20 62 79 20 64 65 61 6c 6c 6f 63 61 74 69  ry by deallocati
5ad0: 6e 67 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c  ng non-essential
5ae0: 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 2f 2f 2f   memory..    ///
5af0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 68 65 6c   allocations hel
5b00: 64 20 62 79 20 74 68 65 20 64 61 74 61 62 61 73  d by the databas
5b10: 65 20 6c 69 62 72 61 72 79 2e 20 4d 65 6d 6f 72  e library. Memor
5b20: 79 20 75 73 65 64 20 74 6f 20 63 61 63 68 65 20  y used to cache 
5b30: 64 61 74 61 62 61 73 65 20 70 61 67 65 73 0d 0a  database pages..
5b40: 20 20 20 20 2f 2f 2f 20 74 6f 20 69 6d 70 72 6f      /// to impro
5b50: 76 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69  ve performance i
5b60: 73 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20  s an example of 
5b70: 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65  non-essential me
5b80: 6d 6f 72 79 2e 20 20 54 68 69 73 20 69 73 20 61  mory.  This is a
5b90: 20 6e 6f 2d 6f 70 0d 0a 20 20 20 20 2f 2f 2f 20   no-op..    /// 
5ba0: 72 65 74 75 72 6e 69 6e 67 20 7a 65 72 6f 20 69  returning zero i
5bb0: 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
5bc0: 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 6e 6f  e library was no
5bd0: 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  t compiled with 
5be0: 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  the compile-time
5bf0: 0d 0a 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e  ..    /// option
5c00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
5c10: 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
5c20: 2e 20 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20 61  .  Optionally, a
5c30: 74 74 65 6d 70 74 73 20 74 6f 20 72 65 73 65 74  ttempts to reset
5c40: 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 2f 2f 2f   and/or..    ///
5c50: 20 63 6f 6d 70 61 63 74 20 74 68 65 20 57 69 6e   compact the Win
5c60: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 2c 20  32 native heap, 
5c70: 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e 0d 0a  if applicable...
5c80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5c90: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
5ca0: 61 6d 20 6e 61 6d 65 3d 22 6e 42 79 74 65 73 22  am name="nBytes"
5cb0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 72  >..    /// The r
5cc0: 65 71 75 65 73 74 65 64 20 6e 75 6d 62 65 72 20  equested number 
5cd0: 6f 66 20 62 79 74 65 73 20 74 6f 20 66 72 65 65  of bytes to free
5ce0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
5cf0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
5d00: 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74 22  ram name="reset"
5d10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  >..    /// Non-z
5d20: 65 72 6f 20 74 6f 20 61 74 74 65 6d 70 74 20 61  ero to attempt a
5d30: 20 68 65 61 70 20 72 65 73 65 74 2e 0d 0a 20 20   heap reset...  
5d40: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
5d50: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5d60: 61 6d 65 3d 22 63 6f 6d 70 61 63 74 22 3e 0d 0a  ame="compact">..
5d70: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
5d80: 20 74 6f 20 61 74 74 65 6d 70 74 20 68 65 61 70   to attempt heap
5d90: 20 63 6f 6d 70 61 63 74 69 6f 6e 2e 0d 0a 20 20   compaction...  
5da0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
5db0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5dc0: 61 6d 65 3d 22 6e 46 72 65 65 22 3e 0d 0a 20 20  ame="nFree">..  
5dd0: 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
5de0: 20 6f 66 20 62 79 74 65 73 20 61 63 74 75 61 6c   of bytes actual
5df0: 6c 79 20 66 72 65 65 64 2e 20 20 54 68 69 73 20  ly freed.  This 
5e00: 76 61 6c 75 65 20 6d 61 79 20 62 65 20 7a 65 72  value may be zer
5e10: 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  o...    /// </pa
5e20: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
5e30: 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74  aram name="reset
5e40: 4f 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  Ok">..    /// Th
5e50: 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  is value will be
5e60: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
5e70: 20 68 65 61 70 20 72 65 73 65 74 20 77 61 73 20   heap reset was 
5e80: 73 75 63 63 65 73 73 66 75 6c 2e 0d 0a 20 20 20  successful...   
5e90: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
5ea0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5eb0: 6d 65 3d 22 6e 4c 61 72 67 65 73 74 22 3e 0d 0a  me="nLargest">..
5ec0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65      /// The size
5ed0: 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   of the largest 
5ee0: 63 6f 6d 6d 69 74 74 65 64 20 66 72 65 65 20 62  committed free b
5ef0: 6c 6f 63 6b 20 69 6e 20 74 68 65 20 68 65 61 70  lock in the heap
5f00: 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20  , in bytes...   
5f10: 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20   /// This value 
5f20: 77 69 6c 6c 20 62 65 20 7a 65 72 6f 20 75 6e 6c  will be zero unl
5f30: 65 73 73 20 68 65 61 70 20 63 6f 6d 70 61 63 74  ess heap compact
5f40: 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d  ion is enabled..
5f50: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
5f60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
5f70: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
5f80: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
5f90: 72 65 74 75 72 6e 20 63 6f 64 65 20 28 69 2e 65  return code (i.e
5fa0: 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75 63 63 65  . zero for succe
5fb0: 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 0d  ss and non-zero.
5fc0: 0a 20 20 20 20 2f 2f 2f 20 66 6f 72 20 66 61 69  .    /// for fai
5fd0: 6c 75 72 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lure)...    /// 
5fe0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
5ff0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
6000: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6010: 53 74 61 74 69 63 52 65 6c 65 61 73 65 4d 65 6d  StaticReleaseMem
6020: 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 69 6e  ory(..        in
6030: 74 20 6e 42 79 74 65 73 2c 0d 0a 20 20 20 20 20  t nBytes,..     
6040: 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a     bool reset,..
6050: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
6060: 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 72  pact,..        r
6070: 65 66 20 69 6e 74 20 6e 46 72 65 65 2c 0d 0a 20  ef int nFree,.. 
6080: 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
6090: 72 65 73 65 74 4f 6b 2c 0d 0a 20 20 20 20 20 20  resetOk,..      
60a0: 20 20 72 65 66 20 75 69 6e 74 20 6e 4c 61 72 67    ref uint nLarg
60b0: 65 73 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  est..        )..
60c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
60d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
60e0: 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  c = SQLiteErrorC
60f0: 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20  ode.Ok;....     
6100: 20 20 20 69 6e 74 20 6e 46 72 65 65 4c 6f 63 61     int nFreeLoca
6110: 6c 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  l = UnsafeNative
6120: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6130: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6e  release_memory(n
6140: 42 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  Bytes);..       
6150: 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74 4c 6f   uint nLargestLo
6160: 63 61 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  cal = 0;..      
6170: 20 20 62 6f 6f 6c 20 72 65 73 65 74 4f 6b 4c 6f    bool resetOkLo
6180: 63 61 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  cal = false;....
6190: 23 69 66 20 21 44 45 42 55 47 20 26 26 20 57 49  #if !DEBUG && WI
61a0: 4e 44 4f 57 53 20 2f 2f 20 4e 4f 54 45 3a 20 53  NDOWS // NOTE: S
61b0: 68 6f 75 6c 64 20 62 65 20 22 57 49 4e 33 32 48  hould be "WIN32H
61c0: 45 41 50 20 26 26 20 21 4d 45 4d 44 45 42 55 47  EAP && !MEMDEBUG
61d0: 20 26 26 20 57 49 4e 44 4f 57 53 22 0d 0a 20 20   && WINDOWS"..  
61e0: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
61f0: 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e 64 6f 77  Methods.IsWindow
6200: 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  s())..        {.
6210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
6220: 28 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72  ((rc == SQLiteEr
6230: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 72  rorCode.Ok) && r
6240: 65 73 65 74 29 0d 0a 20 20 20 20 20 20 20 20 20  eset)..         
6250: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6260: 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
6270: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6280: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 72 65 73  qlite3_win32_res
6290: 65 74 5f 68 65 61 70 28 29 3b 0d 0a 0d 0a 20 20  et_heap();....  
62a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
62b0: 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72   (rc == SQLiteEr
62c0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62e0: 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 20 3d 20   resetOkLocal = 
62f0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
6300: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6310: 20 20 20 20 69 66 20 28 28 72 63 20 3d 3d 20 53      if ((rc == S
6320: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6330: 6b 29 20 26 26 20 63 6f 6d 70 61 63 74 29 0d 0a  k) && compact)..
6340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6350: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
6360: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6370: 5f 77 69 6e 33 32 5f 63 6f 6d 70 61 63 74 5f 68  _win32_compact_h
6380: 65 61 70 28 72 65 66 20 6e 4c 61 72 67 65 73 74  eap(ref nLargest
6390: 4c 6f 63 61 6c 29 3b 0d 0a 20 20 20 20 20 20 20  Local);..       
63a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
63b0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
63c0: 20 20 69 66 20 28 72 65 73 65 74 20 7c 7c 20 63    if (reset || c
63d0: 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20  ompact)..       
63e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
63f0: 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  rc = SQLiteError
6400: 43 6f 64 65 2e 4e 6f 74 46 6f 75 6e 64 3b 0d 0a  Code.NotFound;..
6410: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6420: 20 20 20 20 20 6e 46 72 65 65 20 3d 20 6e 46 72       nFree = nFr
6430: 65 65 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20 20 20  eeLocal;..      
6440: 20 20 6e 4c 61 72 67 65 73 74 20 3d 20 6e 4c 61    nLargest = nLa
6450: 72 67 65 73 74 4c 6f 63 61 6c 3b 0d 0a 20 20 20  rgestLocal;..   
6460: 20 20 20 20 20 72 65 73 65 74 4f 6b 20 3d 20 72       resetOk = r
6470: 65 73 65 74 4f 6b 4c 6f 63 61 6c 3b 0d 0a 0d 0a  esetOkLocal;....
6480: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
6490: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
64a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
64b0: 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e      /// Shutdown
64c0: 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69   the SQLite engi
64d0: 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ne so that it ca
64e0: 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77  n be restarted w
64f0: 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d 0a 20  ith different.. 
6500: 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61     /// configura
6510: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 20 57  tion options.  W
6520: 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f  e depend on auto
6530: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
6540: 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20  to recover...   
6550: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6560: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
6570: 73 3e 52 65 74 75 72 6e 73 20 61 20 73 74 61 6e  s>Returns a stan
6580: 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 73 75  dard SQLite resu
6590: 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75 72 6e  lt code.</return
65a0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
65b0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
65c0: 45 72 72 6f 72 43 6f 64 65 20 53 68 75 74 64 6f  ErrorCode Shutdo
65d0: 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  wn()..    {..   
65e0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74       return Stat
65f0: 69 63 53 68 75 74 64 6f 77 6e 28 66 61 6c 73 65  icShutdown(false
6600: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6610: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6620: 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e      /// Shutdown
6630: 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69   the SQLite engi
6640: 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ne so that it ca
6650: 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77  n be restarted w
6660: 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d 0a 20  ith different.. 
6670: 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61     /// configura
6680: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 20 57  tion options.  W
6690: 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f  e depend on auto
66a0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
66b0: 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20  to recover...   
66c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
66d0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
66e0: 6e 61 6d 65 3d 22 64 69 72 65 63 74 6f 72 69 65  name="directorie
66f0: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  s">..    /// Non
6700: 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65 74 20 74  -zero to reset t
6710: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
6720: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
6730: 6f 72 69 65 73 20 74 6f 20 74 68 65 69 72 0d 0a  ories to their..
6740: 20 20 20 20 2f 2f 2f 20 64 65 66 61 75 6c 74 20      /// default 
6750: 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68  values, which sh
6760: 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72  ould be null for
6770: 20 62 6f 74 68 2e 20 20 54 68 69 73 20 70 61 72   both.  This par
6780: 61 6d 65 74 65 72 20 68 61 73 20 6e 6f 0d 0a 20  ameter has no.. 
6790: 20 20 20 2f 2f 2f 20 65 66 66 65 63 74 20 6f 6e     /// effect on
67a0: 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73 20 6f 70 65   non-Windows ope
67b0: 72 61 74 69 6e 67 20 73 79 73 74 65 6d 73 2e 0d  rating systems..
67c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
67d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
67e0: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 73 74  rns>Returns a st
67f0: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
6800: 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75  sult code.</retu
6810: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
6820: 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65  al static SQLite
6830: 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69 63  ErrorCode Static
6840: 53 68 75 74 64 6f 77 6e 28 0d 0a 20 20 20 20 20  Shutdown(..     
6850: 20 20 20 62 6f 6f 6c 20 64 69 72 65 63 74 6f 72     bool director
6860: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ies..        )..
6870: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
6880: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
6890: 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  c = SQLiteErrorC
68a0: 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20  ode.Ok;....     
68b0: 20 20 20 69 66 20 28 64 69 72 65 63 74 6f 72 69     if (directori
68c0: 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  es)..        {..
68d0: 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20  #if WINDOWS..   
68e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c           if (Hel
68f0: 70 65 72 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e  perMethods.IsWin
6900: 64 6f 77 73 28 29 29 0d 0a 20 20 20 20 20 20 20  dows())..       
6910: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6920: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
6930: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6940: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
6950: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
6960: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6970: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33  ods.sqlite3_win3
6980: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28  2_set_directory(
6990: 31 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  1, null);....   
69a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
69b0: 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
69c0: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
69d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69e0: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
69f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6a00: 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
6a10: 74 6f 72 79 28 32 2c 20 6e 75 6c 6c 29 3b 0d 0a  tory(2, null);..
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6a30: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
6a40: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
6a50: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54       {..#if !NET
6a60: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
6a70: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
6a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a90: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
6aa0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
6ab0: 20 20 20 20 20 20 20 22 53 68 75 74 64 6f 77 6e         "Shutdown
6ac0: 3a 20 43 61 6e 6e 6f 74 20 72 65 73 65 74 20 64  : Cannot reset d
6ad0: 69 72 65 63 74 6f 72 69 65 73 20 6f 6e 20 74 68  irectories on th
6ae0: 69 73 20 70 6c 61 74 66 6f 72 6d 2e 22 29 3b 0d  is platform.");.
6af0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
6b00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6b10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
6b20: 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
6b30: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
6b40: 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73          rc = Uns
6b50: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6b60: 2e 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77  .sqlite3_shutdow
6b70: 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
6b80: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
6b90: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6ba0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
6bb0: 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68  Determines if th
6bc0: 65 20 61 73 73 6f 63 69 61 74 65 64 20 6e 61 74  e associated nat
6bd0: 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ive connection h
6be0: 61 6e 64 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a  andle is open...
6bf0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6c00: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
6c10: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
6c20: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 61  on-zero if the a
6c30: 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65  ssociated native
6c40: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
6c50: 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20  le is open...   
6c60: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
6c70: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6c80: 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4f 70  erride bool IsOp
6c90: 65 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  en()..    {..   
6ca0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f 73 71       return (_sq
6cb0: 6c 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 21 5f  l != null) && !_
6cc0: 73 71 6c 2e 49 73 49 6e 76 61 6c 69 64 20 26 26  sql.IsInvalid &&
6cd0: 20 21 5f 73 71 6c 2e 49 73 43 6c 6f 73 65 64 3b   !_sql.IsClosed;
6ce0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
6cf0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6d00: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
6d10: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65  e fully qualifie
6d20: 64 20 70 61 74 68 20 61 6e 64 20 66 69 6c 65 20  d path and file 
6d30: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 75 72  name for the cur
6d40: 72 65 6e 74 6c 79 20 6f 70 65 6e 0d 0a 20 20 20  rently open..   
6d50: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 2c 20 69   /// database, i
6d60: 66 20 61 6e 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  f any...    /// 
6d70: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6d80: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6d90: 22 64 62 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f  "dbName">..    /
6da0: 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
6db0: 68 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61  he attached data
6dc0: 62 61 73 65 20 74 6f 20 71 75 65 72 79 2e 0d 0a  base to query...
6dd0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
6de0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
6df0: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
6e00: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
6e10: 20 70 61 74 68 20 61 6e 64 20 66 69 6c 65 20 6e   path and file n
6e20: 61 6d 65 20 66 6f 72 20 74 68 65 20 63 75 72 72  ame for the curr
6e30: 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
6e40: 61 73 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 66  ase,..    /// if
6e50: 20 61 6e 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c   any...    /// <
6e60: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
6e70: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
6e80: 20 73 74 72 69 6e 67 20 47 65 74 46 69 6c 65 4e   string GetFileN
6e90: 61 6d 65 28 73 74 72 69 6e 67 20 64 62 4e 61 6d  ame(string dbNam
6ea0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
6eb0: 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
6ec0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6ed0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
6ee0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
6ef0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
6f00: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6f10: 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c  s.sqlite3_db_fil
6f20: 65 6e 61 6d 65 5f 62 79 74 65 73 28 0d 0a 20 20  ename_bytes(..  
6f30: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
6f40: 54 6f 55 54 46 38 28 64 62 4e 61 6d 65 29 29 2c  ToUTF8(dbName)),
6f50: 20 2d 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   -1);..    }....
6f60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
6f70: 72 72 69 64 65 20 76 6f 69 64 20 4f 70 65 6e 28  rride void Open(
6f80: 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65 6e 61  string strFilena
6f90: 6d 65 2c 20 73 74 72 69 6e 67 20 76 66 73 4e 61  me, string vfsNa
6fa0: 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  me, SQLiteConnec
6fb0: 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65 63  tionFlags connec
6fc0: 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69 74  tionFlags, SQLit
6fd0: 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20 6f  eOpenFlagsEnum o
6fe0: 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d 61  penFlags, int ma
6ff0: 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20  xPoolSize, bool 
7000: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d  usePool)..    {.
7010: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
7020: 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
7030: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
7040: 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
7050: 79 20 6f 70 65 6e 2c 20 61 74 74 65 6d 70 74 20  y open, attempt 
7060: 74 6f 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  to..      //    
7070: 20 20 20 63 6c 6f 73 65 20 69 74 20 6e 6f 77 2e     close it now.
7080: 20 20 54 68 69 73 20 6d 75 73 74 20 62 65 20 64    This must be d
7090: 6f 6e 65 20 62 65 63 61 75 73 65 20 74 68 65 20  one because the 
70a0: 66 69 6c 65 20 6e 61 6d 65 20 6f 72 0d 0a 20 20  file name or..  
70b0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68      //       oth
70c0: 65 72 20 70 61 72 61 6d 65 74 65 72 73 20 74 68  er parameters th
70d0: 61 74 20 6d 61 79 20 69 6d 70 61 63 74 20 74 68  at may impact th
70e0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
70f0: 61 62 61 73 65 0d 0a 20 20 20 20 20 20 2f 2f 20  abase..      // 
7100: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
7110: 20 6d 61 79 20 68 61 76 65 20 63 68 61 6e 67 65   may have change
7120: 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  d...      //..  
7130: 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20      if (_sql != 
7140: 6e 75 6c 6c 29 20 43 6c 6f 73 65 28 74 72 75 65  null) Close(true
7150: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  );....      //..
7160: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
7170: 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
7180: 20 77 61 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20   was not closed 
7190: 73 75 63 63 65 73 73 66 75 6c 6c 79 2c 20 74 68  successfully, th
71a0: 72 6f 77 20 61 6e 0d 0a 20 20 20 20 20 20 2f 2f  row an..      //
71b0: 20 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e         exception
71c0: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d   now...      //.
71d0: 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20  .      if (_sql 
71e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
71f0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
7200: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 63  LiteException("c
7210: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
7220: 20 69 73 20 73 74 69 6c 6c 20 61 63 74 69 76 65   is still active
7230: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 75 73  ");....      _us
7240: 65 50 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b  ePool = usePool;
7250: 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d  ..      _fileNam
7260: 65 20 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65 3b  e = strFilename;
7270: 0d 0a 20 20 20 20 20 20 5f 66 6c 61 67 73 20 3d  ..      _flags =
7280: 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73   connectionFlags
7290: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 75  ;....      if (u
72a0: 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b  sePool)..      {
72b0: 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d  ..        _sql =
72c0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
72d0: 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73 74 72  nPool.Remove(str
72e0: 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f  Filename, maxPoo
72f0: 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c  lSize, out _pool
7300: 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  Version);....   
7310: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
7320: 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28  ction.OnChanged(
7330: 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63  null, new Connec
7340: 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a  tionEventArgs(..
7350: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7360: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  teConnectionEven
7370: 74 54 79 70 65 2e 4f 70 65 6e 65 64 46 72 6f 6d  tType.OpenedFrom
7380: 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  Pool, null, null
7390: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
73a0: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c  ull, null, _sql,
73b0: 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65   strFilename, ne
73c0: 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20  w object[] {..  
73d0: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
73e0: 28 53 51 4c 69 74 65 33 29 2c 20 73 74 72 46 69  (SQLite3), strFi
73f0: 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c  lename, vfsName,
7400: 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73   connectionFlags
7410: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
7420: 70 65 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f 6f  penFlags, maxPoo
7430: 6c 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 2c 20  lSize, usePool, 
7440: 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29 29  _poolVersion }))
7450: 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  ;....#if !NET_CO
7460: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
7470: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
7480: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
7490: 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68  eLine(HelperMeth
74a0: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
74b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  (..            C
74c0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
74d0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
74e0: 20 20 20 20 20 20 20 20 22 4f 70 65 6e 20 28 50          "Open (P
74f0: 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 48 61 6e 64  ool): {0}", Hand
7500: 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  leToString()));.
7510: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d  .#endif..      }
7520: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73  ....      if (_s
7530: 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
7540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72     {..        tr
7550: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
7560: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
7570: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
7580: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
7590: 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
75a0: 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
75b0: 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
75c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
75d0: 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20 49 6e    IntPtr db = In
75e0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
75f0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7600: 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20  rCode n;....#if 
7610: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
7620: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
7630: 65 78 74 46 75 6e 63 73 20 3d 20 28 28 63 6f 6e  extFuncs = ((con
7640: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26 20 53  nectionFlags & S
7650: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7660: 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e  lags.NoExtension
7670: 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51  Functions) != SQ
7680: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7690: 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46  ags.NoExtensionF
76a0: 75 6e 63 74 69 6f 6e 73 29 20 3f 20 31 20 3a 20  unctions) ? 1 : 
76b0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
76c0: 69 66 20 28 65 78 74 46 75 6e 63 73 20 21 3d 20  if (extFuncs != 
76d0: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  0)..          {.
76e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
76f0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7700: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65  hods.sqlite3_ope
7710: 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54 46 38  n_interop(ToUTF8
7720: 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 54  (strFilename), T
7730: 6f 55 54 46 38 28 76 66 73 4e 61 6d 65 29 2c 20  oUTF8(vfsName), 
7740: 6f 70 65 6e 46 6c 61 67 73 2c 20 65 78 74 46 75  openFlags, extFu
7750: 6e 63 73 2c 20 72 65 66 20 64 62 29 3b 0d 0a 20  ncs, ref db);.. 
7760: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7770: 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64        else..#end
7780: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  if..          {.
7790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
77a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
77b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65  hods.sqlite3_ope
77c0: 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74 72 46  n_v2(ToUTF8(strF
77d0: 69 6c 65 6e 61 6d 65 29 2c 20 72 65 66 20 64 62  ilename), ref db
77e0: 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 54 6f 55  , openFlags, ToU
77f0: 54 46 38 28 76 66 73 4e 61 6d 65 29 29 3b 0d 0a  TF8(vfsName));..
7800: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23            }....#
7810: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
7820: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
7830: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
7840: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
7850: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
7860: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
7880: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
7890: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
78a0: 20 20 20 20 20 20 20 20 22 4f 70 65 6e 3a 20 7b          "Open: {
78b0: 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e 64  0}", db));..#end
78c0: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
78d0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
78e0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
78f0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
7900: 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b  eption(n, null);
7910: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c  ..          _sql
7920: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
7930: 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62  nectionHandle(db
7940: 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  , true);..      
7950: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63    }..        loc
7960: 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a 20 48 41  k (_sql) { /* HA
7970: 43 4b 3a 20 46 6f 72 63 65 20 74 68 65 20 53 79  CK: Force the Sy
7980: 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65 20 22 63  ncBlock to be "c
7990: 72 65 61 74 65 64 22 20 6e 6f 77 2e 20 2a 2f 20  reated" now. */ 
79a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
79b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e  iteConnection.On
79c0: 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65  Changed(null, ne
79d0: 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  w ConnectionEven
79e0: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
79f0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
7a00: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65  tionEventType.Ne
7a10: 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c  wCriticalHandle,
7a20: 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
7a30: 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20      null, null, 
7a40: 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74 72 46  null, _sql, strF
7a50: 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a  ilename, new obj
7a60: 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ect[] {..       
7a70: 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
7a80: 74 65 33 29 2c 20 73 74 72 46 69 6c 65 6e 61 6d  te3), strFilenam
7a90: 65 2c 20 76 66 73 4e 61 6d 65 2c 20 63 6f 6e 6e  e, vfsName, conn
7aa0: 65 63 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a 20 20  ectionFlags,..  
7ab0: 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e 46 6c            openFl
7ac0: 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65  ags, maxPoolSize
7ad0: 2c 20 75 73 65 50 6f 6f 6c 20 7d 29 29 3b 0d 0a  , usePool }));..
7ae0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7af0: 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f   // Bind functio
7b00: 6e 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65  ns to this conne
7b10: 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70  ction.  If any p
7b20: 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e  revious function
7b30: 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61  s of the same na
7b40: 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72  me..      // wer
7b50: 65 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c  e already bound,
7b60: 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69   then the new bi
7b70: 6e 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74  ndings replace t
7b80: 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 69  he old...      i
7b90: 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  f ((connectionFl
7ba0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
7bb0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69  ectionFlags.NoBi
7bc0: 6e 64 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20  ndFunctions) != 
7bd0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7be0: 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e 63  Flags.NoBindFunc
7bf0: 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 7b 0d  tions)..      {.
7c00: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f  .          if (_
7c10: 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c  functions == nul
7c20: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7c30: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e    _functions = n
7c40: 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51  ew Dictionary<SQ
7c50: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
7c60: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
7c70: 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20  ction>();....   
7c80: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
7c90: 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 53 51 4c  KeyValuePair<SQL
7ca0: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
7cb0: 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63  bute, SQLiteFunc
7cc0: 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20 20 20 20  tion> pair..    
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
7ce0: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e   SQLiteFunction.
7cf0: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68  BindFunctions(th
7d00: 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  is, connectionFl
7d10: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ags))..         
7d20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7d30: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 70 61 69    _functions[pai
7d40: 72 2e 4b 65 79 5d 20 3d 20 70 61 69 72 2e 56 61  r.Key] = pair.Va
7d50: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
7d60: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
7d70: 20 20 20 20 53 65 74 54 69 6d 65 6f 75 74 28 30      SetTimeout(0
7d80: 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e 4b 65 65  );..      GC.Kee
7d90: 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b 0d 0a 20  pAlive(_sql);.. 
7da0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7db0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
7dc0: 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29 0d 0a  id ClearPool()..
7dd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
7de0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f  iteConnectionPoo
7df0: 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66 69 6c  l.ClearPool(_fil
7e00: 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  eName);..    }..
7e10: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
7e20: 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 75 6e  verride int Coun
7e30: 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a  tPool()..    {..
7e40: 20 20 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61          Dictiona
7e50: 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 20  ry<string, int> 
7e60: 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b 0d 0a  counts = null;..
7e70: 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70 65 6e          int open
7e80: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20  Count = 0;..    
7e90: 20 20 20 20 69 6e 74 20 63 6c 6f 73 65 43 6f 75      int closeCou
7ea0: 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  nt = 0;..       
7eb0: 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e 74 20   int totalCount 
7ec0: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
7ed0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7ee0: 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73 28 5f  Pool.GetCounts(_
7ef0: 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
7f00: 20 20 20 20 20 20 20 72 65 66 20 63 6f 75 6e 74         ref count
7f10: 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f 75 6e 74  s, ref openCount
7f20: 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f 75 6e 74  , ref closeCount
7f30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
7f40: 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74 29 3b 0d  ef totalCount);.
7f50: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
7f60: 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d 0a 20  n totalCount;.. 
7f70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7f80: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
7f90: 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e  id SetTimeout(in
7fa0: 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a 20  t nTimeoutMS).. 
7fb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50     {..      IntP
7fc0: 74 72 20 64 62 20 3d 20 5f 73 71 6c 3b 0d 0a 20  tr db = _sql;.. 
7fd0: 20 20 20 20 20 69 66 20 28 64 62 20 3d 3d 20 49       if (db == I
7fe0: 6e 74 50 74 72 2e 5a 65 72 6f 29 20 74 68 72 6f  ntPtr.Zero) thro
7ff0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
8000: 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63  ption("no connec
8010: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76 61 69  tion handle avai
8020: 6c 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20 20  lable");..      
8030: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
8040: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
8050: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8060: 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
8070: 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20   nTimeoutMS);.. 
8080: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
8090: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
80a0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
80b0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
80c0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
80d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
80e0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
80f0: 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74 65  bool Step(SQLite
8100: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d  Statement stmt).
8110: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
8120: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b  LiteErrorCode n;
8130: 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72  ..      Random r
8140: 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  nd = null;..    
8150: 20 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b    uint starttick
8160: 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e   = (uint)Environ
8170: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d  ment.TickCount;.
8180: 0a 20 20 20 20 20 20 75 69 6e 74 20 74 69 6d 65  .      uint time
8190: 6f 75 74 20 3d 20 28 75 69 6e 74 29 28 73 74 6d  out = (uint)(stm
81a0: 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d  t._command._comm
81b0: 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30  andTimeout * 100
81c0: 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65 73  0);....      Res
81d0: 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 3b  etCancelCount();
81e0: 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20  ....      while 
81f0: 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d  (true)..      {.
8200: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
8210: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8220: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
8230: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
8240: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20          finally 
8250: 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
8260: 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
8270: 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  on. */..        
8280: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d  {..          n =
8290: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
82a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 74 65  hods.sqlite3_ste
82b0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
82c0: 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  tmt);..        }
82d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
82e0: 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72 43 61  ShouldThrowForCa
82f0: 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20 20 20  ncel())..       
8300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8310: 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65  if ((n == SQLite
8320: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c  ErrorCode.Ok) ||
8330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8340: 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72    (n == SQLiteEr
8350: 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d  rorCode.Row) ||.
8360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8370: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
8380: 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a 20  orCode.Done)).. 
8390: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
83a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 20                n 
83b0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
83c0: 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20  e.Interrupt;..  
83d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
83e0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
83f0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8400: 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a  tion(n, null);..
8410: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8420: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
8430: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e  LiteErrorCode.In
8440: 74 65 72 72 75 70 74 29 20 72 65 74 75 72 6e 20  terrupt) return 
8450: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
8460: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
8470: 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 72 65  rrorCode.Row) re
8480: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
8490: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
84a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e  iteErrorCode.Don
84b0: 65 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b  e) return false;
84c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
84d0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
84e0: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
84f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
8500: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
8510: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  ;....          /
8520: 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  / An error occur
8530: 72 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20  red, attempt to 
8540: 72 65 73 65 74 20 74 68 65 20 73 74 61 74 65 6d  reset the statem
8550: 65 6e 74 2e 20 20 49 66 20 74 68 65 20 72 65 73  ent.  If the res
8560: 65 74 20 77 6f 72 6b 65 64 20 62 65 63 61 75 73  et worked becaus
8570: 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  e the..         
8580: 20 2f 2f 20 73 63 68 65 6d 61 20 68 61 73 20 63   // schema has c
8590: 68 61 6e 67 65 64 2c 20 72 65 2d 74 72 79 20 74  hanged, re-try t
85a0: 68 65 20 73 74 65 70 20 61 67 61 69 6e 2e 20 20  he step again.  
85b0: 49 66 20 69 74 20 65 72 72 6f 72 65 64 20 6f 75  If it errored ou
85c0: 72 20 62 65 63 61 75 73 65 20 74 68 65 20 64 61  r because the da
85d0: 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20  tabase..        
85e0: 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64 2c 20    // is locked, 
85f0: 74 68 65 6e 20 6b 65 65 70 20 72 65 74 72 79 69  then keep retryi
8600: 6e 67 20 75 6e 74 69 6c 20 74 68 65 20 63 6f 6d  ng until the com
8610: 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f 63 63  mand timeout occ
8620: 75 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  urs...          
8630: 72 20 3d 20 52 65 73 65 74 28 73 74 6d 74 29 3b  r = Reset(stmt);
8640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
8650: 20 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (r == SQLiteErr
8660: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
8670: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
8680: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
8690: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
86a0: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r());....       
86b0: 20 20 20 65 6c 73 65 20 69 66 20 28 28 72 20 3d     else if ((r =
86c0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
86d0: 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20 3d 3d  e.Locked || r ==
86e0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
86f0: 2e 42 75 73 79 29 20 26 26 20 73 74 6d 74 2e 5f  .Busy) && stmt._
8700: 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29  command != null)
8710: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
8720: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65             // Ke
8730: 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20  ep trying..     
8740: 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d         if (rnd =
8750: 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74  = null) // First
8760: 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f   time we've enco
8770: 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b  untered the lock
8780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8790: 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d  rnd = new Random
87a0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
87b0: 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65     // If we've e
87c0: 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d  xceeded the comm
87d0: 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67  and's timeout, g
87e0: 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77  ive up and throw
87f0: 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
8800: 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74         if ((uint
8810: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
8820: 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69  kCount - startti
8830: 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20  ck > timeout).. 
8840: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8850: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
8860: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
8870: 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61 73 74  ption(r, GetLast
8880: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
8890: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
88a0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
88b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
88c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65           // Othe
88d0: 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20  rwise sleep for 
88e0: 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20  a random amount 
88f0: 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35  of time up to 15
8900: 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  0ms..           
8910: 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64     System.Thread
8920: 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70  ing.Thread.Sleep
8930: 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30  (rnd.Next(1, 150
8940: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
8950: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
8960: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
8970: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
8980: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
8990: 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20 74 68 65  .    /// Has the
89a0: 20 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28   sqlite3_errstr(
89b0: 29 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 41  ) core library A
89c0: 50 49 20 62 65 65 6e 20 63 68 65 63 6b 65 64 20  PI been checked 
89d0: 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20 2f 2f  for yet?..    //
89e0: 2f 20 49 66 20 73 6f 2c 20 69 73 20 69 74 20 70  / If so, is it p
89f0: 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f  resent?..    ///
8a00: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8a10: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
8a20: 62 6f 6f 6c 3f 20 68 61 76 65 5f 65 72 72 73 74  bool? have_errst
8a30: 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
8a40: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8a50: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
8a60: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
8a70: 65 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  e for the specif
8a80: 69 65 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ied SQLite retur
8a90: 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d 0a 20 20  n code using..  
8aa0: 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74 65    /// the sqlite
8ab0: 33 5f 65 72 72 73 74 72 28 29 20 66 75 6e 63 74  3_errstr() funct
8ac0: 69 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20 62 61 63  ion, falling bac
8ad0: 6b 20 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  k to the interna
8ae0: 6c 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20 20 2f 2f  l lookup..    //
8af0: 2f 20 74 61 62 6c 65 20 69 66 20 6e 65 63 65 73  / table if neces
8b00: 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sary...    /// <
8b10: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
8b20: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
8b30: 72 63 22 3e 54 68 65 20 53 51 4c 69 74 65 20 72  rc">The SQLite r
8b40: 65 74 75 72 6e 20 63 6f 64 65 2e 3c 2f 70 61 72  eturn code.</par
8b50: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
8b60: 74 75 72 6e 73 3e 54 68 65 20 65 72 72 6f 72 20  turns>The error 
8b70: 6d 65 73 73 61 67 65 20 6f 72 20 6e 75 6c 6c 20  message or null 
8b80: 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  if it cannot be 
8b90: 66 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e 73 3e  found.</returns>
8ba0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
8bb0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
8bc0: 45 72 72 6f 72 53 74 72 69 6e 67 28 53 51 4c 69  ErrorString(SQLi
8bd0: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 29 0d  teErrorCode rc).
8be0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
8bf0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8c10: 68 61 76 65 5f 65 72 72 73 74 72 20 3d 3d 20 6e  have_errstr == n
8c20: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
8c30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8c40: 20 20 20 20 20 69 6e 74 20 76 65 72 73 69 6f 6e       int version
8c50: 4e 75 6d 62 65 72 20 3d 20 53 51 4c 69 74 65 56  Number = SQLiteV
8c60: 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20  ersionNumber;.. 
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
8c80: 61 76 65 5f 65 72 72 73 74 72 20 3d 20 28 76 65  ave_errstr = (ve
8c90: 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33  rsionNumber >= 3
8ca0: 30 30 37 30 31 35 29 3b 0d 0a 20 20 20 20 20 20  007015);..      
8cb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8cc0: 20 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c         if ((bool
8cd0: 29 68 61 76 65 5f 65 72 72 73 74 72 29 0d 0a 20  )have_errstr).. 
8ce0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
8d00: 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66  tPtr ptr = Unsaf
8d10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8d20: 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28 72 63  qlite3_errstr(rc
8d30: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8d40: 20 20 20 20 20 20 69 66 20 28 70 74 72 20 21 3d        if (ptr !=
8d50: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
8d70: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
8d80: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
8d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8da0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72        return Mar
8db0: 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 69 6e 67  shal.PtrToString
8dc0: 41 6e 73 69 28 70 74 72 29 3b 0d 0a 23 65 6c 73  Ansi(ptr);..#els
8dd0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8de0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54         return UT
8df0: 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20  F8ToString(ptr, 
8e00: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
8e20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8e30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8e40: 20 20 20 63 61 74 63 68 20 28 45 6e 74 72 79 50     catch (EntryP
8e50: 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78 63 65  ointNotFoundExce
8e60: 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ption)..        
8e70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
8e80: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
8e90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8ea0: 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c 6c 62      return Fallb
8eb0: 61 63 6b 47 65 74 45 72 72 6f 72 53 74 72 69 6e  ackGetErrorStrin
8ec0: 67 28 72 63 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  g(rc);..    }...
8ed0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
8ee0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20  y>..    /// Has 
8ef0: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
8f00: 5f 72 65 61 64 6f 6e 6c 79 28 29 20 63 6f 72 65  _readonly() core
8f10: 20 6c 69 62 72 61 72 79 20 41 50 49 20 62 65 65   library API bee
8f20: 6e 20 63 68 65 63 6b 65 64 20 66 6f 72 20 79 65  n checked for ye
8f30: 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  t?..    /// If s
8f40: 6f 2c 20 69 73 20 69 74 20 70 72 65 73 65 6e 74  o, is it present
8f50: 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ?..    /// </sum
8f60: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
8f70: 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20  te static bool? 
8f80: 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e  have_stmt_readon
8f90: 6c 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  ly = null;....  
8fa0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
8fb0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
8fc0: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
8fd0: 20 73 70 65 63 69 66 69 65 64 20 73 74 61 74 65   specified state
8fe0: 6d 65 6e 74 20 69 73 20 72 65 61 64 2d 6f 6e 6c  ment is read-onl
8ff0: 79 20 69 6e 20 6e 61 74 75 72 65 2e 0d 0a 20 20  y in nature...  
9000: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9010: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
9020: 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65   name="stmt">The
9030: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 63 68   statement to ch
9040: 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  eck.</param>..  
9050: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
9060: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
9070: 20 71 75 65 72 79 20 69 73 20 72 65 61 64 2d 6f   query is read-o
9080: 6e 6c 79 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  nly.</returns>..
9090: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
90a0: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 52 65 61  rride bool IsRea
90b0: 64 4f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  dOnly(..        
90c0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
90d0: 73 74 6d 74 0d 0a 20 20 20 20 20 20 20 20 29 0d  stmt..        ).
90e0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
90f0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
9100: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9110: 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e  have_stmt_readon
9120: 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly == null)..   
9130: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9140: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
9150: 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3d 20  versionNumber = 
9160: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d  SQLiteVersionNum
9170: 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ber;..          
9180: 20 20 20 20 20 20 68 61 76 65 5f 73 74 6d 74 5f        have_stmt_
9190: 72 65 61 64 6f 6e 6c 79 20 3d 20 28 76 65 72 73  readonly = (vers
91a0: 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30 30  ionNumber >= 300
91b0: 37 30 30 34 29 3b 0d 0a 20 20 20 20 20 20 20 20  7004);..        
91c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
91d0: 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c 29 68       if ((bool)h
91e0: 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c  ave_stmt_readonl
91f0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
9200: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9210: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
9220: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9230: 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65 61 64 6f  lite3_stmt_reado
9240: 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  nly(..          
9250: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f            stmt._
9260: 73 71 6c 69 74 65 5f 73 74 6d 74 29 20 21 3d 20  sqlite_stmt) != 
9270: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
9280: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
9290: 20 20 20 20 20 20 63 61 74 63 68 20 28 45 6e 74        catch (Ent
92a0: 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45  ryPointNotFoundE
92b0: 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20  xception)..     
92c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
92d0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
92e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
92f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
9300: 6c 73 65 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55 6e  lse; /* NOTE: Un
9310: 6b 6e 6f 77 6e 2c 20 61 73 73 75 6d 65 20 66 61  known, assume fa
9320: 6c 73 65 2e 20 2a 2f 0d 0a 20 20 20 20 7d 0d 0a  lse. */..    }..
9330: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9340: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
9350: 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28 53 51  rorCode Reset(SQ
9360: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
9370: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
9380: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
9390: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
93a0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
93b0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
93c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
93d0: 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f  te3_reset_intero
93e0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
93f0: 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  tmt);..#else..  
9400: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
9410: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9420: 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 2e 5f  te3_reset(stmt._
9430: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23  sqlite_stmt);..#
9440: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f  endif....      /
9450: 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20  / If the schema 
9460: 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61 6e 64  changed, try and
9470: 20 72 65 2d 70 72 65 70 61 72 65 20 69 74 0d 0a   re-prepare it..
9480: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
9490: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
94a0: 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 7b 0d  chema)..      {.
94b0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63 72  .        // Recr
94c0: 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74 61  eate a dummy sta
94d0: 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
94e0: 73 74 72 69 6e 67 20 73 74 72 20 3d 20 6e 75 6c  string str = nul
94f0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 75 73 69 6e  l;..        usin
9500: 67 20 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  g (SQLiteStateme
9510: 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61 72 65  nt tmp = Prepare
9520: 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c  (null, stmt._sql
9530: 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c  Statement, null,
9540: 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f   (uint)(stmt._co
9550: 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69  mmand._commandTi
9560: 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c 20 72  meout * 1000), r
9570: 65 66 20 73 74 72 29 29 0d 0a 20 20 20 20 20 20  ef str))..      
9580: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
9590: 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 65  / Finalize the e
95a0: 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  xisting statemen
95b0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d  t..          stm
95c0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2e 44  t._sqlite_stmt.D
95d0: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
95e0: 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69 67 6e       // Reassign
95f0: 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65 6e 74   a new statement
9600: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
9610: 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  old statement an
9620: 64 20 63 6c 65 61 72 20 74 68 65 20 74 65 6d 70  d clear the temp
9630: 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20 20 20  orary one..     
9640: 20 20 20 20 20 69 66 20 28 74 6d 70 20 21 3d 20       if (tmp != 
9650: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
9660: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9670: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9680: 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f  t = tmp._sqlite_
9690: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  stmt;..         
96a0: 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73     tmp._sqlite_s
96b0: 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  tmt = null;..   
96c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
96d0: 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79        // Reapply
96e0: 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20   parameters..   
96f0: 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64         stmt.Bind
9700: 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20  Parameters();.. 
9710: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9720: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
9730: 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77 6e  rrorCode.Unknown
9740: 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f  ; // Reset was O
9750: 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20 63  K, with schema c
9760: 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  hange..      }..
9770: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
9780: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
9790: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20  ode.Locked || n 
97a0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
97b0: 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20  de.Busy)..      
97c0: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20    return n;.... 
97d0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
97e0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
97f0: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
9800: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
9810: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
9820: 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
9830: 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f 20 57    return n; // W
9840: 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73  e reset OK, no s
9850: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20  chema changes.. 
9860: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
9870: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
9880: 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f  ring GetLastErro
9890: 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  r()..    {..    
98a0: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 4c 61      return GetLa
98b0: 73 74 45 72 72 6f 72 28 6e 75 6c 6c 29 3b 0d 0a  stError(null);..
98c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
98d0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
98e0: 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72  tring GetLastErr
98f0: 6f 72 28 73 74 72 69 6e 67 20 64 65 66 56 61 6c  or(string defVal
9900: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
9910: 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
9920: 74 20 3d 20 53 51 4c 69 74 65 42 61 73 65 2e 47  t = SQLiteBase.G
9930: 65 74 4c 61 73 74 45 72 72 6f 72 28 5f 73 71 6c  etLastError(_sql
9940: 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20  , _sql);..      
9950: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
9960: 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73 75 6c  ullOrEmpty(resul
9970: 74 29 29 20 72 65 73 75 6c 74 20 3d 20 64 65 66  t)) result = def
9980: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
9990: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
99a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
99b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9a10: 20 20 20 20 23 72 65 67 69 6f 6e 20 51 75 65 72      #region Quer
9a20: 79 20 44 69 61 67 6e 6f 73 74 69 63 73 20 53 75  y Diagnostics Su
9a30: 70 70 6f 72 74 0d 0a 23 69 66 20 21 50 4c 41 54  pport..#if !PLAT
9a40: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
9a50: 45 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  EWORK..    /// <
9a60: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9a70: 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20  / This field is 
9a80: 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74 72 61  used to keep tra
9a90: 63 6b 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ck of whether or
9aa0: 20 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20 2f 2f   not the..    //
9ab0: 2f 20 22 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c  / "SQLite_ForceL
9ac0: 6f 67 50 72 65 70 61 72 65 22 20 65 6e 76 69 72  ogPrepare" envir
9ad0: 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20  onment variable 
9ae0: 68 61 73 20 62 65 65 6e 20 71 75 65 72 69 65 64  has been queried
9af0: 2e 20 20 49 66 20 73 6f 2c 0d 0a 20 20 20 20 2f  .  If so,..    /
9b00: 2f 2f 20 69 74 20 77 69 6c 6c 20 6f 6e 6c 79 20  // it will only 
9b10: 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  be non-zero if t
9b20: 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  he environment v
9b30: 61 72 69 61 62 6c 65 20 77 61 73 20 70 72 65 73  ariable was pres
9b40: 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent...    /// </
9b50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
9b60: 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
9b70: 6c 3f 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61  l? forceLogPrepa
9b80: 72 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  re = null;....  
9b90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
9c00: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9c10: 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 61 6c  Determines if al
9c20: 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65 70 61  l calls to prepa
9c30: 72 65 20 61 20 53 51 4c 20 71 75 65 72 79 20 77  re a SQL query w
9c40: 69 6c 6c 20 62 65 20 6c 6f 67 67 65 64 2c 0d 0a  ill be logged,..
9c50: 20 20 20 20 2f 2f 2f 20 72 65 67 61 72 64 6c 65      /// regardle
9c60: 73 73 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20  ss of the flags 
9c70: 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74  for the associat
9c80: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  ed connection...
9c90: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9ca0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
9cb0: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
9cc0: 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6c 6f 67 20 61  on-zero to log a
9cd0: 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65 70  ll calls to prep
9ce0: 61 72 65 20 61 20 53 51 4c 20 71 75 65 72 79 2e  are a SQL query.
9cf0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
9d00: 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  rns>..    privat
9d10: 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f  e static bool Fo
9d20: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 0d  rceLogPrepare().
9d30: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
9d40: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
9d50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9d60: 20 20 20 20 20 20 20 20 69 66 20 28 66 6f 72 63          if (forc
9d70: 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 3d 20 6e  eLogPrepare == n
9d80: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9d90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9da0: 20 20 20 20 20 69 66 20 28 55 6e 73 61 66 65 4e       if (UnsafeN
9db0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74  ativeMethods.Get
9dc0: 53 65 74 74 69 6e 67 56 61 6c 75 65 28 0d 0a 20  SettingValue(.. 
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9de0: 20 20 20 20 20 20 20 22 53 51 4c 69 74 65 5f 46         "SQLite_F
9df0: 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 22 2c  orceLogPrepare",
9e00: 20 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c 6c 29 0d   null) != null).
9e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9e20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9e30: 20 20 20 20 20 20 20 20 66 6f 72 63 65 4c 6f 67          forceLog
9e40: 50 72 65 70 61 72 65 20 3d 20 74 72 75 65 3b 0d  Prepare = true;.
9e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9e60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9e70: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
9e80: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ea0: 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65   forceLogPrepare
9eb0: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
9ec0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9ed0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9ee0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9ef0: 6e 20 28 62 6f 6f 6c 29 66 6f 72 63 65 4c 6f 67  n (bool)forceLog
9f00: 50 72 65 70 61 72 65 3b 0d 0a 20 20 20 20 20 20  Prepare;..      
9f10: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64    }..    }..#end
9f20: 69 66 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  if..    #endregi
9f30: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9fa0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9fb0: 64 65 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  de SQLiteStateme
9fc0: 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c 69 74  nt Prepare(SQLit
9fd0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c  eConnection cnn,
9fe0: 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 20   string strSql, 
9ff0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
a000: 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74 20 74  previous, uint t
a010: 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20 73 74  imeoutMS, ref st
a020: 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e 29 0d  ring strRemain).
a030: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
a040: 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
a050: 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c 29 29  OrEmpty(strSql))
a060: 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c   strSql = strSql
a070: 2e 54 72 69 6d 28 29 3b 0d 0a 20 20 20 20 20 20  .Trim();..      
a080: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
a090: 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c  llOrEmpty(strSql
a0a0: 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ))..      {..   
a0b0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
a0c0: 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65   // NOTE: SQLite
a0d0: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
a0e0: 74 20 74 68 65 20 63 6f 6e 63 65 70 74 20 6f 66  t the concept of
a0f0: 20 73 65 70 61 72 61 74 65 20 73 63 68 65 6d 61   separate schema
a100: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  s..        //   
a110: 20 20 20 20 69 6e 20 6f 6e 65 20 64 61 74 61 62      in one datab
a120: 61 73 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  ase; therefore, 
a130: 72 65 6d 6f 76 65 20 74 68 65 20 62 61 73 65 20  remove the base 
a140: 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20  schema name..   
a150: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73       //       us
a160: 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74  ed to smooth int
a170: 65 67 72 61 74 69 6f 6e 20 77 69 74 68 20 74 68  egration with th
a180: 65 20 62 61 73 65 20 2e 4e 45 54 20 46 72 61 6d  e base .NET Fram
a190: 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f  ework..        /
a1a0: 2f 20 20 20 20 20 20 20 64 61 74 61 20 63 6c 61  /       data cla
a1b0: 73 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sses...        /
a1c0: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
a1d0: 67 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  g baseSchemaName
a1e0: 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29   = (cnn != null)
a1f0: 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65   ? cnn._baseSche
a200: 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a  maName : null;..
a210: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 53  ..        if (!S
a220: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
a230: 70 74 79 28 62 61 73 65 53 63 68 65 6d 61 4e 61  pty(baseSchemaNa
a240: 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  me))..        {.
a250: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71  .          strSq
a260: 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61  l = strSql.Repla
a270: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
a280: 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73     HelperMethods
a290: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75  .StringFormat(Cu
a2a0: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
a2b0: 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  antCulture,..   
a2c0: 20 20 20 20 20 20 20 20 20 20 20 22 5b 7b 30 7d             "[{0}
a2d0: 5d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e  ].", baseSchemaN
a2e0: 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70  ame), String.Emp
a2f0: 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
a300: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
a310: 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20  l.Replace(..    
a320: 20 20 20 20 20 20 20 20 20 20 48 65 6c 70 65 72            Helper
a330: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
a340: 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f  rmat(CultureInfo
a350: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
a360: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
a370: 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63    "{0}.", baseSc
a380: 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e  hemaName), Strin
a390: 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20  g.Empty);..     
a3a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
a3b0: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
a3c0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
a3d0: 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  gs =..          
a3e0: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
a3f0: 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69  cnn.Flags : SQLi
a400: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
a410: 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20  s.Default;....  
a420: 20 20 20 20 69 66 20 28 0d 0a 23 69 66 20 21 50      if (..#if !P
a430: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
a440: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
a450: 20 20 20 20 46 6f 72 63 65 4c 6f 67 50 72 65 70      ForceLogPrep
a460: 61 72 65 28 29 20 7c 7c 0d 0a 23 65 6e 64 69 66  are() ||..#endif
a470: 0d 0a 20 20 20 20 20 20 20 20 20 20 28 28 66 6c  ..          ((fl
a480: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
a490: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50  ectionFlags.LogP
a4a0: 72 65 70 61 72 65 29 20 3d 3d 20 53 51 4c 69 74  repare) == SQLit
a4b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
a4c0: 2e 4c 6f 67 50 72 65 70 61 72 65 29 29 0d 0a 20  .LogPrepare)).. 
a4d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a4e0: 20 20 69 66 20 28 28 73 74 72 53 71 6c 20 3d 3d    if ((strSql ==
a4f0: 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53 71   null) || (strSq
a500: 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20 7c  l.Length == 0) |
a510: 7c 20 28 73 74 72 53 71 6c 2e 54 72 69 6d 28 29  | (strSql.Trim()
a520: 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a  .Length == 0))..
a530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
a540: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
a550: 67 65 28 22 50 72 65 70 61 72 69 6e 67 20 7b 3c  ge("Preparing {<
a560: 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d  nothing>}...");.
a570: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d  .          else.
a580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
a590: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
a5a0: 61 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  age(HelperMethod
a5b0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
a5c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a5d0: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
a5e0: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 20 22  urrentCulture, "
a5f0: 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d  Preparing {{{0}}
a600: 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29 29 3b  }...", strSql));
a610: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
a620: 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74 20 3d     IntPtr stmt =
a630: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
a640: 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20       IntPtr ptr 
a650: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
a660: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
a670: 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  0;..      SQLite
a680: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53 51  ErrorCode n = SQ
a690: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63  LiteErrorCode.Sc
a6a0: 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69 6e 74  hema;..      int
a6b0: 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20   retries = 0;.. 
a6c0: 20 20 20 20 20 69 6e 74 20 6d 61 78 69 6d 75 6d       int maximum
a6d0: 52 65 74 72 69 65 73 20 3d 20 28 63 6e 6e 20 21  Retries = (cnn !
a6e0: 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 70  = null) ? cnn._p
a6f0: 72 65 70 61 72 65 52 65 74 72 69 65 73 20 3a 20  repareRetries : 
a700: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
a710: 2e 44 65 66 61 75 6c 74 50 72 65 70 61 72 65 52  .DefaultPrepareR
a720: 65 74 72 69 65 73 3b 0d 0a 20 20 20 20 20 20 62  etries;..      b
a730: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
a740: 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20 20 20  (strSql);..     
a750: 20 73 74 72 69 6e 67 20 74 79 70 65 64 65 66 73   string typedefs
a760: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
a770: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
a780: 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  cmd = null;..   
a790: 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20     Random rnd = 
a7a0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e  null;..      uin
a7b0: 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75  t starttick = (u
a7c0: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
a7d0: 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  TickCount;....  
a7e0: 20 20 20 20 52 65 73 65 74 43 61 6e 63 65 6c 43      ResetCancelC
a7f0: 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ount();....     
a800: 20 47 43 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65   GCHandle handle
a810: 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f   = GCHandle.Allo
a820: 63 28 62 2c 20 47 43 48 61 6e 64 6c 65 54 79 70  c(b, GCHandleTyp
a830: 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20 20 20  e.Pinned);..    
a840: 20 20 49 6e 74 50 74 72 20 70 73 71 6c 20 3d 20    IntPtr psql = 
a850: 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50 69 6e  handle.AddrOfPin
a860: 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a 20 20  nedObject();..  
a870: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
a880: 65 6e 74 48 61 6e 64 6c 65 20 73 74 61 74 65 6d  entHandle statem
a890: 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c  entHandle = null
a8a0: 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20 20  ;..      try..  
a8b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 77      {..        w
a8c0: 68 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51 4c 69  hile ((n == SQLi
a8d0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65  teErrorCode.Sche
a8e0: 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74  ma || n == SQLit
a8f0: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
a900: 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  d || n == SQLite
a910: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20  ErrorCode.Busy) 
a920: 26 26 20 72 65 74 72 69 65 73 20 3c 20 6d 61 78  && retries < max
a930: 69 6d 75 6d 52 65 74 72 69 65 73 29 0d 0a 20 20  imumRetries)..  
a940: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a950: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
a960: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a970: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
a980: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
a990: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20          finally 
a9a0: 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
a9b0: 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
a9c0: 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  on. */..        
a9d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a9e0: 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a   stmt = IntPtr.Z
a9f0: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
aa00: 20 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a    ptr = IntPtr.Z
aa10: 65 72 6f 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  ero;....#if !SQL
aa20: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
aa30: 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20            len = 
aa40: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
aa50: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
aa60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
aa70: 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  prepare_interop(
aa80: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
aa90: 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20 73 74  ngth - 1, ref st
aaa0: 6d 74 2c 20 72 65 66 20 70 74 72 2c 20 72 65 66  mt, ref ptr, ref
aab0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23   len);..#else..#
aac0: 69 66 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56  if USE_PREPARE_V
aad0: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  2..            n
aae0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
aaf0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70  ethods.sqlite3_p
ab00: 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c 20  repare_v2(_sql, 
ab10: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
ab20: 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65   1, ref stmt, re
ab30: 66 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a  f ptr);..#else..
ab40: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
ab50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ab60: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70  ods.sqlite3_prep
ab70: 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20  are(_sql, psql, 
ab80: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65  b.Length - 1, re
ab90: 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72 29  f stmt, ref ptr)
aba0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
abb0: 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b         len = -1;
abc0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
abd0: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
abe0: 26 26 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45  && TRACE_STATEME
abf0: 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  NT..            
ac00: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
ac10: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
ac20: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
ac30: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
ac40: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
ac50: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
ac60: 20 20 20 20 20 20 20 20 20 20 22 50 72 65 70 61            "Prepa
ac70: 72 65 20 28 7b 30 7d 29 3a 20 7b 31 7d 22 2c 20  re ({0}): {1}", 
ac80: 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65 6e 64  n, stmt));..#end
ac90: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
aca0: 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69    if ((n == SQLi
acb0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
acc0: 26 26 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50  && (stmt != IntP
acd0: 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20  tr.Zero))..     
ace0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
acf0: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 74          if (stat
ad00: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e  ementHandle != n
ad10: 75 6c 6c 29 20 73 74 61 74 65 6d 65 6e 74 48 61  ull) statementHa
ad20: 6e 64 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d  ndle.Dispose();.
ad30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
ad40: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d  tatementHandle =
ad50: 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65   new SQLiteState
ad60: 6d 65 6e 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c  mentHandle(_sql,
ad70: 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20   stmt);..       
ad80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ad90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
ada0: 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61   if (statementHa
adb0: 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle != null).. 
adc0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
add0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
ade0: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
adf0: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
ae00: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
ae10: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ae20: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
ae30: 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 43 72  nEventType.NewCr
ae40: 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75  iticalHandle, nu
ae50: 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ll, null,..     
ae60: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e           null, n
ae70: 75 6c 6c 2c 20 73 74 61 74 65 6d 65 6e 74 48 61  ull, statementHa
ae80: 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2c 20 6e 65  ndle, strSql, ne
ae90: 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20  w object[] {..  
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
aeb0: 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 63 6e 6e  of(SQLite3), cnn
aec0: 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f  , strSql, previo
aed0: 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 20 7d 29  us, timeoutMS })
aee0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
aef0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
af00: 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72 43  (ShouldThrowForC
af10: 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20 20  ancel())..      
af20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
af30: 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53       if ((n == S
af40: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
af50: 6b 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  k) ||..         
af60: 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20 53           (n == S
af70: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52  QLiteErrorCode.R
af80: 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  ow) ||..        
af90: 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20            (n == 
afa0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
afb0: 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Done))..        
afc0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
afd0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 53             n = S
afe0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49  QLiteErrorCode.I
aff0: 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20 20 20 20  nterrupt;..     
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 74 68 72 6f              thro
b020: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
b030: 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d  ption(n, null);.
b040: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
b050: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
b060: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
b070: 64 65 2e 49 6e 74 65 72 72 75 70 74 29 0d 0a 20  de.Interrupt).. 
b080: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
b090: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ;..          els
b0a0: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
b0b0: 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d  eErrorCode.Schem
b0c0: 61 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a)..            
b0d0: 72 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20  retries++;..    
b0e0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
b0f0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
b100: 6f 64 65 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20  ode.Error)..    
b110: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b120: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
b130: 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45  Compare(GetLastE
b140: 72 72 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c 22  rror(), "near \"
b150: 54 59 50 45 53 5c 22 3a 20 73 79 6e 74 61 78 20  TYPES\": syntax 
b160: 65 72 72 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f  error", StringCo
b170: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
b180: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
b190: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b1b0: 69 6e 74 20 70 6f 73 20 3d 20 73 74 72 53 71 6c  int pos = strSql
b1c0: 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a  .IndexOf(';');..
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b1e0: 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73   (pos == -1) pos
b1f0: 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68   = strSql.Length
b200: 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   - 1;....       
b210: 20 20 20 20 20 20 20 74 79 70 65 64 65 66 73 20         typedefs 
b220: 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69  = strSql.Substri
b230: 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d  ng(0, pos + 1);.
b240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
b250: 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53  trSql = strSql.S
b260: 75 62 73 74 72 69 6e 67 28 70 6f 73 20 2b 20 31  ubstring(pos + 1
b270: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
b280: 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20      strRemain = 
b290: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d  String.Empty;...
b2a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77  .              w
b2b0: 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c  hile (cmd == nul
b2c0: 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67  l && strSql.Leng
b2d0: 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  th > 0)..       
b2e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b2f0: 20 20 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20            cmd = 
b300: 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72  Prepare(cnn, str
b310: 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74  Sql, previous, t
b320: 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20 73 74  imeoutMS, ref st
b330: 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20  rRemain);..     
b340: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71             strSq
b350: 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a  l = strRemain;..
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
b370: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b380: 20 69 66 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c   if (cmd != null
b390: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b3a0: 20 20 20 63 6d 64 2e 53 65 74 54 79 70 65 73 28     cmd.SetTypes(
b3b0: 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20  typedefs);....  
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b3d0: 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20  rn cmd;..       
b3e0: 20 20 20 20 20 7d 0d 0a 23 69 66 20 28 4e 45 54       }..#if (NET
b3f0: 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c  _35 || NET_40 ||
b400: 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34   NET_45 || NET_4
b410: 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c  51 || NET_452 ||
b420: 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34   NET_46 || NET_4
b430: 36 31 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d  61) && !PLATFORM
b440: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
b450: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  K..            e
b460: 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e  lse if (_buildin
b470: 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65  gSchema == false
b480: 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61   && String.Compa
b490: 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28  re(GetLastError(
b4a0: 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68 20 74  ), 0, "no such t
b4b0: 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d  able: TEMP.SCHEM
b4c0: 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72 69 6e  A", 0, 26, Strin
b4d0: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
b4e0: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
b4f0: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
b500: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b510: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 53     strRemain = S
b520: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20  tring.Empty;..  
b530: 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69              _bui
b540: 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72  ldingSchema = tr
b550: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
b560: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
b570: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b580: 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65           ISQLite
b590: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
b5a0: 20 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63   ext = ((IServic
b5b0: 65 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65  eProvider)SQLite
b5c0: 46 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65  Factory.Instance
b5d0: 29 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  ).GetService(typ
b5e0: 65 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d  eof(ISQLiteSchem
b5f0: 61 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73  aExtensions)) as
b600: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
b610: 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20  tensions;....   
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b630: 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  (ext != null).. 
b640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b650: 20 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63   ext.BuildTempSc
b660: 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20  hema(cnn);....  
b670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
b680: 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c  ile (cmd == null
b690: 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74   && strSql.Lengt
b6a0: 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  h > 0)..        
b6b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
b6d0: 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20   = Prepare(cnn, 
b6e0: 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73  strSql, previous
b6f0: 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66  , timeoutMS, ref
b700: 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20   strRemain);..  
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b720: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
b730: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
b740: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b750: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b760: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20   cmd;..         
b770: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b780: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
b790: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7b0: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
b7c0: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
b7d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b7e0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
b7f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
b800: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
b810: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
b820: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
b830: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
b840: 72 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c  rCode.Busy) // L
b850: 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61  ocked -- delay a
b860: 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65   small amount be
b870: 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20  fore retrying.. 
b880: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b890: 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20          // Keep 
b8a0: 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  trying..        
b8b0: 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e      if (rnd == n
b8c0: 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69  ull) // First ti
b8d0: 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74  me we've encount
b8e0: 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20  ered the lock.. 
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64               rnd
b900: 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b   = new Random();
b910: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b920: 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65  // If we've exce
b930: 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64  eded the command
b940: 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65  's timeout, give
b950: 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e   up and throw an
b960: 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
b970: 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e      if ((uint)En
b980: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
b990: 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20  unt - starttick 
b9a0: 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20  > timeoutMS)..  
b9b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b9c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
b9d0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
b9e0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
b9f0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
ba00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ba10: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
ba20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ba30: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
ba40: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
ba50: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
ba60: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
ba70: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
ba80: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
ba90: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
baa0: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
bab0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
bac0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
bad0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
bae0: 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54       if (ShouldT
baf0: 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29  hrowForCancel())
bb00: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
bb10: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20           if ((n 
bb20: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
bb30: 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20  de.Ok) ||..     
bb40: 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d             (n ==
bb50: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
bb60: 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20  .Row) ||..      
bb70: 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20            (n == 
bb80: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
bb90: 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Done))..        
bba0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bbb0: 20 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69 74         n = SQLit
bbc0: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
bbd0: 72 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rupt;..         
bbe0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
bbf0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
bc00: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
bc10: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
bc20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
bc30: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
bc40: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
bc50: 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a  ) return null;..
bc60: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
bc70: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
bc80: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
bc90: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
bca0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
bcb0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74  );....        st
bcc0: 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f  rRemain = UTF8To
bcd0: 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29  String(ptr, len)
bce0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
bcf0: 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  (statementHandle
bd00: 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64 20 3d 20   != null) cmd = 
bd10: 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d  new SQLiteStatem
bd20: 65 6e 74 28 74 68 69 73 2c 20 66 6c 61 67 73 2c  ent(this, flags,
bd30: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
bd40: 2c 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69  , strSql.Substri
bd50: 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e  ng(0, strSql.Len
bd60: 67 74 68 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e  gth - strRemain.
bd70: 4c 65 6e 67 74 68 29 2c 20 70 72 65 76 69 6f 75  Length), previou
bd80: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  s);....        r
bd90: 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20  eturn cmd;..    
bda0: 20 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c    }..      final
bdb0: 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ly..      {..   
bdc0: 20 20 20 20 20 68 61 6e 64 6c 65 2e 46 72 65 65       handle.Free
bdd0: 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ();..      }..  
bde0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
bdf0: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
be00: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
be10: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
be20: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
be30: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
be40: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
be50: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
be60: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
be70: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
be80: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
be90: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
bea0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
beb0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
bec0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
bed0: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
bee0: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
bef0: 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e  r #{1} as NULL..
bf00: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
bf10: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
bf20: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ndex));..    }..
bf30: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
bf40: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
bf50: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
bf60: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
bf70: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c  , int index, Val
bf80: 75 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20  ueType value).. 
bf90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
bfa0: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
bfb0: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
bfc0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
bfd0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70  .LogMessage(Help
bfe0: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
bff0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
c000: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
c010: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
c020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
c030: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
c040: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
c050: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
c060: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
c070: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
c080: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
c090: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 2e 47  , index, value.G
c0a0: 65 74 54 79 70 65 28 29 2c 20 76 61 6c 75 65 29  etType(), value)
c0b0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
c0c0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
c0d0: 73 74 72 69 6e 67 20 46 6f 72 6d 61 74 44 61 74  string FormatDat
c0e0: 65 54 69 6d 65 28 44 61 74 65 54 69 6d 65 20 76  eTime(DateTime v
c0f0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
c100: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
c110: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
c120: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29   StringBuilder()
c130: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 73  ;....        res
c140: 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65  ult.Append(value
c150: 2e 54 6f 53 74 72 69 6e 67 28 22 79 79 79 79 2d  .ToString("yyyy-
c160: 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46  MM-ddTHH:mm:ss.F
c170: 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20 20 20  FFFFFFK"));..   
c180: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
c190: 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20  nd(' ');..      
c1a0: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
c1b0: 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20  value.Kind);..  
c1c0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
c1d0: 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20  end(' ');..     
c1e0: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
c1f0: 28 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b 0d 0a  (value.Ticks);..
c200: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
c210: 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67   result.ToString
c220: 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ();..    }....  
c230: 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74    protected stat
c240: 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28  ic void LogBind(
c250: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
c260: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e  andle handle, in
c270: 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d  t index, DateTim
c280: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
c290: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
c2a0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
c2b0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
c2c0: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
c2d0: 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74  essage(HelperMet
c2e0: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
c2f0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
c300: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
c310: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
c320: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
c330: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
c340: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
c350: 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76   type {2} with v
c360: 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22  alue {{{3}}}..."
c370: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
c380: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
c390: 65 78 2c 20 74 79 70 65 6f 66 28 44 61 74 65 54  ex, typeof(DateT
c3a0: 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61 74 65  ime), FormatDate
c3b0: 54 69 6d 65 28 76 61 6c 75 65 29 29 29 3b 0d 0a  Time(value)));..
c3c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
c3d0: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
c3e0: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
c3f0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
c400: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
c410: 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ex, string value
c420: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
c430: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
c440: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
c450: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
c460: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
c470: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
c480: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
c490: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
c4a0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
c4b0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
c4c0: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
c4d0: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
c4e0: 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b  r #{1} as type {
c4f0: 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b  2} with value {{
c500: 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20  {3}}}...",..    
c510: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
c520: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70  tPtr, index, typ
c530: 65 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76 61  eof(String), (va
c540: 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76  lue != null) ? v
c550: 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29  alue : "<null>")
c560: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
c570: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
c580: 73 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65 63  string ToHexadec
c590: 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20  imalString(..   
c5a0: 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61       byte[] arra
c5b0: 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  y..        )..  
c5c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
c5d0: 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d  (array == null).
c5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
c5f0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
c600: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
c610: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
c620: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61 72  StringBuilder(ar
c630: 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b  ray.Length * 2);
c640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ....        int 
c650: 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e 4c  length = array.L
c660: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
c670: 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
c680: 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65   = 0; index < le
c690: 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ngth; index++)..
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
c6b0: 6c 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79 5b  lt.Append(array[
c6c0: 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28  index].ToString(
c6d0: 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  "x2"));....     
c6e0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
c6f0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
c700: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
c710: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
c720: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
c730: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
c740: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
c750: 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d  , byte[] value).
c760: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
c770: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
c780: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
c790: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
c7a0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65  og.LogMessage(He
c7b0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
c7c0: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
c7d0: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
c7e0: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
c7f0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
c800: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
c810: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
c820: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
c830: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
c840: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
c850: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
c860: 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f  tr, index, typeo
c870: 66 28 42 79 74 65 5b 5d 29 2c 20 28 76 61 6c 75  f(Byte[]), (valu
c880: 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 48  e != null) ? ToH
c890: 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67  exadecimalString
c8a0: 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e 75 6c 6c  (value) : "<null
c8b0: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
c8c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
c8d0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
c8e0: 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61  Double(SQLiteSta
c8f0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
c900: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
c910: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
c920: 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75  dex, double valu
c930: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
c940: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
c950: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
c960: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
c970: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
c980: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
c990: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
c9a0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
c9b0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
c9c0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
c9d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c9e0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
c9f0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
ca00: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
ca10: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
ca20: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
ca30: 4b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  K..        SQLit
ca40: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
ca50: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ca60: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
ca70: 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69  double(handle, i
ca80: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
ca90: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
caa0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
cab0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
cac0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
cad0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
cae0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
caf0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
cb00: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
cb10: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
cb20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
cb30: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69  e3_bind_double_i
cb40: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
cb50: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
cb60: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
cb70: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
cb80: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
cb90: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
cba0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
cbb0: 72 28 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  r());..#else..  
cbc0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
cbd0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
cbe0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
cbf0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
cc00: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
cc10: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74  de void Bind_Int
cc20: 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  32(SQLiteStateme
cc30: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
cc40: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
cc50: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
cc60: 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20   int value)..   
cc70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
cc80: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
cc90: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
cca0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
ccb0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
ccc0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
ccd0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
cce0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
ccf0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
cd00: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
cd10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
cd20: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
cd30: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
cd40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
cd50: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
cd60: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
cd70: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
cd80: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e  te3_bind_int(han
cd90: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
cda0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
cdb0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
cdc0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
cdd0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
cde0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
cdf0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
ce00: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ce10: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
ce20: 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53  d_UInt32(SQLiteS
ce30: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
ce40: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
ce50: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
ce60: 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61 6c 75  index, uint valu
ce70: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
ce80: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
ce90: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
cea0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
ceb0: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
cec0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
ced0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
cee0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
cef0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
cf00: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
cf10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
cf20: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
cf30: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
cf40: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
cf50: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
cf60: 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d  eErrorCode n;...
cf70: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
cf80: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
cf90: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64  ectionFlags.Bind
cfa0: 55 49 6e 74 33 32 41 73 49 6e 74 36 34 29 20 3d  UInt32AsInt64) =
cfb0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
cfc0: 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74  onFlags.BindUInt
cfd0: 33 32 41 73 49 6e 74 36 34 29 0d 0a 20 20 20 20  32AsInt64)..    
cfe0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
cff0: 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 32 20 3d     long value2 =
d000: 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20 21   value;....#if !
d010: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
d020: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
d030: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
d040: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d050: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
d060: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
d070: 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 69 66   value2);..#elif
d080: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
d090: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  D..            n
d0a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
d0b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
d0c0: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
d0d0: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
d0e0: 20 72 65 66 20 76 61 6c 75 65 32 29 3b 0d 0a 23   ref value2);..#
d0f0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
d100: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
d110: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
d120: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
d130: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d140: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
d150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d160: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
d170: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d180: 62 69 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c 65  bind_uint(handle
d190: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
d1a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
d1b0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
d1c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
d1d0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
d1e0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
d1f0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
d200: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
d210: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
d220: 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36 34 28  void Bind_Int64(
d230: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
d240: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
d250: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
d260: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f  s, int index, lo
d270: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
d280: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d290: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
d2a0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
d2b0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
d2c0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
d2d0: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
d2e0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
d2f0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
d300: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
d310: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
d320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
d330: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
d340: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
d350: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50       }....#if !P
d360: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
d370: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
d380: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
d390: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
d3a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d3b0: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e  3_bind_int64(han
d3c0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
d3d0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
d3e0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
d3f0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
d400: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
d410: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
d420: 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69 66 20 21  ror());..#elif !
d430: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
d440: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
d450: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
d460: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d470: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
d480: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
d490: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
d4a0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
d4b0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
d4c0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
d4d0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
d4e0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
d4f0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 73  tError());..#els
d500: 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  e..        throw
d510: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
d520: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
d530: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
d540: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d550: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
d560: 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53  d_UInt64(SQLiteS
d570: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
d580: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
d590: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
d5a0: 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20 76 61 6c  index, ulong val
d5b0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
d5c0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
d5d0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
d5e0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
d5f0: 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  stmt;....       
d600: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
d610: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
d620: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
d630: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d640: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
d650: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d660: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
d670: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
d680: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lue);..        }
d690: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
d6a0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
d6b0: 52 4b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RK..        SQLi
d6c0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
d6d0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d6e0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
d6f0: 5f 75 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  _uint64(handle, 
d700: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
d710: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
d720: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d730: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
d740: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
d750: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
d760: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
d770: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
d780: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
d790: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
d7a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d7b0: 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 5f  te3_bind_uint64_
d7c0: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
d7d0: 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65  index, ref value
d7e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
d7f0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
d800: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
d810: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
d820: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
d830: 6f 72 28 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  or());..#else.. 
d840: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
d850: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
d860: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
d870: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
d880: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
d890: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 42 6f  ide void Bind_Bo
d8a0: 6f 6c 65 61 6e 28 53 51 4c 69 74 65 53 74 61 74  olean(SQLiteStat
d8b0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
d8c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
d8d0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
d8e0: 65 78 2c 20 62 6f 6f 6c 20 76 61 6c 75 65 29 0d  ex, bool value).
d8f0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
d900: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
d910: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
d920: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
d930: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
d940: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
d950: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
d960: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
d970: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
d980: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
d990: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d9a0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
d9b0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
d9c0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
d9d0: 20 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c 75          int valu
d9e0: 65 32 20 3d 20 76 61 6c 75 65 20 3f 20 31 20 3a  e2 = value ? 1 :
d9f0: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53   0;....        S
da00: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
da10: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
da20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
da30: 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c 20  ind_int(handle, 
da40: 69 6e 64 65 78 2c 20 76 61 6c 75 65 32 29 3b 0d  index, value2);.
da50: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
da60: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
da70: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
da80: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
da90: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
daa0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
dab0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
dac0: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 54 65  ide void Bind_Te
dad0: 78 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  xt(SQLiteStateme
dae0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
daf0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
db00: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
db10: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a   string value)..
db20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
db30: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
db40: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
db50: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
db60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
db70: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
db80: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
db90: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
dba0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
dbb0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
dbc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
dbd0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
dbe0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
dbf0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
dc00: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20         byte[] b 
dc10: 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b  = ToUTF8(value);
dc20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
dc30: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
dc40: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
dc50: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
dc60: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
dc70: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
dc80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
dc90: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
dca0: 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20  , index, b);..  
dcb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
dcc0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
dcd0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
dce0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
dcf0: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61 6e  e3_bind_text(han
dd00: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62  dle, index, b, b
dd10: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e  .Length - 1, (In
dd20: 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20  tPtr)(-1));..   
dd30: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
dd40: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
dd50: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
dd60: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
dd70: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
dd80: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
dd90: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
dda0: 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65 54 69  void Bind_DateTi
ddb0: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
ddc0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
ddd0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
dde0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
ddf0: 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d 0a 20   DateTime dt).. 
de00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
de10: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
de20: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
de30: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
de40: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
de50: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
de60: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
de70: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
de80: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
de90: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
dea0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
deb0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
dec0: 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20 20   index, dt);..  
ded0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
dee0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
def0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
df00: 46 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69  Flags.BindDateTi
df10: 6d 65 57 69 74 68 4b 69 6e 64 29 20 3d 3d 20 53  meWithKind) == S
df20: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
df30: 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69 6d  lags.BindDateTim
df40: 65 57 69 74 68 4b 69 6e 64 29 0d 0a 20 20 20 20  eWithKind)..    
df50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
df60: 20 20 20 69 66 20 28 28 5f 64 61 74 65 74 69 6d     if ((_datetim
df70: 65 4b 69 6e 64 20 21 3d 20 44 61 74 65 54 69 6d  eKind != DateTim
df80: 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65  eKind.Unspecifie
df90: 64 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  d) &&..         
dfa0: 20 20 20 20 20 20 20 28 64 74 2e 4b 69 6e 64 20         (dt.Kind 
dfb0: 21 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  != DateTimeKind.
dfc0: 55 6e 73 70 65 63 69 66 69 65 64 29 20 26 26 0d  Unspecified) &&.
dfd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dfe0: 20 28 64 74 2e 4b 69 6e 64 20 21 3d 20 5f 64 61   (dt.Kind != _da
dff0: 74 65 74 69 6d 65 4b 69 6e 64 29 29 0d 0a 20 20  tetimeKind))..  
e000: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e010: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e020: 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d  (_datetimeKind =
e030: 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55  = DateTimeKind.U
e040: 74 63 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tc)..           
e050: 20 20 20 20 20 20 20 20 20 64 74 20 3d 20 64 74           dt = dt
e060: 2e 54 6f 55 6e 69 76 65 72 73 61 6c 54 69 6d 65  .ToUniversalTime
e070: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
e080: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64       else if (_d
e090: 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d 20 44  atetimeKind == D
e0a0: 61 74 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f 63 61  ateTimeKind.Loca
e0b0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
e0c0: 20 20 20 20 20 20 20 20 64 74 20 3d 20 64 74 2e          dt = dt.
e0d0: 54 6f 4c 6f 63 61 6c 54 69 6d 65 28 29 3b 0d 0a  ToLocalTime();..
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
e0f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e100: 20 20 20 20 73 77 69 74 63 68 20 28 5f 64 61 74      switch (_dat
e110: 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a 20 20  etimeFormat)..  
e120: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e130: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
e140: 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b  DateFormats.Tick
e150: 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s:..            
e160: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e170: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
e180: 76 61 6c 75 65 20 3d 20 64 74 2e 54 69 63 6b 73  value = dt.Ticks
e190: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e1a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
e1b0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
e1c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
e1d0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
e1e0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
e1f0: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
e200: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e220: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
e230: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
e240: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
e250: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e260: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
e270: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
e280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e290: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
e2a0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
e2b0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
e2c0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68  te3_bind_int64(h
e2d0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
e2e0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
e2f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
e300: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
e310: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
e320: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
e330: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
e340: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
e350: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
e360: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
e370: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
e380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
e390: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
e3a0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
e3b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
e3c0: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
e3d0: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
e3e0: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
e3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e400: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
e410: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
e420: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
e430: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
e440: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e460: 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d    break;..#else.
e470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e480: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
e490: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
e4a0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
e4b0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
e4c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
e4d0: 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74    case SQLiteDat
e4e0: 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44  eFormats.JulianD
e4f0: 61 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay:..           
e500: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e510: 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62              doub
e520: 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c  le value = ToJul
e530: 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 20  ianDay(dt);.... 
e540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e550: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
e560: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e570: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
e580: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
e590: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
e5a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e5b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5d0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
e5e0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
e5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e600: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50       }....#if !P
e610: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
e620: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
e640: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
e650: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
e660: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
e670: 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65  nd_double(handle
e680: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
e690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e6a0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
e6b0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
e6c0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
e6d0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
e6e0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
e6f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e700: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65        break;..#e
e710: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
e720: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
e730: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
e740: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
e750: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e760: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
e770: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61  ouble_interop(ha
e780: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
e790: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
e7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e7b0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
e7c0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
e7d0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
e7e0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
e7f0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
e800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
e810: 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  eak;..#else..   
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e830: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
e840: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
e850: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
e870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
e880: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
e890: 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a 0d  mats.UnixEpoch:.
e8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e8b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e8c0: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c          long val
e8d0: 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  ue = Convert.ToI
e8e0: 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61 63 74  nt64(dt.Subtract
e8f0: 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74 61  (UnixEpoch).Tota
e900: 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 20 20  lSeconds);....  
e910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e920: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
e930: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e940: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
e950: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e960: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
e970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e980: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9a0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
e9b0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
e9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9d0: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c      }....#if !PL
e9e0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
e9f0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
ea10: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
ea20: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ea30: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
ea40: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
ea50: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
ea60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea70: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
ea80: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
ea90: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
eaa0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
eab0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
eac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ead0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 69      break;..#eli
eae0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
eaf0: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
eb00: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
eb10: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
eb20: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
eb30: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
eb40: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
eb50: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
eb60: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
eb70: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
eb80: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
eb90: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
eba0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
ebb0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
ebc0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
ebd0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
ebe0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
ec00: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
ec10: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
ec20: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ec40: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
ec50: 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt:..           
ec60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ec70: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
ec80: 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74  [] b = ToUTF8(dt
ec90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
eca0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
ecb0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
ecc0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
ecd0: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
ece0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
ecf0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
ed00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed20: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
ed30: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
ed40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
ed50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ed60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed70: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ed80: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
ed90: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
eda0: 5f 62 69 6e 64 5f 74 65 78 74 28 68 61 6e 64 6c  _bind_text(handl
edb0: 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20 62 2e 4c  e, index, b, b.L
edc0: 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50  ength - 1, (IntP
edd0: 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20  tr)(-1));..     
ede0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
edf0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
ee00: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
ee10: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
ee20: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
ee30: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
ee40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
ee50: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
ee60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ee70: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
ee80: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
ee90: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c  ide void Bind_Bl
eea0: 6f 62 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ob(SQLiteStateme
eeb0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
eec0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
eed0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
eee0: 20 62 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61   byte[] blobData
eef0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
ef00: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
ef10: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
ef20: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
ef30: 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  mt;....        i
ef40: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
ef50: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
ef60: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
ef70: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
ef80: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
ef90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
efa0: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
efb0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62  dle, index, blob
efc0: 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20  Data);..        
efd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
efe0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
eff0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f000: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
f010: 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69  d_blob(handle, i
f020: 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20  ndex, blobData, 
f030: 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c  blobData.Length,
f040: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
f050: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
f060: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
f070: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
f080: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
f090: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
f0a0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
f0b0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
f0c0: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75  ide void Bind_Nu
f0d0: 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
f0e0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
f0f0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
f100: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29  lags, int index)
f110: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
f120: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
f130: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
f140: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
f150: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  t;....        if
f160: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
f170: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
f180: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
f190: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
f1a0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
f1b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f1c0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
f1d0: 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  le, index);..   
f1e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f1f0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
f200: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
f210: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
f220: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64  3_bind_null(hand
f230: 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  le, index);..   
f240: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
f250: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
f260: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
f270: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
f280: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
f290: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
f2a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
f2b0: 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f  int Bind_ParamCo
f2c0: 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  unt(SQLiteStatem
f2d0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
f2e0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
f2f0: 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20  flags)..    {.. 
f300: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
f310: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
f320: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
f330: 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20  te_stmt;..      
f340: 20 20 69 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e    int value = Un
f350: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f360: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  s.sqlite3_bind_p
f370: 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68  arameter_count(h
f380: 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  andle);....     
f390: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
f3a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f3b0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
f3c0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
f3d0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
f3e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
f3f0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
f400: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
f410: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
f420: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
f430: 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65  LogMessage(Helpe
f440: 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
f450: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
f460: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
f470: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
f480: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
f490: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
f4a0: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f 75  {0} paramter cou
f4b0: 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20 20  nt is {1}.",..  
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
f4d0: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c 75  ndleIntPtr, valu
f4e0: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e));..        }.
f4f0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
f500: 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d 0d  n value;..    }.
f510: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
f520: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
f530: 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28 53  Bind_ParamName(S
f540: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
f550: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
f560: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
f570: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
f580: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
f590: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
f5a0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
f5b0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
f5c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
f5d0: 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  ame;....#if !SQL
f5e0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
f5f0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
f600: 30 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65  0;..        name
f610: 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
f620: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f630: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
f640: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f  _parameter_name_
f650: 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20  interop(handle, 
f660: 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c  index, ref len),
f670: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
f680: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55 54         name = UT
f690: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
f6a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f6b0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
f6c0: 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64 6c  meter_name(handl
f6d0: 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  e, index), -1);.
f6e0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
f6f0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
f700: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f710: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
f720: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
f730: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
f740: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
f750: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
f760: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
f770: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
f780: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
f790: 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65  LogMessage(Helpe
f7a0: 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
f7b0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
f7c0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
f7d0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
f7e0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
f7f0: 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20       "Statement 
f800: 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31  {0} paramter #{1
f810: 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d  } name is {{{2}}
f820: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
f830: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
f840: 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29  tr, index, name)
f850: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
f860: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
f870: 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  name;..    }....
f880: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
f890: 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f 50  rride int Bind_P
f8a0: 61 72 61 6d 49 6e 64 65 78 28 53 51 4c 69 74 65  aramIndex(SQLite
f8b0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
f8c0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f8d0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 73 74 72  Flags flags, str
f8e0: 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a  ing paramName)..
f8f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
f900: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
f910: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
f920: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
f930: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e  ..        int in
f940: 64 65 78 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  dex = UnsafeNati
f950: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
f960: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
f970: 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65 2c 20 54  _index(handle, T
f980: 6f 55 54 46 38 28 70 61 72 61 6d 4e 61 6d 65 29  oUTF8(paramName)
f990: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
f9a0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
f9b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
f9c0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
f9d0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
f9e0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
f9f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fa00: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
fa10: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
fa20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fa30: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
fa40: 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74 68  ssage(HelperMeth
fa50: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
fa60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
fa70: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
fa80: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
fa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
faa0: 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70  "Statement {0} p
fab0: 61 72 61 6d 74 65 72 20 69 6e 64 65 78 20 6f 66  aramter index of
fac0: 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d 20 69 73   name {{{1}}} is
fad0: 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20 20 20 20   #{2}.",..      
fae0: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
faf0: 49 6e 74 50 74 72 2c 20 70 61 72 61 6d 4e 61 6d  IntPtr, paramNam
fb00: 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20  e, index));..   
fb10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
fb20: 20 20 72 65 74 75 72 6e 20 69 6e 64 65 78 3b 0d    return index;.
fb30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
fb40: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
fb50: 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28  int ColumnCount(
fb60: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
fb70: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
fb80: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
fb90: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
fba0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
fbb0: 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  unt(stmt._sqlite
fbc0: 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a  _stmt);..    }..
fbd0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
fbe0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
fbf0: 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c 69 74 65  olumnName(SQLite
fc00: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
fc10: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
fc20: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
fc30: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
fc40: 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
fc50: 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
fc60: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
fc70: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
fc80: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
fc90: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
fca0: 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29   index, ref len)
fcb0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
fcc0: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
fcd0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
fce0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
fcf0: 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
fd00: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23  stmt, index);..#
fd10: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20  endif..      if 
fd20: 28 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  (p == IntPtr.Zer
fd30: 6f 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  o)..        thro
fd40: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
fd50: 70 74 69 6f 6e 28 53 51 4c 69 74 65 45 72 72 6f  ption(SQLiteErro
fd60: 72 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 20 47 65 74  rCode.NoMem, Get
fd70: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
fd80: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
fd90: 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ARD..      retur
fda0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  n UTF8ToString(p
fdb0: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
fdc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
fdd0: 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 2d 31 29  8ToString(p, -1)
fde0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
fdf0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
fe00: 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66   override TypeAf
fe10: 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66  finity ColumnAff
fe20: 69 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61 74  inity(SQLiteStat
fe30: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
fe40: 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
fe50: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
fe60: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
fe70: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
fe80: 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ype(stmt._sqlite
fe90: 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
fea0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
feb0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
fec0: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65  tring ColumnType
fed0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
fee0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
fef0: 2c 20 72 65 66 20 54 79 70 65 41 66 66 69 6e 69  , ref TypeAffini
ff00: 74 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20  ty nAffinity).. 
ff10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 6e     {..        in
ff20: 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c  t len;..#if !SQL
ff30: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
ff40: 20 20 20 20 20 20 6c 65 6e 20 3d 20 30 3b 0d 0a        len = 0;..
ff50: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
ff60: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
ff70: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
ff80: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69  olumn_decltype_i
ff90: 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
ffa0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
ffb0: 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73   ref len);..#els
ffc0: 65 0d 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 3d  e..        len =
ffd0: 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20 49 6e   -1;..        In
ffe0: 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
fff0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10000 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
10010 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  type(stmt._sqlit
10020 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
10030 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
10040 20 6e 41 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c   nAffinity = Col
10050 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74  umnAffinity(stmt
10060 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
10070 20 20 20 20 20 69 66 20 28 28 70 20 21 3d 20 49       if ((p != I
10080 6e 74 50 74 72 2e 5a 65 72 6f 29 20 26 26 20 28  ntPtr.Zero) && (
10090 28 6c 65 6e 20 3e 20 30 29 20 7c 7c 20 28 6c 65  (len > 0) || (le
100a0 6e 20 3d 3d 20 2d 31 29 29 29 0d 0a 20 20 20 20  n == -1)))..    
100b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
100c0 20 20 20 73 74 72 69 6e 67 20 64 65 63 6c 54 79     string declTy
100d0 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  pe = UTF8ToStrin
100e0 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20  g(p, len);....  
100f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
10100 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
10110 70 74 79 28 64 65 63 6c 54 79 70 65 29 29 0d 0a  pty(declType))..
10120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10130 72 65 74 75 72 6e 20 64 65 63 6c 54 79 70 65 3b  return declType;
10140 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
10150 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
10160 61 72 20 3d 20 73 74 6d 74 2e 54 79 70 65 44 65  ar = stmt.TypeDe
10170 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 0d 0a 20 20  finitions;....  
10180 20 20 20 20 20 20 69 66 20 28 61 72 20 21 3d 20        if (ar != 
10190 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
101a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
101b0 20 28 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e   (index < ar.Len
101c0 67 74 68 20 26 26 20 61 72 5b 69 6e 64 65 78 5d  gth && ar[index]
101d0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
101e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
101f0 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  n ar[index];..  
10200 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10210 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
10220 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 7d 0d 0a  .Empty;..    }..
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 69 6e 74 20 43 6f 6c 75  verride int Colu
10250 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74  mnIndex(SQLiteSt
10260 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74  atement stmt, st
10270 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29  ring columnName)
10280 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
10290 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75  nt x = ColumnCou
102a0 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20  nt(stmt);....   
102b0 20 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20     for (int n = 
102c0 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a  0; n < x; n++)..
102d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
102e0 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70   if (String.Comp
102f0 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20  are(columnName, 
10300 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c  ColumnName(stmt,
10310 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61   n), StringCompa
10320 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
10330 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a  oreCase) == 0)..
10340 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10350 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20   n;..      }..  
10360 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a      return -1;..
10370 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
10380 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
10390 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67  tring ColumnOrig
103a0 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53  inalName(SQLiteS
103b0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
103c0 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
103d0 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
103e0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
103f0 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  t len = 0;..    
10400 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
10410 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
10420 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10430 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
10440 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  name_interop(stm
10450 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
10460 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c  index, ref len),
10470 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
10480 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
10490 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
104a0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
104b0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
104c0 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71  in_name(stmt._sq
104d0 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
104e0 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
104f0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10500 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10510 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74  string ColumnDat
10520 61 62 61 73 65 4e 61 6d 65 28 53 51 4c 69 74 65  abaseName(SQLite
10530 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
10540 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
10550 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
10560 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
10570 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
10580 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
10590 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
105a0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
105b0 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
105c0 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  se_name_interop(
105d0 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
105e0 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  t, index, ref le
105f0 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
10600 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
10610 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
10620 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10630 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
10640 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d  atabase_name(stm
10650 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
10660 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65  index), -1);..#e
10670 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
10680 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10690 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
106a0 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69  mnTableName(SQLi
106b0 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
106c0 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
106d0 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
106e0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
106f0 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
10700 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
10710 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
10720 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10730 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
10740 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  e_name_interop(s
10750 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
10760 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e  , index, ref len
10770 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
10780 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
10790 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
107a0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
107b0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
107c0 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  ble_name(stmt._s
107d0 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
107e0 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  x), -1);..#endif
107f0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10800 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10810 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65 74 61   void ColumnMeta
10820 44 61 74 61 28 73 74 72 69 6e 67 20 64 61 74 61  Data(string data
10830 42 61 73 65 2c 20 73 74 72 69 6e 67 20 74 61 62  Base, string tab
10840 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d  le, string colum
10850 6e 2c 20 72 65 66 20 73 74 72 69 6e 67 20 64 61  n, ref string da
10860 74 61 54 79 70 65 2c 20 72 65 66 20 73 74 72 69  taType, ref stri
10870 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e  ng collateSequen
10880 63 65 2c 20 72 65 66 20 62 6f 6f 6c 20 6e 6f 74  ce, ref bool not
10890 4e 75 6c 6c 2c 20 72 65 66 20 62 6f 6f 6c 20 70  Null, ref bool p
108a0 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 62  rimaryKey, ref b
108b0 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e  ool autoIncremen
108c0 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
108d0 20 49 6e 74 50 74 72 20 64 61 74 61 54 79 70 65   IntPtr dataType
108e0 50 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  Ptr = IntPtr.Zer
108f0 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  o;..      IntPtr
10900 20 63 6f 6c 6c 53 65 71 50 74 72 20 3d 20 49 6e   collSeqPtr = In
10910 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
10920 20 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 20 3d    int nnotNull =
10930 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e   0;..      int n
10940 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 30 3b 0d  primaryKey = 0;.
10950 0a 20 20 20 20 20 20 69 6e 74 20 6e 61 75 74 6f  .      int nauto
10960 49 6e 63 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  Inc = 0;..      
10970 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
10980 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 64 74  n;..      int dt
10990 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  Len;..      int 
109a0 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  csLen;....#if !S
109b0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
109c0 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 30 3b        dtLen = 0;
109d0 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20  ..      csLen = 
109e0 30 3b 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  0;..      n = Un
109f0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10a00 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  s.sqlite3_table_
10a10 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 5f  column_metadata_
10a20 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f  interop(_sql, To
10a30 55 54 46 38 28 64 61 74 61 42 61 73 65 29 2c 20  UTF8(dataBase), 
10a40 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54  ToUTF8(table), T
10a50 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 72  oUTF8(column), r
10a60 65 66 20 64 61 74 61 54 79 70 65 50 74 72 2c 20  ef dataTypePtr, 
10a70 72 65 66 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20  ref collSeqPtr, 
10a80 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 72 65  ref nnotNull, re
10a90 66 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 72  f nprimaryKey, r
10aa0 65 66 20 6e 61 75 74 6f 49 6e 63 2c 20 72 65 66  ef nautoInc, ref
10ab0 20 64 74 4c 65 6e 2c 20 72 65 66 20 63 73 4c 65   dtLen, ref csLe
10ac0 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
10ad0 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 20    dtLen = -1;.. 
10ae0 20 20 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31 3b       csLen = -1;
10af0 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  ....      n = Un
10b00 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10b10 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  s.sqlite3_table_
10b20 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28  column_metadata(
10b30 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74  _sql, ToUTF8(dat
10b40 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74  aBase), ToUTF8(t
10b50 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f  able), ToUTF8(co
10b60 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61 74 61 54  lumn), ref dataT
10b70 79 70 65 50 74 72 2c 20 72 65 66 20 63 6f 6c 6c  ypePtr, ref coll
10b80 53 65 71 50 74 72 2c 20 72 65 66 20 6e 6e 6f 74  SeqPtr, ref nnot
10b90 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72 69 6d 61  Null, ref nprima
10ba0 72 79 4b 65 79 2c 20 72 65 66 20 6e 61 75 74 6f  ryKey, ref nauto
10bb0 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  Inc);..#endif.. 
10bc0 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
10bd0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
10be0 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
10bf0 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
10c00 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
10c10 0a 0d 0a 20 20 20 20 20 20 64 61 74 61 54 79 70  ...      dataTyp
10c20 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
10c30 28 64 61 74 61 54 79 70 65 50 74 72 2c 20 64 74  (dataTypePtr, dt
10c40 4c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c  Len);..      col
10c50 6c 61 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55  lateSequence = U
10c60 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c  TF8ToString(coll
10c70 53 65 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d  SeqPtr, csLen);.
10c80 0a 0d 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c  ...      notNull
10c90 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20   = (nnotNull == 
10ca0 31 29 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61  1);..      prima
10cb0 72 79 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72  ryKey = (nprimar
10cc0 79 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20  yKey == 1);..   
10cd0 20 20 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74     autoIncrement
10ce0 20 3d 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20   = (nautoInc == 
10cf0 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  1);..    }....  
10d00 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
10d10 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 4f 62  ide object GetOb
10d20 6a 65 63 74 28 53 51 4c 69 74 65 53 74 61 74 65  ject(SQLiteState
10d30 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
10d40 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
10d50 20 20 20 20 20 20 73 77 69 74 63 68 20 28 43 6f        switch (Co
10d60 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d  lumnAffinity(stm
10d70 74 2c 20 69 6e 64 65 78 29 29 0d 0a 20 20 20 20  t, index))..    
10d80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10d90 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
10da0 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20  nity.Int64:..   
10db0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dd0 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 49 6e      return GetIn
10de0 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
10df0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10e00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10e10 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
10e20 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20  ity.Double:..   
10e30 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e50 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 44 6f      return GetDo
10e60 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  uble(stmt, index
10e70 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
10e80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10e90 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
10ea0 6e 69 74 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20  nity.Text:..    
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ed0 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78     return GetTex
10ee0 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
10ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
10f10 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
10f20 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20  y.Blob:..       
10f30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f50 6c 6f 6e 67 20 73 69 7a 65 20 3d 20 47 65 74 42  long size = GetB
10f60 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
10f70 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29  , 0, null, 0, 0)
10f80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10f90 20 20 20 20 20 20 20 20 20 69 66 20 28 28 73 69           if ((si
10fa0 7a 65 20 3e 20 30 29 20 26 26 20 28 73 69 7a 65  ze > 0) && (size
10fb0 20 3c 3d 20 69 6e 74 2e 4d 61 78 56 61 6c 75 65   <= int.MaxValue
10fc0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
10fd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ff0 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73 20     byte[] bytes 
11000 3d 20 6e 65 77 20 62 79 74 65 5b 28 69 6e 74 29  = new byte[(int)
11010 73 69 7a 65 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  size];....      
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11030 20 20 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c    GetBytes(stmt,
11040 20 69 6e 64 65 78 2c 20 30 2c 20 62 79 74 65 73   index, 0, bytes
11050 2c 20 30 2c 20 28 69 6e 74 29 73 69 7a 65 29 3b  , 0, (int)size);
11060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11070 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11080 72 6e 20 62 79 74 65 73 3b 0d 0a 20 20 20 20 20  rn bytes;..     
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
110a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
110b0 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
110d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
110e0 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e  e TypeAffinity.N
110f0 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ull:..          
11100 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11120 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65  urn DBNull.Value
11130 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11140 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
11150 0a 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  ...        throw
11160 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
11170 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
11180 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
11190 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
111a0 64 6f 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65  double GetDouble
111b0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
111c0 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
111d0 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
111e0 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
111f0 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
11200 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
11210 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11220 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
11230 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
11240 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c  mt, index);..#el
11250 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
11260 41 52 44 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c  ARD..      doubl
11270 65 20 76 61 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a  e value = 0.0;..
11280 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
11290 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
112a0 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f  3_column_double_
112b0 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
112c0 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
112d0 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20  , ref value);.. 
112e0 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
112f0 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  e;..#else..     
11300 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
11310 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
11320 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
11330 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
11340 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
11350 6f 6c 20 47 65 74 42 6f 6f 6c 65 61 6e 28 53 51  ol GetBoolean(SQ
11360 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
11370 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
11380 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
11390 75 72 6e 20 54 6f 42 6f 6f 6c 65 61 6e 28 47 65  urn ToBoolean(Ge
113a0 74 4f 62 6a 65 63 74 28 73 74 6d 74 2c 20 69 6e  tObject(stmt, in
113b0 64 65 78 29 2c 20 43 75 6c 74 75 72 65 49 6e 66  dex), CultureInf
113c0 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
113d0 72 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20  re, false);..   
113e0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
113f0 61 6c 20 6f 76 65 72 72 69 64 65 20 73 62 79 74  al override sbyt
11400 65 20 47 65 74 53 42 79 74 65 28 53 51 4c 69 74  e GetSByte(SQLit
11410 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
11420 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
11430 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
11440 20 75 6e 63 68 65 63 6b 65 64 28 28 73 62 79 74   unchecked((sbyt
11450 65 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  e)(GetInt32(stmt
11460 2c 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e  , index) & byte.
11470 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20  MaxValue));..   
11480 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
11490 61 6c 20 6f 76 65 72 72 69 64 65 20 62 79 74 65  al override byte
114a0 20 47 65 74 42 79 74 65 28 53 51 4c 69 74 65 53   GetByte(SQLiteS
114b0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
114c0 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
114d0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
114e0 6e 63 68 65 63 6b 65 64 28 28 62 79 74 65 29 28  nchecked((byte)(
114f0 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
11500 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78  ndex) & byte.Max
11510 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  Value));..    }.
11520 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11530 6f 76 65 72 72 69 64 65 20 73 68 6f 72 74 20 47  override short G
11540 65 74 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74  etInt16(SQLiteSt
11550 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
11560 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
11570 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e  .      return un
11580 63 68 65 63 6b 65 64 28 28 73 68 6f 72 74 29 28  checked((short)(
11590 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
115a0 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d  ndex) & ushort.M
115b0 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
115c0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
115d0 6c 20 6f 76 65 72 72 69 64 65 20 75 73 68 6f 72  l override ushor
115e0 74 20 47 65 74 55 49 6e 74 31 36 28 53 51 4c 69  t GetUInt16(SQLi
115f0 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
11600 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
11610 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
11620 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 73 68  n unchecked((ush
11630 6f 72 74 29 28 47 65 74 49 6e 74 33 32 28 73 74  ort)(GetInt32(st
11640 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68  mt, index) & ush
11650 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d  ort.MaxValue));.
11660 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
11670 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
11680 69 6e 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c  int GetInt32(SQL
11690 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
116a0 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
116b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
116c0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
116d0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
116e0 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f  olumn_int(stmt._
116f0 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
11700 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ex);..    }.... 
11710 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
11720 72 69 64 65 20 75 69 6e 74 20 47 65 74 55 49 6e  ride uint GetUIn
11730 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
11740 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
11750 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
11760 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
11770 6b 65 64 28 28 75 69 6e 74 29 47 65 74 49 6e 74  ked((uint)GetInt
11780 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  32(stmt, index))
11790 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
117a0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
117b0 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28  e long GetInt64(
117c0 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
117d0 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
117e0 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c  ..    {..#if !PL
117f0 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
11800 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 72  AMEWORK..      r
11810 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
11820 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
11830 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73  3_column_int64(s
11840 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
11850 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66  , index);..#elif
11860 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
11870 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 76 61  D..      long va
11880 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  lue = 0;..      
11890 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
118a0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
118b0 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  mn_int64_interop
118c0 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
118d0 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  mt, index, ref v
118e0 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72 65  alue);..      re
118f0 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c  turn value;..#el
11900 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
11910 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
11920 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
11930 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
11940 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11950 65 72 72 69 64 65 20 75 6c 6f 6e 67 20 47 65 74  erride ulong Get
11960 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61  UInt64(SQLiteSta
11970 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
11980 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
11990 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
119a0 68 65 63 6b 65 64 28 28 75 6c 6f 6e 67 29 47 65  hecked((ulong)Ge
119b0 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
119c0 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ex));..    }....
119d0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
119e0 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
119f0 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74 65  Text(SQLiteState
11a00 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
11a10 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
11a20 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
11a30 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
11a40 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65  n = 0;..      re
11a50 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
11a60 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
11a70 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
11a80 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f  lumn_text_intero
11a90 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
11aa0 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
11ab0 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
11ac0 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
11ad0 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
11ae0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11af0 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
11b00 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69  _text(stmt._sqli
11b10 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
11b20 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
11b30 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11b40 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
11b50 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  es(stmt._sqlite_
11b60 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
11b70 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
11b80 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11b90 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65 20  erride DateTime 
11ba0 47 65 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69  GetDateTime(SQLi
11bb0 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
11bc0 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
11bd0 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f    {..      if (_
11be0 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d  datetimeFormat =
11bf0 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  = SQLiteDateForm
11c00 61 74 73 2e 54 69 63 6b 73 29 0d 0a 20 20 20 20  ats.Ticks)..    
11c10 20 20 20 20 72 65 74 75 72 6e 20 54 69 63 6b 73      return Ticks
11c20 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49 6e  ToDateTime(GetIn
11c30 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
11c40 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29  , _datetimeKind)
11c50 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  ;..      else if
11c60 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61   (_datetimeForma
11c70 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46  t == SQLiteDateF
11c80 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79  ormats.JulianDay
11c90 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  )..        retur
11ca0 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74  n ToDateTime(Get
11cb0 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64  Double(stmt, ind
11cc0 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69  ex), _datetimeKi
11cd0 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  nd);..      else
11ce0 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f   if (_datetimeFo
11cf0 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61  rmat == SQLiteDa
11d00 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70  teFormats.UnixEp
11d10 6f 63 68 29 0d 0a 20 20 20 20 20 20 20 20 72 65  och)..        re
11d20 74 75 72 6e 20 55 6e 69 78 45 70 6f 63 68 54 6f  turn UnixEpochTo
11d30 44 61 74 65 54 69 6d 65 28 47 65 74 49 6e 74 36  DateTime(GetInt6
11d40 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  4(stmt, index), 
11d50 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d  _datetimeKind);.
11d60 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
11d70 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
11d80 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
11d90 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
11da0 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76  Time(UnsafeNativ
11db0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11dc0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74  _column_text_int
11dd0 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
11de0 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
11df0 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
11e00 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
11e10 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55  urn ToDateTime(U
11e20 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11e30 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
11e40 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c  n_text(stmt._sql
11e50 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
11e60 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ,..        Unsaf
11e70 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11e80 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
11e90 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tes(stmt._sqlite
11ea0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  _stmt, index));.
11eb0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
11ec0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11ed0 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
11ee0 42 79 74 65 73 28 53 51 4c 69 74 65 53 74 61 74  Bytes(SQLiteStat
11ef0 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
11f00 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61  index, int nData
11f10 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62  Offset, byte[] b
11f20 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74  Dest, int nStart
11f30 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a  , int nLength)..
11f40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
11f50 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61   nlen = UnsafeNa
11f60 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11f70 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
11f80 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
11f90 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
11fa0 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65       // If no de
11fb0 73 74 69 6e 61 74 69 6f 6e 20 62 75 66 66 65 72  stination buffer
11fc0 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 7a  , return the siz
11fd0 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20  e needed...     
11fe0 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75   if (bDest == nu
11ff0 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b  ll) return nlen;
12000 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43  ....      int nC
12010 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b  opied = nLength;
12020 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
12030 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e  opied + nStart >
12040 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e   bDest.Length) n
12050 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c  Copied = bDest.L
12060 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d  ength - nStart;.
12070 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
12080 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74  ed + nDataOffset
12090 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64   > nlen) nCopied
120a0 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f   = nlen - nDataO
120b0 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ffset;....      
120c0 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29  if (nCopied > 0)
120d0 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
120e0 20 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20     IntPtr ptr = 
120f0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12100 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
12110 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71  mn_blob(stmt._sq
12120 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
12130 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61  );....        Ma
12140 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50  rshal.Copy((IntP
12150 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28  tr)(ptr.ToInt64(
12160 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29  ) + nDataOffset)
12170 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c  , bDest, nStart,
12180 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20   nCopied);..    
12190 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d    }..      else.
121a0 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
121b0 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a    nCopied = 0;..
121c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
121d0 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b   return nCopied;
121e0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
121f0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12200 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53   long GetChars(S
12210 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
12220 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
12230 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c  int nDataOffset,
12240 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69   char[] bDest, i
12250 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
12260 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a  Length)..    {..
12270 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d        int nlen;.
12280 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
12290 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
122a0 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74  .      string st
122b0 72 20 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74  r = GetText(stmt
122c0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
122d0 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67   nlen = str.Leng
122e0 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
122f0 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20  (bDest == null) 
12300 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a  return nlen;....
12310 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
12320 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65  d + nStart > bDe
12330 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69  st.Length) nCopi
12340 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74  ed = bDest.Lengt
12350 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20  h - nStart;..   
12360 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b     if (nCopied +
12370 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e   nDataOffset > n
12380 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e  len) nCopied = n
12390 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65  len - nDataOffse
123a0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
123b0 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20  nCopied > 0)..  
123c0 20 20 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f        str.CopyTo
123d0 28 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44  (nDataOffset, bD
123e0 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f  est, nStart, nCo
123f0 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c  pied);..      el
12400 73 65 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d  se nCopied = 0;.
12410 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
12420 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d  nCopied;..    }.
12430 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
12440 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
12450 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65  Null(SQLiteState
12460 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
12470 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
12480 20 20 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75      return (Colu
12490 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c  mnAffinity(stmt,
124a0 20 69 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41   index) == TypeA
124b0 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a  ffinity.Null);..
124c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
124d0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
124e0 6e 74 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e  nt AggregateCoun
124f0 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  t(IntPtr context
12500 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12510 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
12520 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
12530 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75  e3_aggregate_cou
12540 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  nt(context);..  
12550 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
12560 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
12570 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72 65  iteErrorCode Cre
12580 61 74 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69  ateFunction(stri
12590 6e 67 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20  ng strFunction, 
125a0 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20  int nArgs, bool 
125b0 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c  needCollSeq, SQL
125c0 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  iteCallback func
125d0 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b  , SQLiteCallback
125e0 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74   funcstep, SQLit
125f0 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66  eFinalCallback f
12600 75 6e 63 66 69 6e 61 6c 2c 20 62 6f 6f 6c 20 63  uncfinal, bool c
12610 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d  anThrow)..    {.
12620 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
12630 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
12640 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
12650 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73  D..      n = Uns
12660 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12670 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
12680 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70  function_interop
12690 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
126a0 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67  rFunction), nArg
126b0 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72  s, 4, IntPtr.Zer
126c0 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65  o, func, funcste
126d0 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e  p, funcfinal, (n
126e0 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72  eedCollSeq == tr
126f0 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20  ue) ? 1 : 0);.. 
12700 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
12710 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
12720 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  ) n = UnsafeNati
12730 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12740 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
12750 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  n_interop(_sql, 
12760 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
12770 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49  on), nArgs, 1, I
12780 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
12790 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
127a0 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c  final, (needColl
127b0 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31  Seq == true) ? 1
127c0 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   : 0);..#else.. 
127d0 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
127e0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
127f0 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
12800 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
12810 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
12820 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72  nArgs, 4, IntPtr
12830 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
12840 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
12850 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
12860 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
12870 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66  de.Ok) n = Unsaf
12880 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12890 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
128a0 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  nction(_sql, ToU
128b0 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
128c0 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50  , nArgs, 1, IntP
128d0 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
128e0 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
128f0 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  al);..#endif..  
12900 20 20 20 20 69 66 20 28 63 61 6e 54 68 72 6f 77      if (canThrow
12910 20 26 26 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   && (n != SQLite
12920 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 74  ErrorCode.Ok)) t
12930 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
12940 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
12950 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
12960 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
12970 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
12980 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
12990 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72  LiteErrorCode Cr
129a0 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74  eateCollation(st
129b0 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f  ring strCollatio
129c0 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69  n, SQLiteCollati
129d0 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43  on func, SQLiteC
129e0 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 2c  ollation func16,
129f0 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d   bool canThrow).
12a00 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
12a10 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
12a20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
12a30 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
12a40 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f  eate_collation(_
12a50 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43  sql, ToUTF8(strC
12a60 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e  ollation), 2, In
12a70 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31  tPtr.Zero, func1
12a80 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  6);..      if (n
12a90 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
12aa0 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61  ode.Ok) n = Unsa
12ab0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12ac0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
12ad0 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  ollation(_sql, T
12ae0 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69  oUTF8(strCollati
12af0 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a  on), 1, IntPtr.Z
12b00 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20  ero, func);..   
12b10 20 20 20 69 66 20 28 63 61 6e 54 68 72 6f 77 20     if (canThrow 
12b20 26 26 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  && (n != SQLiteE
12b30 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 74 68  rrorCode.Ok)) th
12b40 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
12b50 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
12b60 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
12b70 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20     return n;..  
12b80 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
12b90 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
12ba0 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43   ContextCollateC
12bb0 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e  ompare(Collation
12bc0 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63  EncodingEnum enc
12bd0 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
12be0 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72  , string s1, str
12bf0 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a  ing s2)..    {..
12c00 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
12c10 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65  DARD..      byte
12c20 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79  [] b1;..      by
12c30 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20  te[] b2;..      
12c40 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
12c50 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d  ding converter =
12c60 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
12c70 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20  switch (enc)..  
12c80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
12c90 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
12ca0 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d  odingEnum.UTF8:.
12cb0 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
12cc0 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
12cd0 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  xt.Encoding.UTF8
12ce0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
12cf0 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
12d00 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
12d10 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a  ingEnum.UTF16LE:
12d20 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
12d30 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
12d40 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69  ext.Encoding.Uni
12d50 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
12d60 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
12d70 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
12d80 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
12d90 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6BE:..          
12da0 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
12db0 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
12dc0 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64  .BigEndianUnicod
12dd0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72  e;..          br
12de0 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  eak;..      }...
12df0 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76  .      b1 = conv
12e00 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 73  erter.GetBytes(s
12e10 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20  1);..      b2 = 
12e20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
12e30 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20  es(s2);....     
12e40 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
12e50 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12e60 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c  te3_context_coll
12e70 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  compare_interop(
12e80 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e  context, b1, b1.
12e90 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c  Length, b2, b2.L
12ea0 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ength);..#else..
12eb0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
12ec0 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
12ed0 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
12ee0 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
12ef0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
12f00 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f  de int ContextCo
12f10 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c  llateCompare(Col
12f20 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
12f30 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63  um enc, IntPtr c
12f40 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b 5d 20 63  ontext, char[] c
12f50 31 2c 20 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20  1, char[] c2).. 
12f60 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
12f70 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
12f80 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20    byte[] b1;..  
12f90 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a      byte[] b2;..
12fa0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78        System.Tex
12fb0 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65  t.Encoding conve
12fc0 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rter = null;....
12fd0 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e        switch (en
12fe0 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  c)..      {..   
12ff0 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
13000 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
13010 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20  UTF8:..         
13020 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
13030 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
13040 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20  g.UTF8;..       
13050 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
13060 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
13070 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
13080 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16LE:..        
13090 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
130a0 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
130b0 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ng.Unicode;..   
130c0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
130d0 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
130e0 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
130f0 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20  m.UTF16BE:..    
13100 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
13110 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
13120 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e  coding.BigEndian
13130 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
13140 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
13150 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20    }....      b1 
13160 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
13170 79 74 65 73 28 63 31 29 3b 0d 0a 20 20 20 20 20  ytes(c1);..     
13180 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b2 = converter.
13190 47 65 74 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d  GetBytes(c2);...
131a0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
131b0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
131c0 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
131d0 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e  t_collcompare_in
131e0 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62  terop(context, b
131f0 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32  1, b1.Length, b2
13200 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23  , b2.Length);..#
13210 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
13220 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
13230 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
13240 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
13250 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
13260 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61 74 69  override Collati
13270 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f  onSequence GetCo
13280 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28  llationSequence(
13290 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
132a0 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  unc, IntPtr cont
132b0 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ext)..    {..#if
132c0 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
132d0 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74 69  D..      Collati
132e0 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71 20 3d  onSequence seq =
132f0 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65   new CollationSe
13300 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20  quence();..     
13310 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
13320 20 20 20 20 20 69 6e 74 20 74 79 70 65 20 3d 20       int type = 
13330 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 65 6e  0;..      int en
13340 63 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e  c = 0;..      In
13350 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
13360 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13370 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c  ite3_context_col
13380 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  lseq_interop(con
13390 74 65 78 74 2c 20 72 65 66 20 74 79 70 65 2c 20  text, ref type, 
133a0 72 65 66 20 65 6e 63 2c 20 72 65 66 20 6c 65 6e  ref enc, ref len
133b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
133c0 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e  p != null) seq.N
133d0 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
133e0 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20  ng(p, len);..   
133f0 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43     seq.Type = (C
13400 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d  ollationTypeEnum
13410 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65  )type;..      se
13420 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d  q._func = func;.
13430 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64  .      seq.Encod
13440 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ing = (Collation
13450 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63  EncodingEnum)enc
13460 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
13470 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20  n seq;..#else.. 
13480 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
13490 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
134a0 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
134b0 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
134c0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
134d0 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56  e long GetParamV
134e0 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74 72  alueBytes(IntPtr
134f0 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66   p, int nDataOff
13500 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
13510 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
13520 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
13530 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
13540 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  en = UnsafeNativ
13550 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13560 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b  _value_bytes(p);
13570 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
13580 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  no destination b
13590 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68  uffer, return th
135a0 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a  e size needed...
135b0 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
135c0 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
135d0 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
135e0 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
135f0 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
13600 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
13610 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
13620 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
13630 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
13640 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
13650 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
13660 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
13670 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
13680 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
13690 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
136a0 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
136b0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
136c0 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
136d0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
136e0 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d  _value_blob(p);.
136f0 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68  ...        Marsh
13700 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29  al.Copy((IntPtr)
13710 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b  (ptr.ToInt64() +
13720 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62   nDataOffset), b
13730 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43  Dest, nStart, nC
13740 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d  opied);..      }
13750 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
13760 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
13770 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20  Copied = 0;..   
13780 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
13790 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
137a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
137b0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f  rnal override do
137c0 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c  uble GetParamVal
137d0 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20  ueDouble(IntPtr 
137e0 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ptr)..    {..#if
137f0 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
13800 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
13810 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
13820 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13830 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
13840 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20  le(ptr);..#elif 
13850 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
13860 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76  ..      double v
13870 61 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20  alue = 0.0;..   
13880 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
13890 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
138a0 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  alue_double_inte
138b0 72 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61 6c  rop(ptr, ref val
138c0 75 65 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  ue);..      retu
138d0 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65  rn value;..#else
138e0 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
138f0 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
13900 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
13910 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
13920 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13930 72 69 64 65 20 69 6e 74 20 47 65 74 50 61 72 61  ride int GetPara
13940 6d 56 61 6c 75 65 49 6e 74 33 32 28 49 6e 74 50  mValueInt32(IntP
13950 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a  tr ptr)..    {..
13960 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
13970 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13980 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69  .sqlite3_value_i
13990 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  nt(ptr);..    }.
139a0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
139b0 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
139c0 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34  tParamValueInt64
139d0 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
139e0 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
139f0 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
13a00 4f 52 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ORK..      retur
13a10 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
13a20 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
13a30 6c 75 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d  lue_int64(ptr);.
13a40 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
13a50 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49  TANDARD..      I
13a60 6e 74 36 34 20 76 61 6c 75 65 20 3d 20 30 3b 0d  nt64 value = 0;.
13a70 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
13a80 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13a90 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69  e3_value_int64_i
13aa0 6e 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20  nterop(ptr, ref 
13ab0 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72  value);..      r
13ac0 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65  eturn value;..#e
13ad0 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
13ae0 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
13af0 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
13b00 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
13b10 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
13b20 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
13b30 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74  etParamValueText
13b40 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
13b50 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
13b60 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
13b70 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
13b80 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
13b90 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
13ba0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13bb0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f  ite3_value_text_
13bc0 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66  interop(ptr, ref
13bd0 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
13be0 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
13bf0 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
13c00 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
13c10 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
13c20 5f 74 65 78 74 28 70 74 72 29 2c 0d 0a 20 20 20  _text(ptr),..   
13c30 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
13c40 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13c50 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 74 72  _value_bytes(ptr
13c60 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
13c70 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
13c80 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65  al override Type
13c90 41 66 66 69 6e 69 74 79 20 47 65 74 50 61 72 61  Affinity GetPara
13ca0 6d 56 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74  mValueType(IntPt
13cb0 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  r ptr)..    {.. 
13cc0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
13cd0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13ce0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
13cf0 70 65 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d  pe(ptr);..    }.
13d00 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
13d10 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
13d20 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20  turnBlob(IntPtr 
13d30 63 6f 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20  context, byte[] 
13d40 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
13d50 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
13d60 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13d70 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e  _result_blob(con
13d80 74 65 78 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c  text, value, val
13d90 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50  ue.Length, (IntP
13da0 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d  tr)(-1));..    }
13db0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
13dc0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
13dd0 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50  eturnDouble(IntP
13de0 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62  tr context, doub
13df0 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  le value)..    {
13e00 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
13e10 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
13e20 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
13e30 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13e40 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
13e50 65 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  e(context, value
13e60 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
13e70 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
13e80 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
13e90 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
13ea0 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  sult_double_inte
13eb0 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66  rop(context, ref
13ec0 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d   value);..#else.
13ed0 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
13ee0 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
13ef0 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
13f00 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
13f10 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13f20 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45  ide void ReturnE
13f30 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74  rror(IntPtr cont
13f40 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  ext, string valu
13f50 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
13f60 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13f70 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
13f80 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
13f90 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29  t, ToUTF8(value)
13fa0 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b  , value.Length);
13fb0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
13fc0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
13fd0 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33   void ReturnInt3
13fe0 32 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  2(IntPtr context
13ff0 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20  , int value)..  
14000 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
14010 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
14020 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
14030 74 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  t(context, value
14040 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
14050 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
14060 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e  de void ReturnIn
14070 74 36 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  t64(IntPtr conte
14080 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d  xt, long value).
14090 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41  .    {..#if !PLA
140a0 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
140b0 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e  MEWORK..      Un
140c0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
140d0 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
140e0 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20  _int64(context, 
140f0 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
14100 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
14110 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
14120 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14130 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f  e3_result_int64_
14140 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
14150 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65   ref value);..#e
14160 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
14170 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
14180 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
14190 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
141a0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
141b0 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
141c0 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63  urnNull(IntPtr c
141d0 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
141e0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
141f0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
14200 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f  3_result_null(co
14210 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ntext);..    }..
14220 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
14230 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
14240 75 72 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63  urnText(IntPtr c
14250 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76  ontext, string v
14260 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
14270 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54      byte[] b = T
14280 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20  oUTF8(value);.. 
14290 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
142a0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
142b0 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e  _result_text(con
142c0 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c  text, ToUTF8(val
142d0 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  ue), b.Length - 
142e0 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  1, (IntPtr)(-1))
142f0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20  ;..    }....#if 
14300 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
14310 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c  TABLE..    /// <
14320 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
14330 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68 65  / Determines the
14340 20 66 69 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68   file name of th
14350 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
14360 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
14370 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20  native..    /// 
14380 22 76 74 73 68 69 6d 22 20 65 78 74 65 6e 73 69  "vtshim" extensi
14390 6f 6e 20 2d 41 4e 44 2d 20 77 68 65 74 68 65 72  on -AND- whether
143a0 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20 64 79   it should be dy
143b0 6e 61 6d 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64  namically loaded
143c0 20 62 79 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69   by..    /// thi
143d0 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 2f 2f  s class...    //
143e0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
143f0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
14400 65 3d 22 69 73 4c 6f 61 64 4e 65 65 64 65 64 22  e="isLoadNeeded"
14410 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
14420 6f 75 74 70 75 74 20 70 61 72 61 6d 65 74 65 72  output parameter
14430 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20   will be set to 
14440 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
14450 72 65 74 75 72 6e 65 64 20 6e 61 74 69 76 65 0d  returned native.
14460 0a 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79  .    /// library
14470 20 66 69 6c 65 20 6e 61 6d 65 20 73 68 6f 75 6c   file name shoul
14480 64 20 62 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79  d be dynamically
14490 20 6c 6f 61 64 65 64 20 70 72 69 6f 72 20 74 6f   loaded prior to
144a0 20 61 74 74 65 6d 70 74 69 6e 67 0d 0a 20 20 20   attempting..   
144b0 20 2f 2f 2f 20 74 68 65 20 63 72 65 61 74 69 6f   /// the creatio
144c0 6e 20 6f 66 20 6e 61 74 69 76 65 20 64 69 73 70  n of native disp
144d0 6f 73 61 62 6c 65 20 65 78 74 65 6e 73 69 6f 6e  osable extension
144e0 20 6d 6f 64 75 6c 65 73 2e 0d 0a 20 20 20 20 2f   modules...    /
144f0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
14500 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
14510 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 69 6c 65      /// The file
14520 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 61 74   name of the nat
14530 69 76 65 20 6c 69 62 72 61 72 79 20 63 6f 6e 74  ive library cont
14540 61 69 6e 69 6e 67 20 74 68 65 20 6e 61 74 69 76  aining the nativ
14550 65 20 22 76 74 73 68 69 6d 22 0d 0a 20 20 20 20  e "vtshim"..    
14560 2f 2f 2f 20 65 78 74 65 6e 73 69 6f 6e 20 2d 4f  /// extension -O
14570 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20 63 61  R- null if it ca
14580 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69 6e  nnot be determin
14590 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ed...    /// </r
145a0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69  eturns>..    pri
145b0 76 61 74 65 20 73 74 72 69 6e 67 20 47 65 74 53  vate string GetS
145c0 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65  himExtensionFile
145d0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 72  Name(..        r
145e0 65 66 20 62 6f 6f 6c 20 69 73 4c 6f 61 64 4e 65  ef bool isLoadNe
145f0 65 64 65 64 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a  eded /* out */..
14600 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
14610 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
14620 68 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65 64 20  himIsLoadNeeded 
14630 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
14640 20 20 20 20 20 20 69 73 4c 6f 61 64 4e 65 65 64        isLoadNeed
14650 65 64 20 3d 20 28 62 6f 6f 6c 29 5f 73 68 69 6d  ed = (bool)_shim
14660 49 73 4c 6f 61 64 4e 65 65 64 65 64 3b 0d 0a 20  IsLoadNeeded;.. 
14670 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 69 66         else..#if
14680 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44   SQLITE_STANDARD
14690 20 7c 7c 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f   || USE_INTEROP_
146a0 44 4c 4c 20 7c 7c 20 50 4c 41 54 46 4f 52 4d 5f  DLL || PLATFORM_
146b0 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
146c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 73  ..            is
146d0 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 48 65 6c  LoadNeeded = Hel
146e0 70 65 72 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e  perMethods.IsWin
146f0 64 6f 77 73 28 29 3b 20 2f 2a 20 43 4f 4d 50 41  dows(); /* COMPA
14700 54 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  T */..#else..   
14710 20 20 20 20 20 20 20 20 20 69 73 4c 6f 61 64 4e           isLoadN
14720 65 65 64 65 64 20 3d 20 66 61 6c 73 65 3b 20 2f  eeded = false; /
14730 2a 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  * mixed-mode ass
14740 65 6d 62 6c 79 20 2a 2f 0d 0a 23 65 6e 64 69 66  embly */..#endif
14750 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  ....        stri
14760 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 5f 73  ng fileName = _s
14770 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65  himExtensionFile
14780 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
14790 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 21 3d   if (fileName !=
147a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
147b0 20 20 20 20 72 65 74 75 72 6e 20 66 69 6c 65 4e      return fileN
147c0 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 28 53 51 4c  ame;....#if (SQL
147d0 49 54 45 5f 53 54 41 4e 44 41 52 44 20 7c 7c 20  ITE_STANDARD || 
147e0 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20  USE_INTEROP_DLL 
147f0 7c 7c 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  || PLATFORM_COMP
14800 41 43 54 46 52 41 4d 45 57 4f 52 4b 29 20 26 26  ACTFRAMEWORK) &&
14810 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f   PRELOAD_NATIVE_
14820 4c 49 42 52 41 52 59 0d 0a 20 20 20 20 20 20 20  LIBRARY..       
14830 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
14840 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 4e  tiveMethods.GetN
14850 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65  ativeLibraryFile
14860 4e 61 6d 65 4f 6e 6c 79 28 29 3b 20 2f 2a 20 43  NameOnly(); /* C
14870 4f 4d 50 41 54 20 2a 2f 0d 0a 23 65 6c 73 65 0d  OMPAT */..#else.
14880 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
14890 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  null;..#endif.. 
148a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
148b0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
148c0 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74  // Calls the nat
148d0 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  ive SQLite core 
148e0 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72  library in order
148f0 20 74 6f 20 63 72 65 61 74 65 20 61 20 64 69 73   to create a dis
14900 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f  posable..    ///
14910 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69   module containi
14920 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  ng the implement
14930 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75  ation of a virtu
14940 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  al table...    /
14950 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
14960 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
14970 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
14980 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65    /// The module
14990 20 6f 62 6a 65 63 74 20 74 6f 20 62 65 20 75 73   object to be us
149a0 65 64 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67  ed when creating
149b0 20 74 68 65 20 6e 61 74 69 76 65 20 64 69 73 70   the native disp
149c0 6f 73 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 0d 0a  osable module...
149d0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
149e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
149f0 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a   name="flags">..
14a00 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67      /// The flag
14a10 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69  s for the associ
14a20 61 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  ated <see cref="
14a30 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
14a40 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
14a50 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ance...    /// <
14a60 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
14a70 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
14a80 6f 69 64 20 43 72 65 61 74 65 4d 6f 64 75 6c 65  oid CreateModule
14a90 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f  (SQLiteModule mo
14aa0 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  dule, SQLiteConn
14ab0 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
14ac0 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
14ad0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
14ae0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
14af0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
14b00 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
14b10 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a  ion("module");..
14b20 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
14b30 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
14b40 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c  nectionFlags.NoL
14b50 6f 67 4d 6f 64 75 6c 65 29 20 21 3d 20 53 51 4c  ogModule) != SQL
14b60 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
14b70 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29 0d  gs.NoLogModule).
14b80 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
14b90 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c          module.L
14ba0 6f 67 45 72 72 6f 72 73 20 3d 20 28 28 66 6c 61  ogErrors = ((fla
14bb0 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
14bc0 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f  ctionFlags.LogMo
14bd0 64 75 6c 65 45 72 72 6f 72 29 20 3d 3d 20 53 51  duleError) == SQ
14be0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
14bf0 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72  ags.LogModuleErr
14c00 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
14c10 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 78 63 65    module.LogExce
14c20 70 74 69 6f 6e 73 20 3d 20 28 28 66 6c 61 67 73  ptions = ((flags
14c30 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
14c40 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75  ionFlags.LogModu
14c50 6c 65 45 78 63 65 70 74 69 6f 6e 29 20 3d 3d 20  leException) == 
14c60 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
14c70 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45  Flags.LogModuleE
14c80 78 63 65 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20  xception);..    
14c90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14ca0 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
14cb0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
14cc0 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
14cd0 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65  Exception("conne
14ce0 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76  ction has an inv
14cf0 61 6c 69 64 20 68 61 6e 64 6c 65 22 29 3b 0d 0a  alid handle");..
14d00 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 69  ..        bool i
14d10 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 66 61  sLoadNeeded = fa
14d20 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 73 74  lse;..        st
14d30 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20  ring fileName = 
14d40 47 65 74 53 68 69 6d 45 78 74 65 6e 73 69 6f 6e  GetShimExtension
14d50 46 69 6c 65 4e 61 6d 65 28 72 65 66 20 69 73 4c  FileName(ref isL
14d60 6f 61 64 4e 65 65 64 65 64 29 3b 0d 0a 0d 0a 20  oadNeeded);.... 
14d70 20 20 20 20 20 20 20 69 66 20 28 69 73 4c 6f 61         if (isLoa
14d80 64 4e 65 65 64 65 64 29 0d 0a 20 20 20 20 20 20  dNeeded)..      
14d90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14da0 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d   if (fileName ==
14db0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
14dc0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
14dd0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
14de0 6e 28 22 74 68 65 20 66 69 6c 65 20 6e 61 6d 65  n("the file name
14df0 20 66 6f 72 20 74 68 65 20 5c 22 76 74 73 68 69   for the \"vtshi
14e00 6d 5c 22 20 65 78 74 65 6e 73 69 6f 6e 20 69 73  m\" extension is
14e10 20 75 6e 6b 6e 6f 77 6e 22 29 3b 0d 0a 0d 0a 20   unknown");.... 
14e20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
14e30 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 50 72 6f  shimExtensionPro
14e40 63 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  cName == null)..
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
14e70 45 78 63 65 70 74 69 6f 6e 28 22 74 68 65 20 65  Exception("the e
14e80 6e 74 72 79 20 70 6f 69 6e 74 20 66 6f 72 20 74  ntry point for t
14e90 68 65 20 5c 22 76 74 73 68 69 6d 5c 22 20 65 78  he \"vtshim\" ex
14ea0 74 65 6e 73 69 6f 6e 20 69 73 20 75 6e 6b 6e 6f  tension is unkno
14eb0 77 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  wn");....       
14ec0 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65       SetLoadExte
14ed0 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20  nsion(true);..  
14ee0 20 20 20 20 20 20 20 20 20 20 4c 6f 61 64 45 78            LoadEx
14ef0 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65  tension(fileName
14f00 2c 20 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e  , _shimExtension
14f10 50 72 6f 63 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  ProcName);..    
14f20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14f30 20 69 66 20 28 6d 6f 64 75 6c 65 2e 43 72 65 61   if (module.Crea
14f40 74 65 44 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75  teDisposableModu
14f50 6c 65 28 5f 73 71 6c 29 29 0d 0a 20 20 20 20 20  le(_sql))..     
14f60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14f70 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 3d    if (_modules =
14f80 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14f90 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65           _module
14fa0 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
14fb0 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74  ry<string, SQLit
14fc0 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20  eModule>();.... 
14fd0 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75             _modu
14fe0 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65 2e 4e  les.Add(module.N
14ff0 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a 0d  ame, module);...
15000 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
15010 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20  (_usePool)..    
15020 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15030 20 20 20 20 20 20 20 20 20 20 20 5f 75 73 65 50             _useP
15040 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ool = false;....
15050 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
15060 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
15070 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
15080 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
15090 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
150a0 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
150b0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
150c0 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
150d0 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
150e0 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
150f0 20 20 20 20 20 20 20 20 20 20 20 22 43 72 65 61             "Crea
15100 74 65 4d 6f 64 75 6c 65 20 28 50 6f 6f 6c 29 20  teModule (Pool) 
15110 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d  Disabled: {0}",.
15120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15130 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72       HandleToStr
15140 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66  ing()));..#endif
15150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15160 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
15170 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
15180 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15190 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
151a0 65 45 78 63 65 70 74 69 6f 6e 28 47 65 74 4c 61  eException(GetLa
151b0 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
151c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
151d0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
151e0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c  y>..    /// Call
151f0 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c  s the native SQL
15200 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
15210 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6c 65   in order to cle
15220 61 6e 75 70 20 74 68 65 20 72 65 73 6f 75 72 63  anup the resourc
15230 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f  es..    /// asso
15240 63 69 61 74 65 64 20 77 69 74 68 20 61 20 6d 6f  ciated with a mo
15250 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  dule containing 
15260 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
15270 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  on of a virtual 
15280 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  table...    /// 
15290 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
152a0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
152b0 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f  "module">..    /
152c0 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62  // The module ob
152d0 6a 65 63 74 20 70 72 65 76 69 6f 75 73 6c 79 20  ject previously 
152e0 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 3c 73  passed to the <s
152f0 65 65 20 63 72 65 66 3d 22 43 72 65 61 74 65 4d  ee cref="CreateM
15300 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 2f  odule" />..    /
15310 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  // method...    
15320 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
15330 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
15340 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20  e="flags">..    
15350 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f  /// The flags fo
15360 72 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  r the associated
15370 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
15380 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e  teConnection" />
15390 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
153a0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
153b0 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
153c0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
153d0 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 28 53 51  DisposeModule(SQ
153e0 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
153f0 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  e, SQLiteConnect
15400 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d  ionFlags flags).
15410 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
15420 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
15430 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
15440 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
15450 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
15460 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20  ("module");.... 
15470 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69         module.Di
15480 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 7d 0d  spose();..    }.
15490 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69  .#endif....    i
154a0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
154b0 20 49 6e 74 50 74 72 20 41 67 67 72 65 67 61 74   IntPtr Aggregat
154c0 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72 20  eContext(IntPtr 
154d0 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d  context)..    {.
154e0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
154f0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
15500 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  s.sqlite3_aggreg
15510 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74  ate_context(cont
15520 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d  ext, 1);..    }.
15530 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56  ...#if INTEROP_V
15540 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20  IRTUAL_TABLE..  
15550 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
15560 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
15570 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
15580 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
15590 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72   order to declar
155a0 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  e a virtual tabl
155b0 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65  e..    /// in re
155c0 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c  sponse to a call
155d0 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63   into the <see c
155e0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
155f0 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
15600 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72  " />..    /// or
15610 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
15620 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
15630 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72  xConnect" /> vir
15640 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f  tual table metho
15650 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ds...    /// </s
15660 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
15670 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
15680 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  dule">..    /// 
15690 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  The virtual tabl
156a0 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73  e module that is
156b0 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62   to be responsib
156c0 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75  le for the virtu
156d0 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
156e0 2f 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64  / being declared
156f0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
15700 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
15710 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c  ram name="strSql
15720 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
15730 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
15740 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
15750 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67 20 74  ent describing t
15760 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
15770 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20   to..    /// be 
15780 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
15790 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
157a0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
157b0 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f  ="error">..    /
157c0 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
157d0 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
157e0 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
157f0 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20  are undefined.  
15800 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20  Upon failure,.. 
15810 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64     /// it should
15820 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72   contain an appr
15830 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65  opriate error me
15840 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ssage...    /// 
15850 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
15860 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
15870 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
15880 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
15890 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  de...    /// </r
158a0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
158b0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
158c0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44  QLiteErrorCode D
158d0 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54 61 62  eclareVirtualTab
158e0 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  le(..        SQL
158f0 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  iteModule module
15900 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
15910 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20 20 20 20  g strSql,..     
15920 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
15930 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ror..        )..
15940 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
15950 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29  f (_sql == null)
15960 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
15970 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
15980 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73   "connection has
15990 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
159a0 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  le";..          
159b0 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
159c0 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
159d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
159e0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 53 71        IntPtr pSq
159f0 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  l = IntPtr.Zero;
15a00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
15a10 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
15a20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20 53          pSql = S
15a30 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38  QLiteString.Utf8
15a40 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
15a50 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20  (strSql);....   
15a60 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
15a70 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
15a80 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
15a90 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65  .sqlite3_declare
15aa0 5f 76 74 61 62 28 0d 0a 20 20 20 20 20 20 20 20  _vtab(..        
15ab0 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 53          _sql, pS
15ac0 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ql);....        
15ad0 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51      if ((n == SQ
15ae0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
15af0 29 20 26 26 20 28 6d 6f 64 75 6c 65 20 21 3d 20  ) && (module != 
15b00 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
15b10 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44          module.D
15b20 65 63 6c 61 72 65 64 20 3d 20 74 72 75 65 3b 0d  eclared = true;.
15b30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
15b40 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
15b50 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f  rorCode.Ok) erro
15b60 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f 72  r = GetLastError
15b70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
15b80 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20     return n;..  
15b90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15ba0 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
15bb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15bc0 20 69 66 20 28 70 53 71 6c 20 21 3d 20 49 6e 74   if (pSql != Int
15bd0 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
15be0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15bf0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
15c00 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 53 71 6c  Memory.Free(pSql
15c10 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
15c20 20 20 20 20 70 53 71 6c 20 3d 20 49 6e 74 50 74      pSql = IntPt
15c30 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
15c40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15c50 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
15c60 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
15c70 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65     /// Calls the
15c80 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63   native SQLite c
15c90 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f  ore library in o
15ca0 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20  rder to declare 
15cb0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  a virtual table.
15cc0 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f  .    /// functio
15cd0 6e 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  n in response to
15ce0 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65   a call into the
15cf0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
15d00 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
15d10 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20  xCreate" />..   
15d20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72 65   /// or <see cre
15d30 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
15d40 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22  Module.xConnect"
15d50 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c   /> virtual tabl
15d60 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20  e methods...    
15d70 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
15d80 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
15d90 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
15da0 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74 75     /// The virtu
15db0 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20  al table module 
15dc0 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 72 65  that is to be re
15dd0 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68  sponsible for th
15de0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  e virtual table.
15df0 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f  .    /// functio
15e00 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64  n being declared
15e10 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
15e20 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
15e30 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65  ram name="argume
15e40 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 2f  ntCount">..    /
15e50 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
15e60 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
15e70 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67  e function being
15e80 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
15e90 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
15ea0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
15eb0 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f  e="name">..    /
15ec0 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
15ed0 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e  he function bein
15ee0 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20  g declared...   
15ef0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
15f00 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
15f10 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20  me="error">..   
15f20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
15f30 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  s, the contents 
15f40 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  of this paramete
15f50 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e  r are undefined.
15f60 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d    Upon failure,.
15f70 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75  .    /// it shou
15f80 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70  ld contain an ap
15f90 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20  propriate error 
15fa0 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f  message...    //
15fb0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
15fc0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
15fd0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
15fe0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
15ff0 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
16000 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
16010 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
16020 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
16030 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 46   DeclareVirtualF
16040 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
16050 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d    SQLiteModule m
16060 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  odule,..        
16070 69 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e  int argumentCoun
16080 74 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  t,..        stri
16090 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
160a0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
160b0 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  or..        ).. 
160c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
160d0 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
160e0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
160f0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
16100 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20  "connection has 
16110 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
16120 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
16130 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
16140 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a  rorCode.Error;..
16150 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16160 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e 61 6d       IntPtr pNam
16170 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  e = IntPtr.Zero;
16180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
16190 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
161a0 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20          pName = 
161b0 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
161c0 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
161d0 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  g(name);....    
161e0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
161f0 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
16200 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
16210 73 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64  sqlite3_overload
16220 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  _function(..    
16230 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
16240 2c 20 70 4e 61 6d 65 2c 20 61 72 67 75 6d 65 6e  , pName, argumen
16250 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  tCount);....    
16260 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
16270 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
16280 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74  .Ok) error = Get
16290 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a  LastError();....
162a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
162b0 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rn n;..        }
162c0 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
162d0 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
162e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 4e            if (pN
162f0 61 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ame != IntPtr.Ze
16300 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
16310 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16320 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79      SQLiteMemory
16330 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a 20  .Free(pName);.. 
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
16350 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65  Name = IntPtr.Ze
16360 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
16370 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
16380 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
16390 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
163a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c  >..    /// Enabl
163b0 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65  es or disabled e
163c0 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67  xtension loading
163d0 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20   by SQLite...   
163e0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
163f0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
16400 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a  name="bOnOff">..
16410 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f 20      /// True to 
16420 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20 6f  enable loading o
16430 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66 61  f extensions, fa
16440 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e 0d  lse to disable..
16450 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
16460 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
16470 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
16480 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 62  tLoadExtension(b
16490 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20  ool bOnOff)..   
164a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
164b0 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
164c0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 51  ..        if (SQ
164d0 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65  LiteVersionNumbe
164e0 72 20 3e 3d 20 33 30 31 33 30 30 30 29 0d 0a 20  r >= 3013000).. 
164f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16500 20 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74        int result
16510 20 3d 20 30 3b 20 2f 2a 20 4e 4f 54 20 55 53 45   = 0; /* NOT USE
16520 44 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  D */....        
16530 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
16540 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
16550 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 5f 69 6e  te3_db_config_in
16560 74 5f 72 65 66 69 6e 74 28 0d 0a 20 20 20 20 20  t_refint(..     
16570 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c             _sql,
16580 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f   SQLiteConfigDbO
16590 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
165a0 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 4c 4f  CONFIG_ENABLE_LO
165b0 41 44 5f 45 58 54 45 4e 53 49 4f 4e 2c 0d 0a 20  AD_EXTENSION,.. 
165c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
165d0 62 4f 6e 4f 66 66 20 3f 20 31 20 3a 20 30 29 2c  bOnOff ? 1 : 0),
165e0 20 72 65 66 20 72 65 73 75 6c 74 29 3b 0d 0a 20   ref result);.. 
165f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
16600 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
16610 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
16620 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
16630 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
16640 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e  nable_load_exten
16650 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
16660 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f         _sql, (bO
16670 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b  nOff ? -1 : 0));
16680 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
16690 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
166a0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
166b0 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
166c0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
166d0 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
166e0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
166f0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
16700 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53     /// Loads a S
16710 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20  QLite extension 
16720 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65  library from the
16730 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20   named file...  
16740 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
16750 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
16760 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22   name="fileName"
16770 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
16780 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61 6d  ame of the dynam
16790 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20  ic link library 
167a0 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  file containing 
167b0 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
167c0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
167d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
167e0 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22   name="procName"
167f0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
16800 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f 72  ame of the expor
16810 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  ted function use
16820 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  d to initialize 
16830 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
16840 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c      /// If null,
16850 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73 71   the default "sq
16860 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f  lite3_extension_
16870 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75 73  init" will be us
16880 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
16890 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
168a0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
168b0 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  d LoadExtension(
168c0 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
168d0 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65   string procName
168e0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
168f0 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d    if (fileName =
16900 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
16910 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
16920 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
16930 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29  tion("fileName")
16940 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
16950 50 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74  Ptr pError = Int
16960 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
16970 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
16980 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16990 20 62 79 74 65 5b 5d 20 75 74 66 38 46 69 6c 65   byte[] utf8File
169a0 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64  Name = UTF8Encod
169b0 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65  ing.UTF8.GetByte
169c0 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30  s(fileName + '\0
169d0 27 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ');..           
169e0 20 62 79 74 65 5b 5d 20 75 74 66 38 50 72 6f 63   byte[] utf8Proc
169f0 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  Name = null;....
16a00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16a10 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  procName != null
16a20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16a30 20 20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20     utf8ProcName 
16a40 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55  = UTF8Encoding.U
16a50 54 46 38 2e 47 65 74 42 79 74 65 73 28 70 72 6f  TF8.GetBytes(pro
16a60 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a  cName + '\0');..
16a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
16a80 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
16a90 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
16aa0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f  thods.sqlite3_lo
16ab0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20  ad_extension(.. 
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
16ad0 73 71 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d  sql, utf8FileNam
16ae0 65 2c 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c  e, utf8ProcName,
16af0 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d   ref pError);...
16b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
16b10 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
16b20 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
16b30 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
16b40 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
16b50 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74  tion(n, UTF8ToSt
16b60 72 69 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31 29  ring(pError, -1)
16b70 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
16b80 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
16b90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16ba0 20 20 20 20 20 20 20 69 66 20 28 70 45 72 72 6f         if (pErro
16bb0 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
16bc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
16bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16be0 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
16bf0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 72  thods.sqlite3_fr
16c00 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20  ee(pError);..   
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45 72               pEr
16c20 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ror = IntPtr.Zer
16c30 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
16c40 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
16c50 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45    }....    /// E
16c60 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c  nables or disabl
16c70 65 64 20 65 78 74 65 6e 64 65 64 20 72 65 73 75  ed extended resu
16c80 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65  lt codes returne
16c90 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20  d by SQLite..   
16ca0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
16cb0 64 65 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e  de void SetExten
16cc0 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62  dedResultCodes(b
16cd0 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20  ool bOnOff)..   
16ce0 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
16cf0 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
16d00 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
16d10 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64  s.sqlite3_extend
16d20 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28  ed_result_codes(
16d30 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c  ..          _sql
16d40 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
16d50 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69   0));....      i
16d60 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
16d70 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
16d80 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
16d90 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
16da0 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
16db0 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74  ..    /// Gets t
16dc0 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65  he last SQLite e
16dd0 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69  rror code..    i
16de0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
16df0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
16e00 20 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20   ResultCode().. 
16e10 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
16e20 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
16e30 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
16e40 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20  rrcode(_sql);.. 
16e50 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
16e60 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
16e70 74 65 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f  te extended erro
16e80 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65  r code..    inte
16e90 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
16ea0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 45 78  LiteErrorCode Ex
16eb0 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65  tendedResultCode
16ec0 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
16ed0 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
16ee0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
16ef0 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72  te3_extended_err
16f00 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  code(_sql);..   
16f10 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64   }....    /// Ad
16f20 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  d a log message 
16f30 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73  via the SQLite s
16f40 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72  qlite3_log inter
16f50 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72  face...    inter
16f60 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
16f70 64 20 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c  d LogMessage(SQL
16f80 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72  iteErrorCode iEr
16f90 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d  rCode, string zM
16fa0 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a  essage)..    {..
16fb0 20 20 20 20 20 20 53 74 61 74 69 63 4c 6f 67 4d        StaticLogM
16fc0 65 73 73 61 67 65 28 69 45 72 72 43 6f 64 65 2c  essage(iErrCode,
16fd0 20 7a 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20   zMessage);..   
16fe0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64   }....    /// Ad
16ff0 64 20 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  d a log message 
17000 76 69 61 20 74 68 65 20 53 51 4c 69 74 65 20 73  via the SQLite s
17010 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72  qlite3_log inter
17020 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72  face...    inter
17030 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20  nal static void 
17040 53 74 61 74 69 63 4c 6f 67 4d 65 73 73 61 67 65  StaticLogMessage
17050 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
17060 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e   iErrCode, strin
17070 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20  g zMessage)..   
17080 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
17090 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
170a0 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f  lite3_log(iErrCo
170b0 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73  de, ToUTF8(zMess
170c0 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  age));..    }...
170d0 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44  .#if INTEROP_COD
170e0 45 43 20 7c 7c 20 49 4e 54 45 52 4f 50 5f 49 4e  EC || INTEROP_IN
170f0 43 4c 55 44 45 5f 53 45 45 0d 0a 20 20 20 20 69  CLUDE_SEE..    i
17100 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
17110 20 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72   void SetPasswor
17120 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72  d(byte[] passwor
17130 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a  dBytes)..    {..
17140 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
17150 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
17160 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
17170 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20  lite3_key(_sql, 
17180 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 70  passwordBytes, p
17190 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e  asswordBytes.Len
171a0 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  gth);..      if 
171b0 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
171c0 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
171d0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
171e0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
171f0 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
17200 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a   if (_usePool)..
17210 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17220 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73   _usePool = fals
17230 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  e;....#if !NET_C
17240 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
17250 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
17260 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
17270 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74  teLine(HelperMet
17280 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
17290 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 43 75  t(..          Cu
172a0 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
172b0 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
172c0 20 20 20 20 20 22 53 65 74 50 61 73 73 77 6f 72       "SetPasswor
172d0 64 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65  d (Pool) Disable
172e0 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  d: {0}",..      
172f0 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69      HandleToStri
17300 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
17310 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
17320 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
17330 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 68  override void Ch
17340 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62 79 74  angePassword(byt
17350 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42  e[] newPasswordB
17360 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ytes)..    {..  
17370 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
17380 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
17390 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
173a0 74 65 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20  te3_rekey(_sql, 
173b0 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
173c0 2c 20 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79  , (newPasswordBy
173d0 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30  tes == null) ? 0
173e0 20 3a 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79   : newPasswordBy
173f0 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  tes.Length);..  
17400 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
17410 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
17420 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
17430 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
17440 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
17450 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 75 73 65  ..      if (_use
17460 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  Pool)..      {..
17470 20 20 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c          _usePool
17480 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66   = false;....#if
17490 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
174a0 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
174b0 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72  TION..        Tr
174c0 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
174d0 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
174e0 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
174f0 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
17500 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
17510 0d 0a 20 20 20 20 20 20 20 20 20 20 22 43 68 61  ..          "Cha
17520 6e 67 65 50 61 73 73 77 6f 72 64 20 28 50 6f 6f  ngePassword (Poo
17530 6c 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d  l) Disabled: {0}
17540 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 48 61  ",..          Ha
17550 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29  ndleToString()))
17560 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
17570 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69   }..    }..#endi
17580 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  f....    interna
17590 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
175a0 53 65 74 50 72 6f 67 72 65 73 73 48 6f 6f 6b 28  SetProgressHook(
175b0 69 6e 74 20 6e 4f 70 73 2c 20 53 51 4c 69 74 65  int nOps, SQLite
175c0 50 72 6f 67 72 65 73 73 43 61 6c 6c 62 61 63 6b  ProgressCallback
175d0 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
175e0 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
175f0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
17600 65 33 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e 64  e3_progress_hand
17610 6c 65 72 28 5f 73 71 6c 2c 20 6e 4f 70 73 2c 20  ler(_sql, nOps, 
17620 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
17630 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
17640 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
17650 69 64 65 20 76 6f 69 64 20 53 65 74 41 75 74 68  ide void SetAuth
17660 6f 72 69 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74  orizerHook(SQLit
17670 65 41 75 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62  eAuthorizerCallb
17680 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
17690 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
176a0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
176b0 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a  te3_set_authoriz
176c0 65 72 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  er(_sql, func, I
176d0 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
176e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
176f0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
17700 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28  d SetUpdateHook(
17710 53 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c  SQLiteUpdateCall
17720 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
17730 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
17740 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
17750 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b  ite3_update_hook
17760 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
17770 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
17780 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
17790 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
177a0 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51  SetCommitHook(SQ
177b0 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  LiteCommitCallba
177c0 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
177d0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
177e0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
177f0 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f  e3_commit_hook(_
17800 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
17810 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
17820 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
17830 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
17840 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53  tTraceCallback(S
17850 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61  QLiteTraceCallba
17860 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
17870 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
17880 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
17890 65 33 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66  e3_trace(_sql, f
178a0 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
178b0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
178c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
178d0 64 65 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62  de void SetRollb
178e0 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f  ackHook(SQLiteRo
178f0 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66  llbackCallback f
17900 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
17910 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
17920 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
17930 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71  ollback_hook(_sq
17940 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
17950 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
17960 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
17970 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f  y>..    /// Allo
17980 77 73 20 74 68 65 20 73 65 74 74 69 6e 67 20 6f  ws the setting o
17990 66 20 61 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c  f a logging call
179a0 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62 79 20  back invoked by 
179b0 53 51 4c 69 74 65 20 77 68 65 6e 20 61 0d 0a 20  SQLite when a.. 
179c0 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65 6e 74     /// log event
179d0 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79 20 6f   occurs.  Only o
179e0 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20  ne callback may 
179f0 62 65 20 73 65 74 2e 20 20 49 66 20 4e 55 4c 4c  be set.  If NULL
17a00 20 69 73 20 70 61 73 73 65 64 2c 0d 0a 20 20 20   is passed,..   
17a10 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69 6e 67   /// the logging
17a20 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75 6e 72   callback is unr
17a30 65 67 69 73 74 65 72 65 64 2e 0d 0a 20 20 20 20  egistered...    
17a40 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
17a50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
17a60 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65 20 63  ame="func">The c
17a70 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
17a80 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72   to invoke.</par
17a90 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
17aa0 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
17ab0 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74  result code</ret
17ac0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
17ad0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
17ae0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74  iteErrorCode Set
17af0 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69  LogCallback(SQLi
17b00 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75  teLogCallback fu
17b10 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
17b20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
17b30 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  ode rc = UnsafeN
17b40 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
17b50 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28  ite3_config_log(
17b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
17b70 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75  LiteConfigOpsEnu
17b80 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  m.SQLITE_CONFIG_
17b90 4c 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  LOG, func, IntPt
17ba0 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20  r.Zero);....    
17bb0 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
17bc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
17bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
17c30 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
17c40 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74  >..    /// Creat
17c50 65 73 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20  es a new SQLite 
17c60 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 62 61  backup object ba
17c70 73 65 64 20 6f 6e 20 74 68 65 20 70 72 6f 76 69  sed on the provi
17c80 64 65 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d  ded destination.
17c90 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73  .    /// databas
17ca0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
17cb0 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61  he source databa
17cc0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
17cd0 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f   the one..    //
17ce0 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
17cf0 68 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20  h this object.  
17d00 54 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 64  The source and d
17d10 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
17d20 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e  ase..    /// con
17d30 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20  nections cannot 
17d40 62 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20  be the same...  
17d50 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
17d60 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
17d70 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e   name="destCnn">
17d80 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  The destination 
17d90 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
17da0 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ion.</param>..  
17db0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
17dc0 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54 68 65  e="destName">The
17dd0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
17de0 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72  abase name.</par
17df0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
17e00 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65  ram name="source
17e10 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75 72 63 65  Name">The source
17e20 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c   database name.<
17e30 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
17e40 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 65   <returns>The ne
17e50 77 6c 79 20 63 72 65 61 74 65 64 20 62 61 63 6b  wly created back
17e60 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75  up object.</retu
17e70 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
17e80 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
17e90 74 65 42 61 63 6b 75 70 20 49 6e 69 74 69 61 6c  teBackup Initial
17ea0 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  izeBackup(..    
17eb0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
17ec0 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20  tion destCnn,.. 
17ed0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
17ee0 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  stName,..       
17ef0 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61   string sourceNa
17f00 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  me..        ).. 
17f10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
17f20 20 28 64 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c   (destCnn == nul
17f30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
17f40 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
17f50 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
17f60 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20  "destCnn");.... 
17f70 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 4e         if (destN
17f80 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
17f90 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
17fa0 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
17fb0 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 4e  Exception("destN
17fc0 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame");....      
17fd0 20 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d 65    if (sourceName
17fe0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
17ff0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
18000 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
18010 65 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61  eption("sourceNa
18020 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
18030 20 53 51 4c 69 74 65 33 20 64 65 73 74 53 71 6c   SQLite3 destSql
18040 69 74 65 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f  ite3 = destCnn._
18050 73 71 6c 20 61 73 20 53 51 4c 69 74 65 33 3b 0d  sql as SQLite3;.
18060 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  ...        if (d
18070 65 73 74 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75  estSqlite3 == nu
18080 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
18090 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
180a0 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  entException(.. 
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
180c0 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e  Destination conn
180d0 65 63 74 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72  ection has no wr
180e0 61 70 70 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20  apper.",..      
180f0 20 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43            "destC
18100 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nn");....       
18110 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
18120 6e 48 61 6e 64 6c 65 20 64 65 73 74 48 61 6e 64  nHandle destHand
18130 6c 65 20 3d 20 64 65 73 74 53 71 6c 69 74 65 33  le = destSqlite3
18140 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20  ._sql;....      
18150 20 20 69 66 20 28 64 65 73 74 48 61 6e 64 6c 65    if (destHandle
18160 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
18170 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
18180 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69   ArgumentExcepti
18190 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
181a0 20 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f       "Destinatio
181b0 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  n connection has
181c0 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
181d0 6c 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  le.",..         
181e0 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22         "destCnn"
181f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
18200 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
18210 6e 64 6c 65 20 73 6f 75 72 63 65 48 61 6e 64 6c  ndle sourceHandl
18220 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20  e = _sql;....   
18230 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 48       if (sourceH
18240 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
18250 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
18260 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
18270 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
18280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18290 20 20 22 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63    "Source connec
182a0 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
182b0 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
182c0 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d  ..        byte[]
182d0 20 7a 44 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55   zDestName = ToU
182e0 54 46 38 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a  TF8(destName);..
182f0 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a          byte[] z
18300 53 6f 75 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55  SourceName = ToU
18310 54 46 38 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b  TF8(sourceName);
18320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
18330 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 62  teBackupHandle b
18340 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75  ackupHandle = nu
18350 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ll;....        t
18360 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
18370 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
18380 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
18390 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
183a0 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
183b0 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
183c0 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
183d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
183e0 20 20 20 20 20 49 6e 74 50 74 72 20 62 61 63 6b       IntPtr back
183f0 75 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  up = UnsafeNativ
18400 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
18410 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20  _backup_init(.. 
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
18430 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74  estHandle, zDest
18440 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64  Name, sourceHand
18450 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29  le, zSourceName)
18460 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18470 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 49   if (backup == I
18480 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
18490 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
184a0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
184b0 74 65 45 72 72 6f 72 43 6f 64 65 20 72 65 73 75  teErrorCode resu
184c0 6c 74 43 6f 64 65 20 3d 20 52 65 73 75 6c 74 43  ltCode = ResultC
184d0 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode();....      
184e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
184f0 73 75 6c 74 43 6f 64 65 20 21 3d 20 53 51 4c 69  sultCode != SQLi
18500 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
18510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18520 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
18530 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
18540 65 73 75 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61  esultCode, GetLa
18550 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
18570 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
18580 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
18590 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
185a0 28 22 66 61 69 6c 65 64 20 74 6f 20 69 6e 69 74  ("failed to init
185b0 69 61 6c 69 7a 65 20 62 61 63 6b 75 70 22 29 3b  ialize backup");
185c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
185d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ...            b
185e0 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65  ackupHandle = ne
185f0 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61  w SQLiteBackupHa
18600 6e 64 6c 65 28 64 65 73 74 48 61 6e 64 6c 65 2c  ndle(destHandle,
18610 20 62 61 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20   backup);..     
18620 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
18630 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
18640 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
18650 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
18660 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
18670 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
18680 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65  nectionEventType
18690 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64  .NewCriticalHand
186a0 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  le, null,..     
186b0 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c         null, nul
186c0 6c 2c 20 6e 75 6c 6c 2c 20 62 61 63 6b 75 70 48  l, null, backupH
186d0 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77  andle, null, new
186e0 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20   object[] {..   
186f0 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
18700 53 51 4c 69 74 65 33 29 2c 20 64 65 73 74 43 6e  SQLite3), destCn
18710 6e 2c 20 64 65 73 74 4e 61 6d 65 2c 20 73 6f 75  n, destName, sou
18720 72 63 65 4e 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a  rceName }));....
18730 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
18740 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75 70 28  ew SQLiteBackup(
18750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
18760 69 73 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c 65  is, backupHandle
18770 2c 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44  , destHandle, zD
18780 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48  estName, sourceH
18790 61 6e 64 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  andle,..        
187a0 20 20 20 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29      zSourceName)
187b0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
187c0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
187d0 20 20 20 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70     /// Copies up
187e0 20 74 6f 20 4e 20 70 61 67 65 73 20 66 72 6f 6d   to N pages from
187f0 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
18800 62 61 73 65 20 74 6f 20 74 68 65 20 64 65 73 74  base to the dest
18810 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  ination..    ///
18820 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69   database associ
18830 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70  ated with the sp
18840 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f  ecified backup o
18850 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bject...    /// 
18860 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
18870 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
18880 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63  "backup">The bac
18890 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 75 73  kup object to us
188a0 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
188b0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
188c0 22 6e 50 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f  "nPage">..    //
188d0 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
188e0 70 61 67 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e  pages to copy, n
188f0 65 67 61 74 69 76 65 20 74 6f 20 63 6f 70 79 20  egative to copy 
18900 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 70 61  all remaining pa
18910 67 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ges...    /// </
18920 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
18930 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74  <param name="ret
18940 72 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65  ry">..    /// Se
18950 74 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65  t to true if the
18960 20 6f 70 65 72 61 74 69 6f 6e 20 6e 65 65 64 73   operation needs
18970 20 74 6f 20 62 65 20 72 65 74 72 69 65 64 20 64   to be retried d
18980 75 65 20 74 6f 20 64 61 74 61 62 61 73 65 0d 0a  ue to database..
18990 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20      /// locking 
189a0 69 73 73 75 65 73 3b 20 6f 74 68 65 72 77 69 73  issues; otherwis
189b0 65 2c 20 73 65 74 20 74 6f 20 66 61 6c 73 65 2e  e, set to false.
189c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
189d0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
189e0 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  urns>..    /// T
189f0 72 75 65 20 69 66 20 74 68 65 72 65 20 61 72 65  rue if there are
18a00 20 6d 6f 72 65 20 70 61 67 65 73 20 74 6f 20 62   more pages to b
18a10 65 20 63 6f 70 69 65 64 2c 20 66 61 6c 73 65 20  e copied, false 
18a20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20  otherwise...    
18a30 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
18a40 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
18a50 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 42  rride bool StepB
18a60 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
18a70 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63  SQLiteBackup bac
18a80 6b 75 70 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e  kup,..        in
18a90 74 20 6e 50 61 67 65 2c 0d 0a 20 20 20 20 20 20  t nPage,..      
18aa0 20 20 72 65 66 20 62 6f 6f 6c 20 72 65 74 72 79    ref bool retry
18ab0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
18ac0 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 72   {..        retr
18ad0 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  y = false;....  
18ae0 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
18af0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
18b00 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
18b10 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
18b20 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29  eption("backup")
18b30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
18b40 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
18b50 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e  handle = backup.
18b60 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d  _sqlite_backup;.
18b70 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
18b80 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
18b90 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
18ba0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
18bb0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
18bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18bd0 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
18be0 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
18bf0 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
18c00 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
18c10 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  dlePtr = handle;
18c20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
18c30 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74  handlePtr == Int
18c40 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
18c50 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
18c60 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
18c70 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
18c90 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
18ca0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
18cb0 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d  e pointer.");...
18cc0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
18cd0 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
18ce0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
18cf0 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
18d00 73 74 65 70 28 68 61 6e 64 6c 65 50 74 72 2c 20  step(handlePtr, 
18d10 6e 50 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  nPage);..       
18d20 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73   backup._stepRes
18d30 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45  ult = n; /* NOTE
18d40 3a 20 53 61 76 65 20 66 6f 72 20 75 73 65 20 62  : Save for use b
18d50 79 20 46 69 6e 69 73 68 42 61 63 6b 75 70 2e 20  y FinishBackup. 
18d60 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  */....        if
18d70 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
18d80 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
18d90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18da0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
18db0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
18dc0 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
18dd0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
18de0 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20  e.Busy)..       
18df0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18e00 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20  retry = true;.. 
18e10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18e20 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
18e30 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
18e40 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
18e50 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
18e60 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
18e70 20 20 20 20 20 20 20 20 20 20 72 65 74 72 79 20            retry 
18e80 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
18e90 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
18ea0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
18eb0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
18ec0 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
18ed0 6f 64 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20  ode.Done)..     
18ee0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18ef0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
18f00 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
18f10 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
18f20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18f30 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
18f40 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
18f50 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
18f60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
18f70 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
18f80 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
18f90 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
18fa0 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69  r of pages remai
18fb0 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65  ning to be copie
18fc0 64 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63  d from the sourc
18fd0 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  e..    /// datab
18fe0 61 73 65 20 74 6f 20 74 68 65 20 64 65 73 74 69  ase to the desti
18ff0 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20  nation database 
19000 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
19010 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20  the specified.. 
19020 20 20 20 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62     /// backup ob
19030 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
19040 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
19050 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
19060 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
19070 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65  up object to che
19080 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ck.</param>..   
19090 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
190a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
190b0 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62  s remaining to b
190c0 65 20 63 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72  e copied.</retur
190d0 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
190e0 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 52  l override int R
190f0 65 6d 61 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d  emainingBackup(.
19100 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
19110 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20  ackup backup..  
19120 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
19130 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
19140 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  up == null)..   
19150 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
19160 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
19170 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70  xception("backup
19180 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
19190 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
191a0 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75  e handle = backu
191b0 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70  p._sqlite_backup
191c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
191d0 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  (handle == null)
191e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
191f0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
19200 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
19210 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
19220 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
19230 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
19240 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a  d handle.");....
19250 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
19260 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c  andlePtr = handl
19270 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
19280 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49   (handlePtr == I
19290 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
192a0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
192b0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
192c0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
192e0 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
192f0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
19300 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d  dle pointer.");.
19310 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
19320 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
19330 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
19340 63 6b 75 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68  ckup_remaining(h
19350 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20  andlePtr);..    
19360 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
19370 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
19380 52 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61  Returns the tota
19390 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  l number of page
193a0 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  s in the source 
193b0 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
193c0 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74  ted..    /// wit
193d0 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  h the specified 
193e0 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a  backup object...
193f0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
19400 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
19410 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
19420 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
19430 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61  ct to check.</pa
19440 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
19450 65 74 75 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c  eturns>The total
19460 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
19470 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64   in the source d
19480 61 74 61 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e  atabase.</return
19490 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
194a0 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 50 61   override int Pa
194b0 67 65 43 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a  geCountBackup(..
194c0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
194d0 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20  ckup backup..   
194e0 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
194f0 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
19500 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  p == null)..    
19510 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
19520 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
19530 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22  ception("backup"
19540 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
19550 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
19560 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70   handle = backup
19570 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b  ._sqlite_backup;
19580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
19590 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  handle == null).
195a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
195b0 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
195c0 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
195d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
195e0 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
195f0 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
19600 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
19610 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
19620 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65  ndlePtr = handle
19630 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
19640 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e  (handlePtr == In
19650 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
19660 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
19670 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
19680 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
196a0 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
196b0 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
196c0 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a  le pointer.");..
196d0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
196e0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
196f0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
19700 6b 75 70 5f 70 61 67 65 63 6f 75 6e 74 28 68 61  kup_pagecount(ha
19710 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d  ndlePtr);..    }
19720 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
19730 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
19740 65 73 74 72 6f 79 73 20 74 68 65 20 62 61 63 6b  estroys the back
19750 75 70 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69  up object, rolli
19760 6e 67 20 62 61 63 6b 20 61 6e 79 20 62 61 63 6b  ng back any back
19770 75 70 20 74 68 61 74 20 6d 61 79 20 62 65 20 69  up that may be i
19780 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65  n..    /// proge
19790 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
197a0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
197b0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
197c0 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
197d0 20 6f 62 6a 65 63 74 20 74 6f 20 64 65 73 74 72   object to destr
197e0 6f 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  oy.</param>..   
197f0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
19800 64 65 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61  de void FinishBa
19810 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
19820 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
19830 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  up..        ).. 
19840 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
19850 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
19860 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
19870 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
19880 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
19890 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
198a0 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
198b0 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
198c0 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
198d0 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
198e0 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
198f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
19900 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
19910 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
19920 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
19930 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
19940 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
19950 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
19960 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
19970 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
19980 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
19990 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
199a0 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
199b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
199c0 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
199d0 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
199e0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
199f0 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
19a00 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
19a10 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
19a20 72 2e 22 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  r.");....#if !SQ
19a30 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
19a40 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
19a50 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
19a60 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
19a70 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
19a80 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nish_interop(han
19a90 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6c 73 65 0d  dlePtr);..#else.
19aa0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
19ab0 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
19ac0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
19ad0 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
19ae0 66 69 6e 69 73 68 28 68 61 6e 64 6c 65 50 74 72  finish(handlePtr
19af0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
19b00 20 20 20 20 68 61 6e 64 6c 65 2e 53 65 74 48 61      handle.SetHa
19b10 6e 64 6c 65 41 73 49 6e 76 61 6c 69 64 28 29 3b  ndleAsInvalid();
19b20 0d 0a 0d 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41  ....#if COUNT_HA
19b30 4e 44 4c 45 0d 0a 20 20 20 20 20 20 20 20 69 66  NDLE..        if
19b40 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((n == SQLiteEr
19b50 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28  rorCode.Ok) || (
19b60 6e 20 3d 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65  n == backup._ste
19b70 70 52 65 73 75 6c 74 29 29 20 68 61 6e 64 6c 65  pResult)) handle
19b80 2e 57 61 73 52 65 6c 65 61 73 65 64 4f 6b 28 29  .WasReleasedOk()
19b90 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
19ba0 20 20 20 20 20 69 66 20 28 28 6e 20 21 3d 20 53       if ((n != S
19bb0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
19bc0 6b 29 20 26 26 20 28 6e 20 21 3d 20 62 61 63 6b  k) && (n != back
19bd0 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29  up._stepResult))
19be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
19bf0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
19c00 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
19c10 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
19c20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
19c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
19c90 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
19ca0 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
19cb0 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  es if the SQLite
19cc0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
19cd0 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  s been initializ
19ce0 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ed for the..    
19cf0 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63  /// current proc
19d00 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
19d10 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
19d20 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
19d30 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69   /// A boolean i
19d40 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
19d50 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c  r or not the SQL
19d60 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
19d70 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f   has been..    /
19d80 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  // initialized f
19d90 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  or the current p
19da0 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
19db0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
19dc0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
19dd0 64 65 20 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61  de bool IsInitia
19de0 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a  lized()..    {..
19df0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
19e00 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a  taticIsInitializ
19e10 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ed();..    }....
19e20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
19e30 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
19e40 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c  mines if the SQL
19e50 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
19e60 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61   has been initia
19e70 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20  lized for the.. 
19e80 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70     /// current p
19e90 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
19ea0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
19eb0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
19ec0 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61      /// A boolea
19ed0 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  n indicating whe
19ee0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
19ef0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
19f00 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  ary has been..  
19f10 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65    /// initialize
19f20 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
19f30 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
19f40 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
19f50 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
19f60 74 69 63 20 62 6f 6f 6c 20 53 74 61 74 69 63 49  tic bool StaticI
19f70 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a  sInitialized()..
19f80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f      {..        /
19f90 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55  /..        // BU
19fa0 47 46 49 58 3a 20 50 72 65 76 65 6e 74 20 72 61  GFIX: Prevent ra
19fb0 63 65 73 20 77 69 74 68 20 6f 74 68 65 72 20 74  ces with other t
19fc0 68 72 65 61 64 73 20 66 6f 72 20 74 68 69 73 20  hreads for this 
19fd0 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75  entire block, du
19fe0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  e..        //   
19ff0 20 20 20 20 20 20 74 6f 20 74 68 65 20 74 72 79        to the try
1a000 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69  /finally semanti
1a010 63 73 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20  cs.  See ticket 
1a020 5b 37 32 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20  [72905c9a77]... 
1a030 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a040 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f     lock (syncRoo
1a050 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t)..        {.. 
1a060 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1a070 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1a080 54 45 3a 20 53 61 76 65 20 74 68 65 20 73 74 61  TE: Save the sta
1a090 74 65 20 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e  te of the loggin
1a0a0 67 20 63 6c 61 73 73 20 61 6e 64 20 74 68 65 6e  g class and then
1a0b0 20 72 65 73 74 6f 72 65 20 69 74 0d 0a 20 20 20   restore it..   
1a0c0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1a0d0 20 20 61 66 74 65 72 20 77 65 20 61 72 65 20 64    after we are d
1a0e0 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67  one to avoid log
1a0f0 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61  ging too many fa
1a100 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20  lse errors...   
1a110 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1a120 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61           bool sa
1a130 76 65 64 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c  vedEnabled = SQL
1a140 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d  iteLog.Enabled;.
1a150 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1a160 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d  iteLog.Enabled =
1a170 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
1a180 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
1a190 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a1a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a1c0 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6d 65 74  / NOTE: This met
1a1d0 68 6f 64 20 5b 61 62 5d 75 73 65 73 20 74 68 65  hod [ab]uses the
1a1e0 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69 74   fact that SQLit
1a1f0 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20  e will always.. 
1a200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a210 2f 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  /       return S
1a220 51 4c 49 54 45 5f 45 52 52 4f 52 20 66 6f 72 20  QLITE_ERROR for 
1a230 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66  any unknown conf
1a240 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
1a250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a260 20 20 2f 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65    //       *unle
1a270 73 73 2a 20 74 68 65 20 53 51 4c 69 74 65 20 6c  ss* the SQLite l
1a280 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 61  ibrary has alrea
1a290 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  dy been initiali
1a2a0 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  zed...          
1a2b0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49        //       I
1a2c0 6e 20 74 68 61 74 20 63 61 73 65 20 69 74 20 77  n that case it w
1a2d0 69 6c 6c 20 61 6c 77 61 79 73 20 72 65 74 75 72  ill always retur
1a2e0 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e  n SQLITE_MISUSE.
1a2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a300 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1a310 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1a320 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
1a330 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1a340 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f  qlite3_config_no
1a350 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
1a360 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
1a370 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c  onfigOpsEnum.SQL
1a380 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29  ITE_CONFIG_NONE)
1a390 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a3a0 20 20 20 20 20 72 65 74 75 72 6e 20 28 72 63 20       return (rc 
1a3b0 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
1a3c0 64 65 2e 4d 69 73 75 73 65 29 3b 0d 0a 20 20 20  de.Misuse);..   
1a3d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1a3e0 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
1a3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
1a420 64 20 3d 20 73 61 76 65 64 45 6e 61 62 6c 65 64  d = savedEnabled
1a430 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1a440 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1a450 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
1a460 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1a470 20 48 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e   Helper function
1a480 20 74 6f 20 72 65 74 72 69 65 76 65 20 61 20 63   to retrieve a c
1a490 6f 6c 75 6d 6e 20 6f 66 20 64 61 74 61 20 66 72  olumn of data fr
1a4a0 6f 6d 20 61 6e 20 61 63 74 69 76 65 20 73 74 61  om an active sta
1a4b0 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f  tement...    ///
1a4c0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1a4d0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1a4e0 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74  ="stmt">The stat
1a4f0 65 6d 65 6e 74 20 62 65 69 6e 67 20 73 74 65 70  ement being step
1a500 28 29 27 64 20 74 68 72 6f 75 67 68 3c 2f 70 61  ()'d through</pa
1a510 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
1a520 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73  aram name="flags
1a530 22 3e 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f  ">The flags asso
1a540 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1a550 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72  connection.</par
1a560 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
1a570 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22  ram name="index"
1a580 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  >The column inde
1a590 78 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70  x to retrieve</p
1a5a0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1a5b0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22  param name="typ"
1a5c0 3e 54 68 65 20 74 79 70 65 20 6f 66 20 64 61 74  >The type of dat
1a5d0 61 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  a contained in t
1a5e0 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55  he column.  If U
1a5f0 6e 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68  ninitialized, th
1a600 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c  is function will
1a610 20 72 65 74 72 69 65 76 65 20 74 68 65 20 64 61   retrieve the da
1a620 74 61 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69  tatype informati
1a630 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  on.</param>..   
1a640 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
1a650 74 75 72 6e 73 20 74 68 65 20 64 61 74 61 20 69  turns the data i
1a660 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65  n the column</re
1a670 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
1a680 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62  rnal override ob
1a690 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 53 51  ject GetValue(SQ
1a6a0 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
1a6b0 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
1a6c0 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
1a6d0 20 69 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69   int index, SQLi
1a6e0 74 65 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20  teType typ)..   
1a6f0 20 7b 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66   {..      TypeAf
1a700 66 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70  finity aff = typ
1a710 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20  .Affinity;..    
1a720 20 20 69 66 20 28 61 66 66 20 3d 3d 20 54 79 70    if (aff == Typ
1a730 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 20  eAffinity.Null) 
1a740 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61  return DBNull.Va
1a750 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65  lue;..      Type
1a760 20 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20   t = null;....  
1a770 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65      if (typ.Type
1a780 20 21 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63   != DbType.Objec
1a790 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  t)..      {..   
1a7a0 20 20 20 20 20 74 20 3d 20 53 51 4c 69 74 65 43       t = SQLiteC
1a7b0 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70  onvert.SQLiteTyp
1a7c0 65 54 6f 54 79 70 65 28 74 79 70 29 3b 0d 0a 20  eToType(typ);.. 
1a7d0 20 20 20 20 20 20 20 61 66 66 20 3d 20 54 79 70         aff = Typ
1a7e0 65 54 6f 41 66 66 69 6e 69 74 79 28 74 29 3b 0d  eToAffinity(t);.
1a7f0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
1a800 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
1a810 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
1a820 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78  lags.GetAllAsTex
1a830 74 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  t) == SQLiteConn
1a840 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41  ectionFlags.GetA
1a850 6c 6c 41 73 54 65 78 74 29 0d 0a 20 20 20 20 20  llAsText)..     
1a860 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 54       return GetT
1a870 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
1a880 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63  ;....      switc
1a890 68 20 28 61 66 66 29 0d 0a 20 20 20 20 20 20 7b  h (aff)..      {
1a8a0 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
1a8b0 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
1a8c0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  :..          if 
1a8d0 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54  (typ.Type == DbT
1a8e0 79 70 65 2e 47 75 69 64 20 26 26 20 74 79 70 2e  ype.Guid && typ.
1a8f0 41 66 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65  Affinity == Type
1a900 41 66 66 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a  Affinity.Text)..
1a910 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1a920 72 6e 20 6e 65 77 20 47 75 69 64 28 47 65 74 54  rn new Guid(GetT
1a930 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
1a940 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a950 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 47 65 74  int n = (int)Get
1a960 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65  Bytes(stmt, inde
1a970 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30  x, 0, null, 0, 0
1a980 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79  );..          by
1a990 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79 74  te[] b = new byt
1a9a0 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  e[n];..         
1a9b0 20 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20   GetBytes(stmt, 
1a9c0 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20  index, 0, b, 0, 
1a9d0 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
1a9e0 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d   if (typ.Type ==
1a9f0 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20   DbType.Guid && 
1aa00 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20 20  n == 16)..      
1aa10 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
1aa20 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20   Guid(b);....   
1aa30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 3b         return b;
1aa40 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
1aa50 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65  ypeAffinity.Date
1aa60 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  Time:..         
1aa70 20 72 65 74 75 72 6e 20 47 65 74 44 61 74 65 54   return GetDateT
1aa80 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ime(stmt, index)
1aa90 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
1aaa0 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
1aab0 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ble:..          
1aac0 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  if (t == null) r
1aad0 65 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28  eturn GetDouble(
1aae0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
1aaf0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1ab00 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79  Convert.ChangeTy
1ab10 70 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d  pe(GetDouble(stm
1ab20 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75  t, index), t, nu
1ab30 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  ll);..        ca
1ab40 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
1ab50 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20  Int64:..        
1ab60 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29    if (t == null)
1ab70 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34   return GetInt64
1ab80 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
1ab90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
1aba0 3d 3d 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61  == typeof(Boolea
1abb0 6e 29 29 20 72 65 74 75 72 6e 20 47 65 74 42 6f  n)) return GetBo
1abc0 6f 6c 65 61 6e 28 73 74 6d 74 2c 20 69 6e 64 65  olean(stmt, inde
1abd0 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
1abe0 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 53  f (t == typeof(S
1abf0 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47 65  Byte)) return Ge
1ac00 74 53 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64  tSByte(stmt, ind
1ac10 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
1ac20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
1ac30 42 79 74 65 29 29 20 72 65 74 75 72 6e 20 47 65  Byte)) return Ge
1ac40 74 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65  tByte(stmt, inde
1ac50 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
1ac60 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49  f (t == typeof(I
1ac70 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20 47 65  nt16)) return Ge
1ac80 74 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64  tInt16(stmt, ind
1ac90 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
1aca0 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
1acb0 55 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20  UInt16)) return 
1acc0 47 65 74 55 49 6e 74 31 36 28 73 74 6d 74 2c 20  GetUInt16(stmt, 
1acd0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
1ace0 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
1acf0 6f 66 28 49 6e 74 33 32 29 29 20 72 65 74 75 72  of(Int32)) retur
1ad00 6e 20 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  n GetInt32(stmt,
1ad10 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
1ad20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
1ad30 65 6f 66 28 55 49 6e 74 33 32 29 29 20 72 65 74  eof(UInt32)) ret
1ad40 75 72 6e 20 47 65 74 55 49 6e 74 33 32 28 73 74  urn GetUInt32(st
1ad50 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
1ad60 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
1ad70 74 79 70 65 6f 66 28 49 6e 74 36 34 29 29 20 72  typeof(Int64)) r
1ad80 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73  eturn GetInt64(s
1ad90 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
1ada0 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
1adb0 20 74 79 70 65 6f 66 28 55 49 6e 74 36 34 29 29   typeof(UInt64))
1adc0 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 36   return GetUInt6
1add0 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  4(stmt, index);.
1ade0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
1adf0 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65  n Convert.Change
1ae00 54 79 70 65 28 47 65 74 49 6e 74 36 34 28 73 74  Type(GetInt64(st
1ae10 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e  mt, index), t, n
1ae20 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64  ull);..        d
1ae30 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
1ae40 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78     return GetTex
1ae50 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
1ae60 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1ae70 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1ae80 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
1ae90 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53  CursorForTable(S
1aea0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
1aeb0 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74  tmt, int db, int
1aec0 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20   rootPage)..    
1aed0 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
1aee0 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72  TANDARD..      r
1aef0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
1af00 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1af10 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69  3_table_cursor_i
1af20 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
1af30 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f  ite_stmt, db, ro
1af40 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d  otPage);..#else.
1af50 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31  .      return -1
1af60 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
1af70 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
1af80 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
1af90 65 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72  etRowIdForCursor
1afa0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
1afb0 20 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f   stmt, int curso
1afc0 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  r)..    {..#if !
1afd0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
1afe0 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69  .      long rowi
1aff0 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51  d = 0;..      SQ
1b000 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
1b010 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
1b020 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
1b030 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65  ursor_rowid_inte
1b040 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
1b050 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 72  _stmt, cursor, r
1b060 65 66 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20  ef rowid);..    
1b070 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69    if (rc == SQLi
1b080 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
1b090 72 65 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d  return rowid;...
1b0a0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
1b0b0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
1b0c0 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66  eturn 0;..#endif
1b0d0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1b0e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1b0f0 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f   void GetIndexCo
1b100 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f  lumnExtendedInfo
1b110 28 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65  (string database
1b120 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20  , string index, 
1b130 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72  string column, r
1b140 65 66 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c  ef int sortMode,
1b150 20 72 65 66 20 69 6e 74 20 6f 6e 45 72 72 6f 72   ref int onError
1b160 2c 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f 6c  , ref string col
1b170 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d  lationSequence).
1b180 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
1b190 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
1b1a0 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 20      IntPtr coll 
1b1b0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
1b1c0 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65        int collle
1b1d0 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51  n = 0;..      SQ
1b1e0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
1b1f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d 20  ;....      rc = 
1b200 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1b210 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
1b220 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e  x_column_info_in
1b230 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
1b240 46 38 28 64 61 74 61 62 61 73 65 29 2c 20 54 6f  F8(database), To
1b250 55 54 46 38 28 69 6e 64 65 78 29 2c 20 54 6f 55  UTF8(index), ToU
1b260 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66  TF8(column), ref
1b270 20 73 6f 72 74 4d 6f 64 65 2c 20 72 65 66 20 6f   sortMode, ref o
1b280 6e 45 72 72 6f 72 2c 20 72 65 66 20 63 6f 6c 6c  nError, ref coll
1b290 2c 20 72 65 66 20 63 6f 6c 6c 6c 65 6e 29 3b 0d  , ref colllen);.
1b2a0 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d  .      if (rc !=
1b2b0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1b2c0 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
1b2d0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
1b2e0 63 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  c, null);....   
1b2f0 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     collationSequ
1b300 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72  ence = UTF8ToStr
1b310 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65  ing(coll, collle
1b320 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
1b330 20 20 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d    sortMode = 0;.
1b340 0a 20 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d  .      onError =
1b350 20 32 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61   2;..      colla
1b360 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22  tionSequence = "
1b370 42 49 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66  BINARY";..#endif
1b380 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1b390 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1b3a0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1b3b0 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72   FileControl(str
1b3c0 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74  ing zDbName, int
1b3d0 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67   op, IntPtr pArg
1b3e0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1b3f0 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
1b400 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1b410 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
1b420 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21  _sql, (zDbName !
1b430 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38  = null) ? ToUTF8
1b440 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c  (zDbName) : null
1b450 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20  , op, pArg);..  
1b460 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a             }..  }..}..