System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 2228b4ab8f54312813d5436f1113a2c02c7f2973:


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 36 2e 30 22 3b 0d 0a 23   "1.0.106.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 20  T_46 || NET_461 
0ac0: 7c 7c 20 4e 45 54 5f 34 36 32 29 20 26 26 20 21  || NET_462) && !
0ad0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
0ae0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 70  FRAMEWORK..    p
0af0: 72 69 76 61 74 65 20 62 6f 6f 6c 20 5f 62 75 69  rivate bool _bui
0b00: 6c 64 69 6e 67 53 63 68 65 6d 61 3b 0d 0a 23 65  ldingSchema;..#e
0b10: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ndif....    /// 
0b20: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
0b30: 2f 2f 20 54 68 65 20 75 73 65 72 2d 64 65 66 69  // The user-defi
0b40: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 72 65  ned functions re
0b50: 67 69 73 74 65 72 65 64 20 6f 6e 20 74 68 69 73  gistered on this
0b60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20   connection..   
0b70: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0b80: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 44  .    protected D
0b90: 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65  ictionary<SQLite
0ba0: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
0bb0: 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  e, SQLiteFunctio
0bc0: 6e 3e 20 5f 66 75 6e 63 74 69 6f 6e 73 3b 0d 0a  n> _functions;..
0bd0: 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49  ..#if INTEROP_VI
0be0: 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20  RTUAL_TABLE..   
0bf0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0c00: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20      /// This is 
0c10: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
0c20: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 66  native library f
0c30: 69 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ile that contain
0c40: 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 22  s the..    /// "
0c50: 76 74 73 68 69 6d 22 20 65 78 74 65 6e 73 69 6f  vtshim" extensio
0c60: 6e 20 5b 77 72 61 70 70 65 72 5d 2e 0d 0a 20 20  n [wrapper]...  
0c70: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0c80: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
0c90: 73 74 72 69 6e 67 20 5f 73 68 69 6d 45 78 74 65  string _shimExte
0ca0: 6e 73 69 6f 6e 46 69 6c 65 4e 61 6d 65 20 3d 20  nsionFileName = 
0cb0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  null;....    ///
0cc0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0cd0: 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65 20  /// This is the 
0ce0: 66 6c 61 67 20 69 6e 64 69 63 61 74 65 20 77 68  flag indicate wh
0cf0: 65 74 68 65 72 20 74 68 65 20 6e 61 74 69 76 65  ether the native
0d00: 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 74 68   library file th
0d10: 61 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 74  at..    /// cont
0d20: 61 69 6e 73 20 74 68 65 20 22 76 74 73 68 69 6d  ains the "vtshim
0d30: 22 20 65 78 74 65 6e 73 69 6f 6e 20 6d 75 73 74  " extension must
0d40: 20 62 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   be dynamically 
0d50: 6c 6f 61 64 65 64 20 62 79 0d 0a 20 20 20 20 2f  loaded by..    /
0d60: 2f 2f 20 74 68 69 73 20 63 6c 61 73 73 20 70 72  // this class pr
0d70: 69 6f 72 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20  ior to use...   
0d80: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0d90: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 62  .    protected b
0da0: 6f 6f 6c 3f 20 5f 73 68 69 6d 49 73 4c 6f 61 64  ool? _shimIsLoad
0db0: 4e 65 65 64 65 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  Needed = null;..
0dc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0dd0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
0de0: 73 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  s is the name of
0df0: 20 74 68 65 20 6e 61 74 69 76 65 20 65 6e 74 72   the native entr
0e00: 79 20 70 6f 69 6e 74 20 66 6f 72 20 74 68 65 20  y point for the 
0e10: 22 76 74 73 68 69 6d 22 0d 0a 20 20 20 20 2f 2f  "vtshim"..    //
0e20: 2f 20 65 78 74 65 6e 73 69 6f 6e 20 5b 77 72 61  / extension [wra
0e30: 70 70 65 72 5d 2e 0d 0a 20 20 20 20 2f 2f 2f 20  pper]...    /// 
0e40: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0e50: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
0e60: 20 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 50   _shimExtensionP
0e70: 72 6f 63 4e 61 6d 65 20 3d 20 22 73 71 6c 69 74  rocName = "sqlit
0e80: 65 33 5f 76 74 73 68 69 6d 5f 69 6e 69 74 22 3b  e3_vtshim_init";
0e90: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0ea0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
0eb0: 68 65 20 6d 6f 64 75 6c 65 73 20 63 72 65 61 74  he modules creat
0ec0: 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 63 6f  ed using this co
0ed0: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
0ee0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0ef0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 44 69 63     protected Dic
0f00: 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20  tionary<string, 
0f10: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d  SQLiteModule> _m
0f20: 6f 64 75 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d  odules;..#endif.
0f30: 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
0fa0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0fb0: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
0fc0: 74 68 65 20 6f 62 6a 65 63 74 20 75 73 65 64 20  the object used 
0fd0: 74 6f 20 69 6e 74 65 72 61 63 74 20 77 69 74 68  to interact with
0fe0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
0ff0: 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f   library..    //
1000: 2f 20 75 73 69 6e 67 20 74 68 65 20 55 54 46 2d  / using the UTF-
1010: 38 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  8 text encoding.
1020: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1030: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
1040: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e  aram name="fmt">
1050: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 44 61  ..    /// The Da
1060: 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f  teTime format to
1070: 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 6f   be used when co
1080: 6e 76 65 72 74 69 6e 67 20 73 74 72 69 6e 67 20  nverting string 
1090: 76 61 6c 75 65 73 20 74 6f 20 61 0d 0a 20 20 20  values to a..   
10a0: 20 2f 2f 2f 20 44 61 74 65 54 69 6d 65 20 61 6e   /// DateTime an
10b0: 64 20 62 69 6e 64 69 6e 67 20 44 61 74 65 54 69  d binding DateTi
10c0: 6d 65 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a  me parameters...
10d0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
10e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
10f0: 20 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20   name="kind">.. 
1100: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
1110: 63 72 65 66 3d 22 44 61 74 65 54 69 6d 65 4b 69  cref="DateTimeKi
1120: 6e 64 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65  nd" /> to be use
1130: 64 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20  d when creating 
1140: 44 61 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f  DateTime..    //
1150: 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f  / values...    /
1160: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1170: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1180: 3d 22 66 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20  ="fmtString">.. 
1190: 20 20 20 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61     /// The forma
11a0: 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20 75  t string to be u
11b0: 73 65 64 20 77 68 65 6e 20 70 61 72 73 69 6e 67  sed when parsing
11c0: 20 61 6e 64 20 66 6f 72 6d 61 74 74 69 6e 67 20   and formatting 
11d0: 44 61 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f  DateTime..    //
11e0: 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f  / values...    /
11f0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1200: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1210: 3d 22 64 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ="db">..    /// 
1220: 54 68 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c  The native handl
1230: 65 20 74 6f 20 62 65 20 61 73 73 6f 63 69 61 74  e to be associat
1240: 65 64 20 77 69 74 68 20 74 68 65 20 64 61 74 61  ed with the data
1250: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
1260: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1270: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
1280: 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d  am name="fileNam
1290: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
12a0: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
12b0: 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63   file name assoc
12c0: 69 61 74 65 64 20 77 69 74 68 20 3c 70 61 72 61  iated with <para
12d0: 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f  mref name="db "/
12e0: 3e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  >...    /// </pa
12f0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
1300: 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61  aram name="ownHa
1310: 6e 64 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ndle">..    /// 
1320: 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  Non-zero if the 
1330: 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20 6f 62  newly created ob
1340: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 77 69  ject instance wi
1350: 6c 6c 20 6e 65 65 64 20 74 6f 20 64 69 73 70 6f  ll need to dispo
1360: 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c  se..    /// of <
1370: 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64  paramref name="d
1380: 62 22 20 2f 3e 20 77 68 65 6e 20 69 74 20 69 73  b" /> when it is
1390: 20 6e 6f 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65   no longer neede
13a0: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
13b0: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
13c0: 61 6c 20 53 51 4c 69 74 65 33 28 0d 0a 20 20 20  al SQLite3(..   
13d0: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 65 46       SQLiteDateF
13e0: 6f 72 6d 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20  ormats fmt,..   
13f0: 20 20 20 20 20 44 61 74 65 54 69 6d 65 4b 69 6e       DateTimeKin
1400: 64 20 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20  d kind,..       
1410: 20 73 74 72 69 6e 67 20 66 6d 74 53 74 72 69 6e   string fmtStrin
1420: 67 2c 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  g,..        IntP
1430: 74 72 20 64 62 2c 0d 0a 20 20 20 20 20 20 20 20  tr db,..        
1440: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
1450: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f  ..        bool o
1460: 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20  wnHandle..      
1470: 20 20 29 0d 0a 20 20 20 20 20 20 3a 20 62 61 73    )..      : bas
1480: 65 28 66 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74  e(fmt, kind, fmt
1490: 53 74 72 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a  String)..    {..
14a0: 20 20 20 20 20 20 20 20 69 66 20 28 64 62 20 21          if (db !
14b0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
14c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14d0: 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65         _sql = ne
14e0: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
14f0: 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e  onHandle(db, own
1500: 48 61 6e 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20  Handle);..      
1510: 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20        _fileName 
1520: 3d 20 66 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  = fileName;.... 
1530: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1540: 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68  eConnection.OnCh
1550: 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20  anged(null, new 
1560: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
1570: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
1580: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
1590: 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
15a0: 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  NewCriticalHandl
15b0: 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  e, null,..      
15c0: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
15d0: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c  null, null, _sql
15e0: 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20  , fileName, new 
15f0: 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20  object[] {..    
1600: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
1610: 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 66 6d 74  of(SQLite3), fmt
1620: 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e  , kind, fmtStrin
1630: 67 2c 20 64 62 2c 20 66 69 6c 65 4e 61 6d 65 2c  g, db, fileName,
1640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1650: 20 20 6f 77 6e 48 61 6e 64 6c 65 20 7d 29 29 3b    ownHandle }));
1660: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1670: 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f  ////////////////
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
16e0: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
16f0: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
1700: 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76  embers..    priv
1710: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
1720: 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  d;..    private 
1730: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
1740: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
1750: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52  ..    {..#if THR
1760: 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a  OW_ON_DISPOSED..
1770: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
1780: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
1790: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
17a0: 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
17b0: 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69  tion(typeof(SQLi
17c0: 74 65 33 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e  te3).Name);..#en
17d0: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
17e0: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1840: 2f 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  /....    protect
1850: 65 64 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  ed override void
1860: 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69   Dispose(bool di
1870: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d  sposing)..    {.
1880: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
1890: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18a0: 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
18b0: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
18c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18d0: 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73      //if (dispos
18e0: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
18f0: 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20        //{..     
1900: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1910: 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1940: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20         //    // 
1950: 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
1960: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
1970: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1980: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
19b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19c0: 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  /}....          
19d0: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a10: 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
1a20: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
1a30: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
1a40: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1a70: 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54  #if INTEROP_VIRT
1a80: 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20  UAL_TABLE..     
1a90: 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f             Dispo
1aa0: 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65  seModules();..#e
1ab0: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
1ac0: 20 20 20 20 20 20 20 20 43 6c 6f 73 65 28 66 61          Close(fa
1ad0: 6c 73 65 29 3b 20 2f 2a 20 44 69 73 70 6f 73 69  lse); /* Disposi
1ae0: 6e 67 2c 20 63 61 6e 6e 6f 74 20 74 68 72 6f 77  ng, cannot throw
1af0: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
1b00: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1b10: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
1b20: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1b30: 20 20 20 20 20 20 20 20 62 61 73 65 2e 44 69 73          base.Dis
1b40: 70 6f 73 65 28 64 69 73 70 6f 73 69 6e 67 29 3b  pose(disposing);
1b50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b60: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1b70: 2f 2f 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 68  // NOTE: Everyth
1b80: 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66 75  ing should be fu
1b90: 6c 6c 79 20 64 69 73 70 6f 73 65 64 20 61 74 20  lly disposed at 
1ba0: 74 68 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20  this point...   
1bb0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1bc0: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
1bd0: 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
1be0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20     }..    }..   
1bf0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1c00: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c60: 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  //....#if INTERO
1c70: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
1c80: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1c90: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
1ca0: 20 6d 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73   method attempts
1cb0: 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 61   to dispose of a
1cc0: 6c 6c 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ll the <see cref
1cd0: 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20  ="SQLiteModule" 
1ce0: 2f 3e 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20  /> derived..    
1cf0: 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  /// object insta
1d00: 6e 63 65 73 20 63 75 72 72 65 6e 74 6c 79 20 61  nces currently a
1d10: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1d20: 68 65 20 6e 61 74 69 76 65 20 64 61 74 61 62 61  he native databa
1d30: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
1d40: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1d50: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
1d60: 76 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75  void DisposeModu
1d70: 6c 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  les()..    {..  
1d80: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1d90: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61 6e    // NOTE: If an
1da0: 79 20 6d 6f 64 75 6c 65 73 20 77 65 72 65 20 63  y modules were c
1db0: 72 65 61 74 65 64 2c 20 61 74 74 65 6d 70 74 20  reated, attempt 
1dc0: 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 0d 0a 20  to dispose of.. 
1dd0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1de0: 74 68 65 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20  them now.  This 
1df0: 63 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65 64  code is designed
1e00: 20 74 6f 20 61 76 6f 69 64 20 74 68 72 6f 77 69   to avoid throwi
1e10: 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  ng..        //  
1e20: 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 73 20       exceptions 
1e30: 75 6e 6c 65 73 73 20 74 68 65 20 44 69 73 70 6f  unless the Dispo
1e40: 73 65 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  se method of the
1e50: 20 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20   module..       
1e60: 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66   //       itself
1e70: 20 74 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70   throws an excep
1e80: 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
1e90: 2f 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  /..        if (_
1ea0: 6d 6f 64 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29  modules != null)
1eb0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1ec0: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
1ed0: 20 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73   (KeyValuePair<s
1ee0: 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64  tring, SQLiteMod
1ef0: 75 6c 65 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f  ule> pair in _mo
1f00: 64 75 6c 65 73 29 0d 0a 20 20 20 20 20 20 20 20  dules)..        
1f10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f20: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64         SQLiteMod
1f30: 75 6c 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69  ule module = pai
1f40: 72 2e 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  r.Value;....    
1f50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1f60: 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
1f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f80: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fa0: 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65    module.Dispose
1fb0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
1fc0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1fd0: 20 20 5f 6d 6f 64 75 6c 65 73 2e 43 6c 65 61 72    _modules.Clear
1fe0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ();..        }..
1ff0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
2000: 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
2060: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49  ////....    // I
2070: 74 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72  t isn't necessar
2080: 79 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79  y to cleanup any
2090: 20 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65   functions we've
20a0: 20 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66   registered.  If
20b0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d   the connection.
20c0: 0a 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20  .    // goes to 
20d0: 74 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20  the pool and is 
20e0: 72 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65  resurrected late
20f0: 72 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64  r, re-registered
2100: 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
2110: 6f 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20  overwrite the.. 
2120: 20 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66     // previous f
2130: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53  unctions.  The S
2140: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f  QLiteFunctionCoo
2150: 6b 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74  kieHandle will t
2160: 61 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65  ake care of free
2170: 69 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20  ing unmanaged.. 
2180: 20 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20     // resources 
2190: 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65  belonging to the
21a0: 20 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69   previously-regi
21b0: 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73  stered functions
21c0: 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
21d0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c  override void Cl
21e0: 6f 73 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f  ose(bool canThro
21f0: 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  w)..    {..     
2200: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
2210: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
2220: 20 20 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c         if (!_sql
2230: 2e 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20  .OwnHandle)..   
2240: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2250: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
2260: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
2270: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20      return;..   
2280: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2290: 20 20 20 20 20 20 62 6f 6f 6c 20 75 6e 62 69 6e        bool unbin
22a0: 64 46 75 6e 63 74 69 6f 6e 73 20 3d 20 28 28 5f  dFunctions = ((_
22b0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
22c0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e  nnectionFlags.Un
22d0: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43  bindFunctionsOnC
22e0: 6c 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lose)..         
22f0: 20 20 20 20 20 20 20 3d 3d 20 53 51 4c 69 74 65         == SQLite
2300: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
2310: 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 4f  UnbindFunctionsO
2320: 6e 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  nClose);....    
2330: 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f        if (_usePo
2340: 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ol)..          {
2350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2360: 69 66 20 28 53 51 4c 69 74 65 42 61 73 65 2e 52  if (SQLiteBase.R
2370: 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f  esetConnection(_
2380: 73 71 6c 2c 20 5f 73 71 6c 2c 20 63 61 6e 54 68  sql, _sql, canTh
2390: 72 6f 77 29 29 0d 0a 20 20 20 20 20 20 20 20 20  row))..         
23a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 6e            if (un
23c0: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a  bindFunctions)..
23d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
2400: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e  QLiteFunction.Un
2410: 62 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f 6e 73  bindAllFunctions
2420: 28 74 68 69 73 2c 20 5f 66 6c 61 67 73 2c 20 66  (this, _flags, f
2430: 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  alse))..        
2440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2450: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
2460: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
2470: 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
2480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2490: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
24a0: 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
24b0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
24c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
24e0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
24f0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2510: 20 20 20 20 20 20 20 20 20 20 22 55 6e 62 69 6e            "Unbin
2520: 64 46 75 6e 63 74 69 6f 6e 73 20 28 50 6f 6f 6c  dFunctions (Pool
2530: 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c  ) Success: {0}",
2540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2560: 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29  HandleToString()
2570: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
2580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2590: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
25b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c0: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
25d0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
25e0: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
25f0: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
2600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2610: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
2620: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
2630: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
2640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2650: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
2660: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
2670: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
2680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2690: 20 20 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74      "UnbindFunct
26a0: 69 6f 6e 73 20 28 50 6f 6f 6c 29 20 46 61 69 6c  ions (Pool) Fail
26b0: 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ure: {0}",..    
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d0: 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
26e0: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
26f0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2720: 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52    }....#if INTER
2730: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
2740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2750: 20 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c      DisposeModul
2760: 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  es();..#endif...
2770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2780: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
2790: 69 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c  ionPool.Add(_fil
27a0: 65 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f  eName, _sql, _po
27b0: 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20  olVersion);.... 
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
27e0: 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c  n.OnChanged(null
27f0: 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e  , new Connection
2800: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2820: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
2830: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
2840: 65 64 54 6f 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20  edToPool, null, 
2850: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
2870: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 5f  l, null, _sql, _
2880: 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62  fileName, new ob
2890: 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ject[] {..      
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b0: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c  typeof(SQLite3),
28c0: 20 63 61 6e 54 68 72 6f 77 2c 20 5f 66 69 6c 65   canThrow, _file
28d0: 4e 61 6d 65 2c 20 5f 70 6f 6f 6c 56 65 72 73 69  Name, _poolVersi
28e0: 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23 69 66 20 21  on }));....#if !
28f0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2900: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2910: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
2920: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
2930: 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68  eLine(HelperMeth
2940: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
2950: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2960: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
2970: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
2980: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
2990: 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6c 6f              "Clo
29a0: 73 65 20 28 50 6f 6f 6c 29 20 53 75 63 63 65 73  se (Pool) Succes
29b0: 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  s: {0}",..      
29c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d0: 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29  HandleToString()
29e0: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
29f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69             }..#i
2a00: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
2a10: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
2a20: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
2a30: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
2a40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2a60: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
2a70: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
2a80: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
2ab0: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
2ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad0: 20 20 20 20 22 43 6c 6f 73 65 20 28 50 6f 6f 6c      "Close (Pool
2ae0: 29 20 46 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c  ) Failure: {0}",
2af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b00: 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f          HandleTo
2b10: 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 20 20 20  String()));..   
2b20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
2b30: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
2b40: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
2b50: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  e..          {..
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2b70: 20 28 75 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e   (unbindFunction
2b80: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
2b90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ba0: 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74         if (SQLit
2bb0: 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69 6e 64  eFunction.Unbind
2bc0: 41 6c 6c 46 75 6e 63 74 69 6f 6e 73 28 74 68 69  AllFunctions(thi
2bd0: 73 2c 20 5f 66 6c 61 67 73 2c 20 66 61 6c 73 65  s, _flags, false
2be0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2bf0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45        {..#if !NE
2c00: 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
2c10: 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
2c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c30: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2c40: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
2c50: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
2c60: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
2c80: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
2c90: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
2ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb0: 20 20 20 20 20 20 22 55 6e 62 69 6e 64 46 75 6e        "UnbindFun
2cc0: 63 74 69 6f 6e 73 20 53 75 63 63 65 73 73 3a 20  ctions Success: 
2cd0: 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf0: 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28   HandleToString(
2d00: 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  )));..#endif..  
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d20: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2d30: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2d50: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
2d60: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
2d70: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2d90: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48  race.WriteLine(H
2da0: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
2db0: 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
2dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd0: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
2de0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
2df0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e               "Un
2e10: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 46 61  bindFunctions Fa
2e20: 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ilure: {0}",..  
2e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e40: 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f          HandleTo
2e50: 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e  String()));..#en
2e60: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
2e70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2e80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2e90: 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2e             _sql.
2ea0: 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
2eb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2ec0: 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d     _sql = null;.
2ed0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2ee0: 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
2f40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 21 4e  //////....#if !N
2f50: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
2f60: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
2f70: 4e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  N..    protected
2f80: 20 73 74 72 69 6e 67 20 48 61 6e 64 6c 65 54 6f   string HandleTo
2f90: 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 7b 0d  String()..    {.
2fa0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71  .        if (_sq
2fb0: 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l == null)..    
2fc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
2fd0: 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20  <null>";....    
2fe0: 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71 6c 2e      return _sql.
2ff0: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
3000: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
3010: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3070: 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
3080: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3090: 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  Returns the numb
30a0: 65 72 20 6f 66 20 74 69 6d 65 73 20 74 68 65 20  er of times the 
30b0: 3c 73 65 65 20 63 72 65 66 3d 22 43 61 6e 63 65  <see cref="Cance
30c0: 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 20 68 61 73  l" /> method has
30d0: 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 63   been..    /// c
30e0: 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alled...    /// 
30f0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3100: 70 72 69 76 61 74 65 20 69 6e 74 20 47 65 74 43  private int GetC
3110: 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d 0a 20 20  ancelCount()..  
3120: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
3130: 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e  urn Interlocked.
3140: 43 6f 6d 70 61 72 65 45 78 63 68 61 6e 67 65 28  CompareExchange(
3150: 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74  ref _cancelCount
3160: 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 7d 0d  , 0, 0);..    }.
3170: 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
31d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
31e0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
31f0: 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
3200: 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
3210: 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 3c 73 65  her or not a <se
3220: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45 78  e cref="SQLiteEx
3230: 63 65 70 74 69 6f 6e 22 20 2f 3e 0d 0a 20 20 20  ception" />..   
3240: 20 2f 2f 2f 20 77 69 74 68 20 61 20 72 65 74 75   /// with a retu
3250: 72 6e 20 63 6f 64 65 20 6f 66 20 3c 73 65 65 20  rn code of <see 
3260: 63 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f  cref="SQLiteErro
3270: 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 22  rCode.Interrupt"
3280: 20 2f 3e 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20   /> should..    
3290: 2f 2f 2f 20 62 65 20 74 68 72 6f 77 6e 20 61 66  /// be thrown af
32a0: 74 65 72 20 6d 61 6b 69 6e 67 20 61 20 63 61 6c  ter making a cal
32b0: 6c 20 69 6e 74 6f 20 74 68 65 20 53 51 4c 69 74  l into the SQLit
32c0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
32d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
32e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
32f0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
3300: 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 3c 73  Non-zero if a <s
3310: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45  ee cref="SQLiteE
3320: 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20 74 6f 20  xception" /> to 
3330: 62 65 20 74 68 72 6f 77 6e 2e 20 20 54 68 69 73  be thrown.  This
3340: 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 2f 2f 2f   method..    ///
3350: 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 65 74 75 72   will only retur
3360: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  n non-zero if th
3370: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 61 6e  e <see cref="Can
3380: 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 20 77  cel" /> method w
3390: 61 73 20 63 61 6c 6c 65 64 0d 0a 20 20 20 20 2f  as called..    /
33a0: 2f 2f 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  // one or more t
33b0: 69 6d 65 73 20 64 75 72 69 6e 67 20 61 20 63 61  imes during a ca
33c0: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53 51 4c 69  ll into the SQLi
33d0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
33e0: 28 65 2e 67 2e 20 77 68 65 6e 0d 0a 20 20 20 20  (e.g. when..    
33f0: 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74 65 33 5f  /// the sqlite3_
3400: 70 72 65 70 61 72 65 2a 28 29 20 6f 72 20 73 71  prepare*() or sq
3410: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 41 50 49  lite3_step() API
3420: 73 20 61 72 65 20 75 73 65 64 29 2e 0d 0a 20 20  s are used)...  
3430: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
3440: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f  ..    private bo
3450: 6f 6c 20 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f  ol ShouldThrowFo
3460: 72 43 61 6e 63 65 6c 28 29 0d 0a 20 20 20 20 7b  rCancel()..    {
3470: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3480: 20 47 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28   GetCancelCount(
3490: 29 20 3e 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ) > 0;..    }...
34a0: 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
3500: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
3510: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
3520: 2f 2f 20 52 65 73 65 74 73 20 74 68 65 20 76 61  // Resets the va
3530: 6c 75 65 20 6f 66 20 74 68 65 20 3c 73 65 65 20  lue of the <see 
3540: 63 72 65 66 3d 22 5f 63 61 6e 63 65 6c 43 6f 75  cref="_cancelCou
3550: 6e 74 22 20 2f 3e 20 66 69 65 6c 64 2e 0d 0a 20  nt" /> field... 
3560: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3570: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 69  >..    private i
3580: 6e 74 20 52 65 73 65 74 43 61 6e 63 65 6c 43 6f  nt ResetCancelCo
3590: 75 6e 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  unt()..    {..  
35a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
35b0: 65 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70 61 72 65  erlocked.Compare
35c0: 45 78 63 68 61 6e 67 65 28 72 65 66 20 5f 63 61  Exchange(ref _ca
35d0: 6e 63 65 6c 43 6f 75 6e 74 2c 20 30 2c 20 5f 63  ncelCount, 0, _c
35e0: 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a 20 20  ancelCount);..  
35f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3660: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
3670: 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74  .    /// Attempt
3680: 73 20 74 6f 20 69 6e 74 65 72 72 75 70 74 20 74  s to interrupt t
3690: 68 65 20 71 75 65 72 79 20 63 75 72 72 65 6e 74  he query current
36a0: 6c 79 20 65 78 65 63 75 74 69 6e 67 20 6f 6e 20  ly executing on 
36b0: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  the associated..
36c0: 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 64      /// native d
36d0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
36e0: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
36f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74  ummary>..    int
3700: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
3710: 6f 69 64 20 43 61 6e 63 65 6c 28 29 0d 0a 20 20  oid Cancel()..  
3720: 20 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a    {..      try..
3730: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3740: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
3750: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
3760: 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
3770: 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
3780: 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
3790: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37a0: 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63   Interlocked.Inc
37b0: 72 65 6d 65 6e 74 28 72 65 66 20 5f 63 61 6e 63  rement(ref _canc
37c0: 65 6c 43 6f 75 6e 74 29 3b 0d 0a 20 20 20 20 20  elCount);..     
37d0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
37e0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
37f0: 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29 3b 0d  nterrupt(_sql);.
3800: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3810: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
3820: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
3830: 69 73 20 66 75 6e 63 74 69 6f 6e 20 62 69 6e 64  is function bind
3840: 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  s a user-defined
3850: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65   function to the
3860: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
3870: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3880: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
3890: 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 41   name="functionA
38a0: 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20 20 20  ttribute">..    
38b0: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
38c0: 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  f="SQLiteFunctio
38d0: 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20 6f 62  nAttribute"/> ob
38e0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 63 6f  ject instance co
38f0: 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 2f 2f  ntaining..    //
3900: 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61 20 66  / the metadata f
3910: 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  or the function 
3920: 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20 20  to be bound...  
3930: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
3940: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
3950: 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22 3e 0d  ame="function">.
3960: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  .    /// The <se
3970: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
3980: 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65 63 74  nction"/> object
3990: 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74 20 69   instance that i
39a0: 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0d 0a 20  mplements the.. 
39b0: 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20     /// function 
39c0: 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20 20  to be bound...  
39d0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
39e0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
39f0: 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20  ame="flags">..  
3a00: 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20    /// The flags 
3a10: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
3a20: 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65  the parent conne
3a30: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d 0a 20  ction object... 
3a40: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
3a50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
3a60: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
3a70: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
3a80: 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f     SQLiteFunctio
3a90: 6e 41 74 74 72 69 62 75 74 65 20 66 75 6e 63 74  nAttribute funct
3aa0: 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d 0a 20  ionAttribute,.. 
3ab0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e         SQLiteFun
3ac0: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d  ction function,.
3ad0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
3ae0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
3af0: 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 29 0d  lags..        ).
3b00: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
3b10: 69 66 20 28 66 75 6e 63 74 69 6f 6e 41 74 74 72  if (functionAttr
3b20: 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ibute == null)..
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
3b40: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
3b50: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 75 6e  llException("fun
3b60: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 29  ctionAttribute")
3b70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
3b80: 28 66 75 6e 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c  (function == nul
3b90: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
3ba0: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
3bb0: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
3bc0: 22 66 75 6e 63 74 69 6f 6e 22 29 3b 0d 0a 0d 0a  "function");....
3bd0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
3be0: 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74  nction.BindFunct
3bf0: 69 6f 6e 28 74 68 69 73 2c 20 66 75 6e 63 74 69  ion(this, functi
3c00: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e  onAttribute, fun
3c10: 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29 3b 0d 0a  ction, flags);..
3c20: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 66  ..        if (_f
3c30: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
3c40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  )..            _
3c50: 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20  functions = new 
3c60: 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74  Dictionary<SQLit
3c70: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
3c80: 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69  te, SQLiteFuncti
3c90: 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  on>();....      
3ca0: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 66 75 6e    _functions[fun
3cb0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 5d 20  ctionAttribute] 
3cc0: 3d 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a 20 20 20  = function;..   
3cd0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
3ce0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3cf0: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62   This function b
3d00: 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66 69  inds a user-defi
3d10: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  ned function to 
3d20: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  the connection..
3d30: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3d40: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
3d50: 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69  ram name="functi
3d60: 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20  onAttribute">.. 
3d70: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
3d80: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63  cref="SQLiteFunc
3d90: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e  tionAttribute"/>
3da0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
3db0: 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20   containing..   
3dc0: 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74   /// the metadat
3dd0: 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  a for the functi
3de0: 6f 6e 20 74 6f 20 62 65 20 75 6e 62 6f 75 6e 64  on to be unbound
3df0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
3e00: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
3e10: 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
3e20: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
3e30: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
3e40: 77 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20  with the parent 
3e50: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
3e60: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  t...    /// </pa
3e70: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
3e80: 65 74 75 72 6e 73 3e 4e 6f 6e 2d 7a 65 72 6f 20  eturns>Non-zero 
3e90: 69 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  if the function 
3ea0: 77 61 73 20 75 6e 62 6f 75 6e 64 20 61 6e 64 20  was unbound and 
3eb0: 72 65 6d 6f 76 65 64 2e 3c 2f 72 65 74 75 72 6e  removed.</return
3ec0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
3ed0: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 55   override bool U
3ee0: 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  nbindFunction(..
3ef0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
3f00: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
3f10: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
3f20: 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e,..        SQLi
3f30: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
3f40: 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  s flags..       
3f50: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
3f60: 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41     if (functionA
3f70: 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c  ttribute == null
3f80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
3f90: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
3fa0: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
3fb0: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
3fc0: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
3fd0: 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d  if (_functions =
3fe0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3ff0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
4000: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
4010: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e  LiteFunction fun
4020: 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
4030: 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73    if (_functions
4040: 2e 54 72 79 47 65 74 56 61 6c 75 65 28 66 75 6e  .TryGetValue(fun
4050: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20  ctionAttribute, 
4060: 6f 75 74 20 66 75 6e 63 74 69 6f 6e 29 29 0d 0a  out function))..
4070: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4080: 20 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74         if (SQLit
4090: 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69 6e 64  eFunction.Unbind
40a0: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
40c0: 68 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74  his, functionAtt
40d0: 72 69 62 75 74 65 2c 20 66 75 6e 63 74 69 6f 6e  ribute, function
40e0: 2c 20 66 6c 61 67 73 29 20 26 26 0d 0a 20 20 20  , flags) &&..   
40f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 75               _fu
4100: 6e 63 74 69 6f 6e 73 2e 52 65 6d 6f 76 65 28 66  nctions.Remove(f
4110: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
4120: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
4130: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4140: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
4150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4160: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4170: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
4180: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
4190: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
41a0: 64 65 20 73 74 72 69 6e 67 20 56 65 72 73 69 6f  de string Versio
41b0: 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  n..    {..      
41c0: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  get..      {..  
41d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
41e0: 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  iteVersion;..   
41f0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4200: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4210: 72 69 64 65 20 69 6e 74 20 56 65 72 73 69 6f 6e  ride int Version
4220: 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20  Number..    {.. 
4230: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
4240: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
4250: 6e 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  n SQLiteVersionN
4260: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 7d 0d  umber;..      }.
4270: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
4280: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74  ternal static st
4290: 72 69 6e 67 20 44 65 66 69 6e 65 43 6f 6e 73 74  ring DefineConst
42a0: 61 6e 74 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ants..    {..   
42b0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
42c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
42d0: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72   StringBuilder r
42e0: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
42f0: 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20  ngBuilder();..  
4300: 20 20 20 20 20 20 20 20 20 20 49 4c 69 73 74 3c            IList<
4310: 73 74 72 69 6e 67 3e 20 6c 69 73 74 20 3d 20 53  string> list = S
4320: 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74  QLiteDefineConst
4330: 61 6e 74 73 2e 4f 70 74 69 6f 6e 4c 69 73 74 3b  ants.OptionList;
4340: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4350: 69 66 20 28 6c 69 73 74 20 21 3d 20 6e 75 6c 6c  if (list != null
4360: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4380: 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e    foreach (strin
4390: 67 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 73  g element in lis
43a0: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
43b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
43c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
43d0: 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d  lement == null).
43e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
43f0: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
4400: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
4410: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
4420: 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29  sult.Length > 0)
4430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4440: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
4450: 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d  .Append(' ');...
4460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4470: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
4480: 6e 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20  nd(element);..  
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
44a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
44b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
44c0: 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74  turn result.ToSt
44d0: 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20  ring();..       
44e0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
44f0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
4500: 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65 56 65   string SQLiteVe
4510: 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20  rsion..    {..  
4520: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
4530: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4540: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
4550: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4560: 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  s.sqlite3_libver
4570: 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 20 20  sion(), -1);..  
4580: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4590: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
45a0: 74 69 63 20 69 6e 74 20 53 51 4c 69 74 65 56 65  tic int SQLiteVe
45b0: 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20  rsionNumber..   
45c0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
45d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
45e0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
45f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
4600: 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75  e3_libversion_nu
4610: 6d 62 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 7d  mber();..      }
4620: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
4630: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
4640: 74 72 69 6e 67 20 53 51 4c 69 74 65 53 6f 75 72  tring SQLiteSour
4650: 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ceId..    {..   
4660: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
4670: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4680: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
4690: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
46a0: 2e 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  .sqlite3_sourcei
46b0: 64 28 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20  d(), -1);..     
46c0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
46d0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
46e0: 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65 43 6f   string SQLiteCo
46f0: 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20  mpileOptions..  
4700: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
4710: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
4720: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42           StringB
4730: 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20  uilder result = 
4740: 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65  new StringBuilde
4750: 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  r();..          
4760: 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b    int index = 0;
4770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
4780: 74 50 74 72 20 7a 56 61 6c 75 65 20 3d 20 55 6e  tPtr zValue = Un
4790: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
47a0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c  s.sqlite3_compil
47b0: 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65  eoption_get(inde
47c0: 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  x++);....       
47d0: 20 20 20 20 20 77 68 69 6c 65 20 28 7a 56 61 6c       while (zVal
47e0: 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue != IntPtr.Zer
47f0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
4800: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4810: 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65     if (result.Le
4820: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
4830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4840: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
4850: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4860: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
4870: 65 6e 64 28 55 54 46 38 54 6f 53 74 72 69 6e 67  end(UTF8ToString
4880: 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29 3b 0d 0a  (zValue, -1));..
4890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48a0: 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e  zValue = UnsafeN
48b0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
48c0: 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  ite3_compileopti
48d0: 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b  on_get(index++);
48e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
48f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
4900: 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53  eturn result.ToS
4910: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20  tring();..      
4920: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4930: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
4940: 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70  c string Interop
4950: 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a  Version..    {..
4960: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
4970: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c       {..#if !SQL
4980: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
4990: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
49a0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
49b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
49c0: 73 2e 69 6e 74 65 72 6f 70 5f 6c 69 62 76 65 72  s.interop_libver
49d0: 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d 0a 23 65  sion(), -1);..#e
49e0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
49f0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23   return null;..#
4a00: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
4a10: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
4a20: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
4a30: 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 53 6f 75  tring InteropSou
4a40: 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  rceId..    {..  
4a50: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
4a60: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
4a70: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
4a80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
4a90: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
4aa0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4ab0: 69 6e 74 65 72 6f 70 5f 73 6f 75 72 63 65 69 64  interop_sourceid
4ac0: 28 29 2c 20 2d 31 29 3b 0d 0a 23 65 6c 73 65 0d  (), -1);..#else.
4ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4ae0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69  urn null;..#endi
4af0: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  f..        }..  
4b00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4b10: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
4b20: 67 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65  g InteropCompile
4b30: 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a  Options..    {..
4b40: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
4b50: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c       {..#if !SQL
4b60: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
4b70: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
4b80: 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d  Builder result =
4b90: 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64   new StringBuild
4ba0: 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  er();..         
4bb0: 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 30     int index = 0
4bc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ;..            I
4bd0: 6e 74 50 74 72 20 7a 56 61 6c 75 65 20 3d 20 55  ntPtr zValue = U
4be0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4bf0: 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69  ds.interop_compi
4c00: 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64  leoption_get(ind
4c10: 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ex++);....      
4c20: 20 20 20 20 20 20 77 68 69 6c 65 20 28 7a 56 61        while (zVa
4c30: 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  lue != IntPtr.Ze
4c40: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
4c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4c60: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
4c70: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c90: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20  result.Append(' 
4ca0: 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ');....         
4cb0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
4cc0: 70 65 6e 64 28 55 54 46 38 54 6f 53 74 72 69 6e  pend(UTF8ToStrin
4cd0: 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29 3b 0d  g(zValue, -1));.
4ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4cf0: 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65   zValue = Unsafe
4d00: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e  NativeMethods.in
4d10: 74 65 72 6f 70 5f 63 6f 6d 70 69 6c 65 6f 70 74  terop_compileopt
4d20: 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29  ion_get(index++)
4d30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
4d40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4d50: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f  return result.To
4d60: 53 74 72 69 6e 67 28 29 3b 0d 0a 23 65 6c 73 65  String();..#else
4d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4d80: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64  turn null;..#end
4d90: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
4da0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4db0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
4dc0: 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20  ol AutoCommit.. 
4dd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
4de0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
4df0: 20 20 72 65 74 75 72 6e 20 49 73 41 75 74 6f 63    return IsAutoc
4e00: 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f 73 71 6c  ommit(_sql, _sql
4e10: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
4e20: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
4e30: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
4e40: 20 49 73 52 65 61 64 4f 6e 6c 79 28 0d 0a 20 20   IsReadOnly(..  
4e50: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
4e60: 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  e..        )..  
4e70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
4e80: 50 74 72 20 70 44 62 4e 61 6d 65 20 3d 20 49 6e  Ptr pDbName = In
4e90: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
4ea0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
4eb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4ec0: 20 20 69 66 20 28 6e 61 6d 65 20 21 3d 20 6e 75    if (name != nu
4ed0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4ee0: 20 20 20 20 20 70 44 62 4e 61 6d 65 20 3d 20 53       pDbName = S
4ef0: 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38  QLiteString.Utf8
4f00: 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
4f10: 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  (name);....     
4f20: 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c         int resul
4f30: 74 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  t = UnsafeNative
4f40: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
4f50: 64 62 5f 72 65 61 64 6f 6e 6c 79 28 0d 0a 20 20  db_readonly(..  
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
4f70: 71 6c 2c 20 70 44 62 4e 61 6d 65 29 3b 0d 0a 0d  ql, pDbName);...
4f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4f90: 28 72 65 73 75 6c 74 20 3d 3d 20 2d 31 29 20 2f  (result == -1) /
4fa0: 2a 20 64 61 74 61 62 61 73 65 20 6e 6f 74 20 66  * database not f
4fb0: 6f 75 6e 64 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ound */..       
4fc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4fd0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
4fe0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
4ff0: 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  n(HelperMethods.
5000: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
5010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5020: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
5030: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
5040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5050: 20 20 20 20 22 64 61 74 61 62 61 73 65 20 5c 22      "database \"
5060: 7b 30 7d 5c 22 20 6e 6f 74 20 66 6f 75 6e 64 22  {0}\" not found"
5070: 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20  , name));..     
5080: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5090: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
50a0: 65 73 75 6c 74 20 3d 3d 20 30 20 3f 20 66 61 6c  esult == 0 ? fal
50b0: 73 65 20 3a 20 74 72 75 65 3b 0d 0a 20 20 20 20  se : true;..    
50c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
50d0: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
50e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
50f0: 66 20 28 70 44 62 4e 61 6d 65 20 21 3d 20 49 6e  f (pDbName != In
5100: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
5110: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5120: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
5130: 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 44 62  eMemory.Free(pDb
5140: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
5150: 20 20 20 20 20 20 20 20 70 44 62 4e 61 6d 65 20          pDbName 
5160: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
5170: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5180: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
5190: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
51a0: 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4c 61  override long La
51b0: 73 74 49 6e 73 65 72 74 52 6f 77 49 64 0d 0a 20  stInsertRowId.. 
51c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
51d0: 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  .      {..#if !P
51e0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
51f0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
5200: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
5210: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5220: 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
5230: 5f 72 6f 77 69 64 28 5f 73 71 6c 29 3b 0d 0a 23  _rowid(_sql);..#
5240: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
5250: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 6c  NDARD..        l
5260: 6f 6e 67 20 72 6f 77 49 64 20 3d 20 30 3b 0d 0a  ong rowId = 0;..
5270: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
5280: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5290: 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
52a0: 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 5f 73  rowid_interop(_s
52b0: 71 6c 2c 20 72 65 66 20 72 6f 77 49 64 29 3b 0d  ql, ref rowId);.
52c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
52d0: 72 6f 77 49 64 3b 0d 0a 23 65 6c 73 65 0d 0a 20  rowId;..#else.. 
52e0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
52f0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
5300: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
5310: 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  dif..      }..  
5320: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5330: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
5340: 20 43 68 61 6e 67 65 73 0d 0a 20 20 20 20 7b 0d   Changes..    {.
5350: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
5360: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
5370: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
5380: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
5390: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
53a0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 5f 69 6e  lite3_changes_in
53b0: 74 65 72 6f 70 28 5f 73 71 6c 29 3b 0d 0a 23 65  terop(_sql);..#e
53c0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 72 65 74  lse..        ret
53d0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
53e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
53f0: 63 68 61 6e 67 65 73 28 5f 73 71 6c 29 3b 0d 0a  changes(_sql);..
5400: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d  #endif..      }.
5410: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5420: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5430: 6c 6f 6e 67 20 4d 65 6d 6f 72 79 55 73 65 64 0d  long MemoryUsed.
5440: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5450: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
5460: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5470: 72 6e 20 53 74 61 74 69 63 4d 65 6d 6f 72 79 55  rn StaticMemoryU
5480: 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  sed;..        }.
5490: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
54a0: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 6c 6f  ternal static lo
54b0: 6e 67 20 53 74 61 74 69 63 4d 65 6d 6f 72 79 55  ng StaticMemoryU
54c0: 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  sed..    {..    
54d0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
54e0: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
54f0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5500: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
5510: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
5520: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5530: 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29  e3_memory_used()
5540: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
5550: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
5560: 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65         long byte
5570: 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  s = 0;..        
5580: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
5590: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
55a0: 6d 65 6d 6f 72 79 5f 75 73 65 64 5f 69 6e 74 65  memory_used_inte
55b0: 72 6f 70 28 72 65 66 20 62 79 74 65 73 29 3b 0d  rop(ref bytes);.
55c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
55d0: 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73  urn bytes;..#els
55e0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  e..            t
55f0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
5600: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
5610: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
5620: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
5630: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
5640: 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f  erride long Memo
5650: 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20 20 20  ryHighwater..   
5660: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
5670: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
5680: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
5690: 74 61 74 69 63 4d 65 6d 6f 72 79 48 69 67 68 77  taticMemoryHighw
56a0: 61 74 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ater;..        }
56b0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
56c0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 6c  nternal static l
56d0: 6f 6e 67 20 53 74 61 74 69 63 4d 65 6d 6f 72 79  ong StaticMemory
56e0: 48 69 67 68 77 61 74 65 72 0d 0a 20 20 20 20 7b  Highwater..    {
56f0: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
5700: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50         {..#if !P
5710: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
5720: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
5730: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
5740: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5750: 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f  .sqlite3_memory_
5760: 68 69 67 68 77 61 74 65 72 28 30 29 3b 0d 0a 23  highwater(0);..#
5770: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
5780: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
5790: 20 20 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20     long bytes = 
57a0: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
57b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
57c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ods.sqlite3_memo
57d0: 72 79 5f 68 69 67 68 77 61 74 65 72 5f 69 6e 74  ry_highwater_int
57e0: 65 72 6f 70 28 30 2c 20 72 65 66 20 62 79 74 65  erop(0, ref byte
57f0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
5800: 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a   return bytes;..
5810: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
5820: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
5830: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
5840: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
5850: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5860: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
5870: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
5880: 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  Returns non-zero
5890: 20 69 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69   if the underlyi
58a0: 6e 67 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63  ng native connec
58b0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f  tion handle is o
58c0: 77 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 79  wned..    /// by
58d0: 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65 2e 0d   this instance..
58e0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
58f0: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
5900: 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
5910: 4f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b  OwnHandle..    {
5920: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
5930: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5940: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
5950: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
5960: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
5970: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
5980: 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f  on("no connectio
5990: 6e 20 68 61 6e 64 6c 65 20 61 76 61 69 6c 61 62  n handle availab
59a0: 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le");....       
59b0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71 6c       return _sql
59c0: 2e 4f 77 6e 48 61 6e 64 6c 65 3b 0d 0a 20 20 20  .OwnHandle;..   
59d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
59e0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
59f0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
5a00: 72 6e 73 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  rns the logical 
5a10: 6c 69 73 74 20 6f 66 20 66 75 6e 63 74 69 6f 6e  list of function
5a20: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
5a30: 68 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  h this connectio
5a40: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
5a50: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
5a60: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49 44  rnal override ID
5a70: 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65  ictionary<SQLite
5a80: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
5a90: 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  e, SQLiteFunctio
5aa0: 6e 3e 20 46 75 6e 63 74 69 6f 6e 73 0d 0a 20 20  n> Functions..  
5ab0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
5ac0: 20 7b 20 72 65 74 75 72 6e 20 5f 66 75 6e 63 74   { return _funct
5ad0: 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a  ions; }..    }..
5ae0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
5af0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
5b00: 72 6f 72 43 6f 64 65 20 53 65 74 4d 65 6d 6f 72  rorCode SetMemor
5b10: 79 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c  yStatus(bool val
5b20: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
5b30: 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
5b40: 63 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73  cSetMemoryStatus
5b50: 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d  (value);..    }.
5b60: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
5b70: 73 74 61 74 69 63 20 53 51 4c 69 74 65 45 72 72  static SQLiteErr
5b80: 6f 72 43 6f 64 65 20 53 74 61 74 69 63 53 65 74  orCode StaticSet
5b90: 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f  MemoryStatus(boo
5ba0: 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  l value)..    {.
5bb0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
5bc0: 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
5bd0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5be0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  s.sqlite3_config
5bf0: 5f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  _int(..         
5c00: 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f     SQLiteConfigO
5c10: 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f  psEnum.SQLITE_CO
5c20: 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53 2c 20  NFIG_MEMSTATUS, 
5c30: 76 61 6c 75 65 20 3f 20 31 20 3a 20 30 29 3b 0d  value ? 1 : 0);.
5c40: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
5c50: 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n rc;..    }....
5c60: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
5c70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d  >..    /// Attem
5c80: 70 74 73 20 74 6f 20 66 72 65 65 20 61 73 20 6d  pts to free as m
5c90: 75 63 68 20 68 65 61 70 20 6d 65 6d 6f 72 79 20  uch heap memory 
5ca0: 61 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20  as possible for 
5cb0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
5cc0: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
5cd0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
5ce0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
5cf0: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
5d00: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 28 69 2e   return code (i.
5d10: 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75 63 63  e. zero for succ
5d20: 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f  ess and non-zero
5d30: 20 66 6f 72 20 66 61 69 6c 75 72 65 29 2e 3c 2f   for failure).</
5d40: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
5d50: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5d60: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
5d70: 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28 29 0d  ReleaseMemory().
5d80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5d90: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
5da0: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
5db0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5dc0: 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  _db_release_memo
5dd0: 72 79 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20  ry(_sql);..     
5de0: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
5df0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
5e00: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
5e10: 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 66  // Attempts to f
5e20: 72 65 65 20 4e 20 62 79 74 65 73 20 6f 66 20 68  ree N bytes of h
5e30: 65 61 70 20 6d 65 6d 6f 72 79 20 62 79 20 64 65  eap memory by de
5e40: 61 6c 6c 6f 63 61 74 69 6e 67 20 6e 6f 6e 2d 65  allocating non-e
5e50: 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f 72 79 0d  ssential memory.
5e60: 0a 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74  .    /// allocat
5e70: 69 6f 6e 73 20 68 65 6c 64 20 62 79 20 74 68 65  ions held by the
5e80: 20 64 61 74 61 62 61 73 65 20 6c 69 62 72 61 72   database librar
5e90: 79 2e 20 4d 65 6d 6f 72 79 20 75 73 65 64 20 74  y. Memory used t
5ea0: 6f 20 63 61 63 68 65 20 64 61 74 61 62 61 73 65  o cache database
5eb0: 20 70 61 67 65 73 0d 0a 20 20 20 20 2f 2f 2f 20   pages..    /// 
5ec0: 74 6f 20 69 6d 70 72 6f 76 65 20 70 65 72 66 6f  to improve perfo
5ed0: 72 6d 61 6e 63 65 20 69 73 20 61 6e 20 65 78 61  rmance is an exa
5ee0: 6d 70 6c 65 20 6f 66 20 6e 6f 6e 2d 65 73 73 65  mple of non-esse
5ef0: 6e 74 69 61 6c 20 6d 65 6d 6f 72 79 2e 20 20 54  ntial memory.  T
5f00: 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 0d 0a  his is a no-op..
5f10: 20 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e 69 6e      /// returnin
5f20: 67 20 7a 65 72 6f 20 69 66 20 74 68 65 20 53 51  g zero if the SQ
5f30: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
5f40: 79 20 77 61 73 20 6e 6f 74 20 63 6f 6d 70 69 6c  y was not compil
5f50: 65 64 20 77 69 74 68 20 74 68 65 20 63 6f 6d 70  ed with the comp
5f60: 69 6c 65 2d 74 69 6d 65 0d 0a 20 20 20 20 2f 2f  ile-time..    //
5f70: 2f 20 6f 70 74 69 6f 6e 20 53 51 4c 49 54 45 5f  / option SQLITE_
5f80: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
5f90: 4e 41 47 45 4d 45 4e 54 2e 20 20 4f 70 74 69 6f  NAGEMENT.  Optio
5fa0: 6e 61 6c 6c 79 2c 20 61 74 74 65 6d 70 74 73 20  nally, attempts 
5fb0: 74 6f 20 72 65 73 65 74 20 61 6e 64 2f 6f 72 0d  to reset and/or.
5fc0: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6d 70 61 63 74  .    /// compact
5fd0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
5fe0: 65 20 68 65 61 70 2c 20 69 66 20 61 70 70 6c 69  e heap, if appli
5ff0: 63 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  cable...    /// 
6000: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6010: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6020: 22 6e 42 79 74 65 73 22 3e 0d 0a 20 20 20 20 2f  "nBytes">..    /
6030: 2f 2f 20 54 68 65 20 72 65 71 75 65 73 74 65 64  // The requested
6040: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
6050: 20 74 6f 20 66 72 65 65 2e 0d 0a 20 20 20 20 2f   to free...    /
6060: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
6070: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
6080: 3d 22 72 65 73 65 74 22 3e 0d 0a 20 20 20 20 2f  ="reset">..    /
6090: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 61  // Non-zero to a
60a0: 74 74 65 6d 70 74 20 61 20 68 65 61 70 20 72 65  ttempt a heap re
60b0: 73 65 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  set...    /// </
60c0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
60d0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6d  <param name="com
60e0: 70 61 63 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  pact">..    /// 
60f0: 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 61 74 74 65  Non-zero to atte
6100: 6d 70 74 20 68 65 61 70 20 63 6f 6d 70 61 63 74  mpt heap compact
6110: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
6120: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
6130: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 46 72  <param name="nFr
6140: 65 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ee">..    /// Th
6150: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
6160: 73 20 61 63 74 75 61 6c 6c 79 20 66 72 65 65 64  s actually freed
6170: 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 6d 61  .  This value ma
6180: 79 20 62 65 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  y be zero...    
6190: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
61a0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
61b0: 65 3d 22 72 65 73 65 74 4f 6b 22 3e 0d 0a 20 20  e="resetOk">..  
61c0: 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65    /// This value
61d0: 20 77 69 6c 6c 20 62 65 20 6e 6f 6e 2d 7a 65 72   will be non-zer
61e0: 6f 20 69 66 20 74 68 65 20 68 65 61 70 20 72 65  o if the heap re
61f0: 73 65 74 20 77 61 73 20 73 75 63 63 65 73 73 66  set was successf
6200: 75 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ul...    /// </p
6210: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
6220: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 4c 61 72  param name="nLar
6230: 67 65 73 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  gest">..    /// 
6240: 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  The size of the 
6250: 6c 61 72 67 65 73 74 20 63 6f 6d 6d 69 74 74 65  largest committe
6260: 64 20 66 72 65 65 20 62 6c 6f 63 6b 20 69 6e 20  d free block in 
6270: 74 68 65 20 68 65 61 70 2c 20 69 6e 20 62 79 74  the heap, in byt
6280: 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  es...    /// Thi
6290: 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  s value will be 
62a0: 7a 65 72 6f 20 75 6e 6c 65 73 73 20 68 65 61 70  zero unless heap
62b0: 20 63 6f 6d 70 61 63 74 69 6f 6e 20 69 73 20 65   compaction is e
62c0: 6e 61 62 6c 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  nabled...    ///
62d0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
62e0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
62f0: 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
6300: 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
6310: 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72 6f 20 66  ode (i.e. zero f
6320: 6f 72 20 73 75 63 63 65 73 73 20 61 6e 64 20 6e  or success and n
6330: 6f 6e 2d 7a 65 72 6f 0d 0a 20 20 20 20 2f 2f 2f  on-zero..    ///
6340: 20 66 6f 72 20 66 61 69 6c 75 72 65 29 2e 0d 0a   for failure)...
6350: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
6360: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
6370: 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 45 72   static SQLiteEr
6380: 72 6f 72 43 6f 64 65 20 53 74 61 74 69 63 52 65  rorCode StaticRe
6390: 6c 65 61 73 65 4d 65 6d 6f 72 79 28 0d 0a 20 20  leaseMemory(..  
63a0: 20 20 20 20 20 20 69 6e 74 20 6e 42 79 74 65 73        int nBytes
63b0: 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  ,..        bool 
63c0: 72 65 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  reset,..        
63d0: 62 6f 6f 6c 20 63 6f 6d 70 61 63 74 2c 0d 0a 20  bool compact,.. 
63e0: 20 20 20 20 20 20 20 72 65 66 20 69 6e 74 20 6e         ref int n
63f0: 46 72 65 65 2c 0d 0a 20 20 20 20 20 20 20 20 72  Free,..        r
6400: 65 66 20 62 6f 6f 6c 20 72 65 73 65 74 4f 6b 2c  ef bool resetOk,
6410: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 75 69  ..        ref ui
6420: 6e 74 20 6e 4c 61 72 67 65 73 74 0d 0a 20 20 20  nt nLargest..   
6430: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
6440: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
6450: 6f 72 43 6f 64 65 20 72 63 20 3d 20 53 51 4c 69  orCode rc = SQLi
6460: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
6470: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  ...        int n
6480: 46 72 65 65 4c 6f 63 61 6c 20 3d 20 55 6e 73 61  FreeLocal = Unsa
6490: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
64a0: 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
64b0: 6d 65 6d 6f 72 79 28 6e 42 79 74 65 73 29 3b 0d  memory(nBytes);.
64c0: 0a 20 20 20 20 20 20 20 20 75 69 6e 74 20 6e 4c  .        uint nL
64d0: 61 72 67 65 73 74 4c 6f 63 61 6c 20 3d 20 30 3b  argestLocal = 0;
64e0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72  ..        bool r
64f0: 65 73 65 74 4f 6b 4c 6f 63 61 6c 20 3d 20 66 61  esetOkLocal = fa
6500: 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 44 45 42  lse;....#if !DEB
6510: 55 47 20 26 26 20 57 49 4e 44 4f 57 53 20 2f 2f  UG && WINDOWS //
6520: 20 4e 4f 54 45 3a 20 53 68 6f 75 6c 64 20 62 65   NOTE: Should be
6530: 20 22 57 49 4e 33 32 48 45 41 50 20 26 26 20 21   "WIN32HEAP && !
6540: 4d 45 4d 44 45 42 55 47 20 26 26 20 57 49 4e 44  MEMDEBUG && WIND
6550: 4f 57 53 22 0d 0a 20 20 20 20 20 20 20 20 69 66  OWS"..        if
6560: 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e   (HelperMethods.
6570: 49 73 57 69 6e 64 6f 77 73 28 29 29 0d 0a 20 20  IsWindows())..  
6580: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6590: 20 20 20 20 20 69 66 20 28 28 72 63 20 3d 3d 20       if ((rc == 
65a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
65b0: 4f 6b 29 20 26 26 20 72 65 73 65 74 29 0d 0a 20  Ok) && reset).. 
65c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
65d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
65e0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
65f0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77  ethods.sqlite3_w
6600: 69 6e 33 32 5f 72 65 73 65 74 5f 68 65 61 70 28  in32_reset_heap(
6610: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6620: 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20        if (rc == 
6630: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
6640: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
6650: 20 20 20 20 20 20 20 20 20 72 65 73 65 74 4f 6b           resetOk
6660: 4c 6f 63 61 6c 20 3d 20 74 72 75 65 3b 0d 0a 20  Local = true;.. 
6670: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6680: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6690: 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
66a0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 63 6f  orCode.Ok) && co
66b0: 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20  mpact)..        
66c0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73          rc = Uns
66d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
66e0: 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 63  .sqlite3_win32_c
66f0: 6f 6d 70 61 63 74 5f 68 65 61 70 28 72 65 66 20  ompact_heap(ref 
6700: 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 29 3b 0d  nLargestLocal);.
6710: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
6720: 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66      else..#endif
6730: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 72 65  ..        if (re
6740: 73 65 74 20 7c 7c 20 63 6f 6d 70 61 63 74 29 0d  set || compact).
6750: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6760: 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
6770: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 74  iteErrorCode.Not
6780: 46 6f 75 6e 64 3b 0d 0a 20 20 20 20 20 20 20 20  Found;..        
6790: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6e 46 72  }....        nFr
67a0: 65 65 20 3d 20 6e 46 72 65 65 4c 6f 63 61 6c 3b  ee = nFreeLocal;
67b0: 0d 0a 20 20 20 20 20 20 20 20 6e 4c 61 72 67 65  ..        nLarge
67c0: 73 74 20 3d 20 6e 4c 61 72 67 65 73 74 4c 6f 63  st = nLargestLoc
67d0: 61 6c 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  al;..        res
67e0: 65 74 4f 6b 20 3d 20 72 65 73 65 74 4f 6b 4c 6f  etOk = resetOkLo
67f0: 63 61 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  cal;....        
6800: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
6810: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6820: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
6830: 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c  Shutdown the SQL
6840: 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68  ite engine so th
6850: 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
6860: 74 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66  tarted with diff
6870: 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63  erent..    /// c
6880: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
6890: 69 6f 6e 73 2e 20 20 57 65 20 64 65 70 65 6e 64  ions.  We depend
68a0: 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c   on auto initial
68b0: 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76  ization to recov
68c0: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
68d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
68e0: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
68f0: 73 20 61 20 73 74 61 6e 64 61 72 64 20 53 51 4c  s a standard SQL
6900: 69 74 65 20 72 65 73 75 6c 74 20 63 6f 64 65 2e  ite result code.
6910: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
6920: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
6930: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
6940: 65 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20 20  e Shutdown()..  
6950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
6960: 75 72 6e 20 53 74 61 74 69 63 53 68 75 74 64 6f  urn StaticShutdo
6970: 77 6e 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  wn(false);..    
6980: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6990: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
69a0: 53 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c  Shutdown the SQL
69b0: 69 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68  ite engine so th
69c0: 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
69d0: 74 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66  tarted with diff
69e0: 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63  erent..    /// c
69f0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
6a00: 69 6f 6e 73 2e 20 20 57 65 20 64 65 70 65 6e 64  ions.  We depend
6a10: 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c   on auto initial
6a20: 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76  ization to recov
6a30: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
6a40: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
6a50: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69   <param name="di
6a60: 72 65 63 74 6f 72 69 65 73 22 3e 0d 0a 20 20 20  rectories">..   
6a70: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f   /// Non-zero to
6a80: 20 72 65 73 65 74 20 74 68 65 20 64 61 74 61 62   reset the datab
6a90: 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72  ase and temporar
6aa0: 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 74 6f  y directories to
6ab0: 20 74 68 65 69 72 0d 0a 20 20 20 20 2f 2f 2f 20   their..    /// 
6ac0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20  default values, 
6ad0: 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20  which should be 
6ae0: 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 20 20  null for both.  
6af0: 54 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 68  This parameter h
6b00: 61 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 65  as no..    /// e
6b10: 66 66 65 63 74 20 6f 6e 20 6e 6f 6e 2d 57 69 6e  ffect on non-Win
6b20: 64 6f 77 73 20 6f 70 65 72 61 74 69 6e 67 20 73  dows operating s
6b30: 79 73 74 65 6d 73 2e 0d 0a 20 20 20 20 2f 2f 2f  ystems...    ///
6b40: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
6b50: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
6b60: 72 6e 73 20 61 20 73 74 61 6e 64 61 72 64 20 53  rns a standard S
6b70: 51 4c 69 74 65 20 72 65 73 75 6c 74 20 63 6f 64  QLite result cod
6b80: 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  e.</returns>..  
6b90: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
6ba0: 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
6bb0: 65 20 53 74 61 74 69 63 53 68 75 74 64 6f 77 6e  e StaticShutdown
6bc0: 28 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  (..        bool 
6bd0: 64 69 72 65 63 74 6f 72 69 65 73 0d 0a 20 20 20  directories..   
6be0: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
6bf0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
6c00: 6f 72 43 6f 64 65 20 72 63 20 3d 20 53 51 4c 69  orCode rc = SQLi
6c10: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
6c20: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  ...        if (d
6c30: 69 72 65 63 74 6f 72 69 65 73 29 0d 0a 20 20 20  irectories)..   
6c40: 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44       {..#if WIND
6c50: 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OWS..           
6c60: 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f   if (HelperMetho
6c70: 64 73 2e 49 73 57 69 6e 64 6f 77 73 28 29 29 0d  ds.IsWindows()).
6c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ca0: 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
6cb0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cd0: 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61     rc = UnsafeNa
6ce0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6cf0: 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
6d00: 72 65 63 74 6f 72 79 28 31 2c 20 6e 75 6c 6c 29  rectory(1, null)
6d10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6d20: 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53       if (rc == S
6d30: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6d40: 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
6d50: 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73          rc = Uns
6d60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6d70: 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73  .sqlite3_win32_s
6d80: 65 74 5f 64 69 72 65 63 74 6f 72 79 28 32 2c 20  et_directory(2, 
6d90: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
6da0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6db0: 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d     else..#endif.
6dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6dd0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
6de0: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
6df0: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
6e00: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
6e10: 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20  riteLine(..     
6e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
6e30: 53 68 75 74 64 6f 77 6e 3a 20 43 61 6e 6e 6f 74  Shutdown: Cannot
6e40: 20 72 65 73 65 74 20 64 69 72 65 63 74 6f 72 69   reset directori
6e50: 65 73 20 6f 6e 20 74 68 69 73 20 70 6c 61 74 66  es on this platf
6e60: 6f 72 6d 2e 22 29 3b 0d 0a 23 65 6e 64 69 66 0d  orm.");..#endif.
6e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6e80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6e90: 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53       if (rc == S
6ea0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6eb0: 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
6ec0: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
6ed0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6ee0: 5f 73 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 0d 0a  _shutdown();....
6ef0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
6f00: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
6f10: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6f20: 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
6f30: 65 73 20 69 66 20 74 68 65 20 61 73 73 6f 63 69  es if the associ
6f40: 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e  ated native conn
6f50: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73  ection handle is
6f60: 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20   open...    /// 
6f70: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6f80: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
6f90: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
6fa0: 69 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  if the associate
6fb0: 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74  d native connect
6fc0: 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f 70  ion handle is op
6fd0: 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  en...    /// </r
6fe0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
6ff0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
7000: 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20  ool IsOpen()..  
7010: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
7020: 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c  urn (_sql != nul
7030: 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49 73 49 6e  l) && !_sql.IsIn
7040: 76 61 6c 69 64 20 26 26 20 21 5f 73 71 6c 2e 49  valid && !_sql.I
7050: 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20 20 7d 0d  sClosed;..    }.
7060: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
7070: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
7080: 74 75 72 6e 73 20 74 68 65 20 66 75 6c 6c 79 20  turns the fully 
7090: 71 75 61 6c 69 66 69 65 64 20 70 61 74 68 20 61  qualified path a
70a0: 6e 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72  nd file name for
70b0: 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
70c0: 70 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  pen..    /// dat
70d0: 61 62 61 73 65 2c 20 69 66 20 61 6e 79 2e 0d 0a  abase, if any...
70e0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
70f0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
7100: 61 6d 20 6e 61 6d 65 3d 22 64 62 4e 61 6d 65 22  am name="dbName"
7110: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
7120: 61 6d 65 20 6f 66 20 74 68 65 20 61 74 74 61 63  ame of the attac
7130: 68 65 64 20 64 61 74 61 62 61 73 65 20 74 6f 20  hed database to 
7140: 71 75 65 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  query...    /// 
7150: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
7160: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
7170: 20 2f 2f 2f 20 54 68 65 20 66 75 6c 6c 79 20 71   /// The fully q
7180: 75 61 6c 69 66 69 65 64 20 70 61 74 68 20 61 6e  ualified path an
7190: 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20  d file name for 
71a0: 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
71b0: 65 6e 20 64 61 74 61 62 61 73 65 2c 0d 0a 20 20  en database,..  
71c0: 20 20 2f 2f 2f 20 69 66 20 61 6e 79 2e 0d 0a 20    /// if any... 
71d0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
71e0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
71f0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
7200: 47 65 74 46 69 6c 65 4e 61 6d 65 28 73 74 72 69  GetFileName(stri
7210: 6e 67 20 64 62 4e 61 6d 65 29 0d 0a 20 20 20 20  ng dbName)..    
7220: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  {..        if (_
7230: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
7240: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7250: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
7260: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
7270: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
7280: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7290: 33 5f 64 62 5f 66 69 6c 65 6e 61 6d 65 5f 62 79  3_db_filename_by
72a0: 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tes(..          
72b0: 20 20 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64    _sql, ToUTF8(d
72c0: 62 4e 61 6d 65 29 29 2c 20 2d 31 29 3b 0d 0a 20  bName)), -1);.. 
72d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
72e0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
72f0: 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73  id Open(string s
7300: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 73 74 72 69  trFilename, stri
7310: 6e 67 20 76 66 73 4e 61 6d 65 2c 20 53 51 4c 69  ng vfsName, SQLi
7320: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
7330: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  s connectionFlag
7340: 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61  s, SQLiteOpenFla
7350: 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73  gsEnum openFlags
7360: 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a  , int maxPoolSiz
7370: 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29  e, bool usePool)
7380: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 2f  ..    {..      /
7390: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
73a0: 3a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  : If the databas
73b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
73c0: 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20  currently open, 
73d0: 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20 20 20  attempt to..    
73e0: 20 20 2f 2f 20 20 20 20 20 20 20 63 6c 6f 73 65    //       close
73f0: 20 69 74 20 6e 6f 77 2e 20 20 54 68 69 73 20 6d   it now.  This m
7400: 75 73 74 20 62 65 20 64 6f 6e 65 20 62 65 63 61  ust be done beca
7410: 75 73 65 20 74 68 65 20 66 69 6c 65 20 6e 61 6d  use the file nam
7420: 65 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 20 20  e or..      //  
7430: 20 20 20 20 20 6f 74 68 65 72 20 70 61 72 61 6d       other param
7440: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 69  eters that may i
7450: 6d 70 61 63 74 20 74 68 65 20 75 6e 64 65 72 6c  mpact the underl
7460: 79 69 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 20  ying database.. 
7470: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f       //       co
7480: 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20 68 61 76  nnection may hav
7490: 65 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20  e changed...    
74a0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28    //..      if (
74b0: 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 43 6c  _sql != null) Cl
74c0: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  ose(true);....  
74d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f      //..      //
74e0: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f   NOTE: If the co
74f0: 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74  nnection was not
7500: 20 63 6c 6f 73 65 64 20 73 75 63 63 65 73 73 66   closed successf
7510: 75 6c 6c 79 2c 20 74 68 72 6f 77 20 61 6e 0d 0a  ully, throw an..
7520: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65        //       e
7530: 78 63 65 70 74 69 6f 6e 20 6e 6f 77 2e 0d 0a 20  xception now... 
7540: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69       //..      i
7550: 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  f (_sql != null)
7560: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f  ..          thro
7570: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
7580: 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f  ption("connectio
7590: 6e 20 68 61 6e 64 6c 65 20 69 73 20 73 74 69 6c  n handle is stil
75a0: 6c 20 61 63 74 69 76 65 22 29 3b 0d 0a 0d 0a 20  l active");.... 
75b0: 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20       _usePool = 
75c0: 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20  usePool;..      
75d0: 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 73 74 72 46  _fileName = strF
75e0: 69 6c 65 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ilename;..      
75f0: 5f 66 6c 61 67 73 20 3d 20 63 6f 6e 6e 65 63 74  _flags = connect
7600: 69 6f 6e 46 6c 61 67 73 3b 0d 0a 0d 0a 20 20 20  ionFlags;....   
7610: 20 20 20 69 66 20 28 75 73 65 50 6f 6f 6c 29 0d     if (usePool).
7620: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
7630: 20 20 5f 73 71 6c 20 3d 20 53 51 4c 69 74 65 43    _sql = SQLiteC
7640: 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 52 65  onnectionPool.Re
7650: 6d 6f 76 65 28 73 74 72 46 69 6c 65 6e 61 6d 65  move(strFilename
7660: 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 6f  , maxPoolSize, o
7670: 75 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29  ut _poolVersion)
7680: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
7690: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e  iteConnection.On
76a0: 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65  Changed(null, ne
76b0: 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  w ConnectionEven
76c0: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
76d0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
76e0: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4f 70  tionEventType.Op
76f0: 65 6e 65 64 46 72 6f 6d 50 6f 6f 6c 2c 20 6e 75  enedFromPool, nu
7700: 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ll, null,..     
7710: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c         null, nul
7720: 6c 2c 20 5f 73 71 6c 2c 20 73 74 72 46 69 6c 65  l, _sql, strFile
7730: 6e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74  name, new object
7740: 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
7750: 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33    typeof(SQLite3
7760: 29 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20  ), strFilename, 
7770: 76 66 73 4e 61 6d 65 2c 20 63 6f 6e 6e 65 63 74  vfsName, connect
7780: 69 6f 6e 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20  ionFlags,..     
7790: 20 20 20 20 20 20 20 6f 70 65 6e 46 6c 61 67 73         openFlags
77a0: 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 75  , maxPoolSize, u
77b0: 73 65 50 6f 6f 6c 2c 20 5f 70 6f 6f 6c 56 65 72  sePool, _poolVer
77c0: 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23 69 66  sion }));....#if
77d0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
77e0: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
77f0: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72  TION..        Tr
7800: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
7810: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
7820: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
7830: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
7840: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
7850: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
7860: 22 4f 70 65 6e 20 28 50 6f 6f 6c 29 3a 20 7b 30  "Open (Pool): {0
7870: 7d 22 2c 20 48 61 6e 64 6c 65 54 6f 53 74 72 69  }", HandleToStri
7880: 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
7890: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
78a0: 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
78b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ll)..      {..  
78c0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
78d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
78e0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
78f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7900: 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
7910: 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
7920: 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
7930: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
7940: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
7950: 20 64 62 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72   db = IntPtr.Zer
7960: 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51  o;..          SQ
7970: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b  LiteErrorCode n;
7980: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
7990: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
79a0: 20 20 20 20 69 6e 74 20 65 78 74 46 75 6e 63 73      int extFuncs
79b0: 20 3d 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46   = ((connectionF
79c0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
79d0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45  nectionFlags.NoE
79e0: 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e  xtensionFunction
79f0: 73 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  s) != SQLiteConn
7a00: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78  ectionFlags.NoEx
7a10: 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73  tensionFunctions
7a20: 29 20 3f 20 31 20 3a 20 30 3b 0d 0a 0d 0a 20 20  ) ? 1 : 0;....  
7a30: 20 20 20 20 20 20 20 20 69 66 20 28 65 78 74 46          if (extF
7a40: 75 6e 63 73 20 21 3d 20 30 29 0d 0a 20 20 20 20  uncs != 0)..    
7a50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7a60: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
7a70: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7a80: 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f  ite3_open_intero
7a90: 70 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65  p(ToUTF8(strFile
7aa0: 6e 61 6d 65 29 2c 20 54 6f 55 54 46 38 28 76 66  name), ToUTF8(vf
7ab0: 73 4e 61 6d 65 29 2c 20 6f 70 65 6e 46 6c 61 67  sName), openFlag
7ac0: 73 2c 20 65 78 74 46 75 6e 63 73 2c 20 72 65 66  s, extFuncs, ref
7ad0: 20 64 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   db);..         
7ae0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c   }..          el
7af0: 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  se..#endif..    
7b00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7b10: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
7b20: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7b30: 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55  ite3_open_v2(ToU
7b40: 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29  TF8(strFilename)
7b50: 2c 20 72 65 66 20 64 62 2c 20 6f 70 65 6e 46 6c  , ref db, openFl
7b60: 61 67 73 2c 20 54 6f 55 54 46 38 28 76 66 73 4e  ags, ToUTF8(vfsN
7b70: 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame));..        
7b80: 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f    }....#if !NET_
7b90: 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
7ba0: 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
7bb0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
7bc0: 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72  WriteLine(Helper
7bd0: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
7be0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
7bf0: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
7c00: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
7c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7c20: 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62 29  "Open: {0}", db)
7c30: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
7c40: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
7c50: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
7c60: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
7c70: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
7c80: 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
7c90: 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53      _sql = new S
7ca0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
7cb0: 61 6e 64 6c 65 28 64 62 2c 20 74 72 75 65 29 3b  andle(db, true);
7cc0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7cd0: 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c 29       lock (_sql)
7ce0: 20 7b 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72 63   { /* HACK: Forc
7cf0: 65 20 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b 20  e the SyncBlock 
7d00: 74 6f 20 62 65 20 22 63 72 65 61 74 65 64 22 20  to be "created" 
7d10: 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 0d 0a 20 20 20  now. */ }....   
7d20: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
7d30: 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28  ction.OnChanged(
7d40: 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63  null, new Connec
7d50: 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a  tionEventArgs(..
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7d70: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  teConnectionEven
7d80: 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61  tType.NewCritica
7d90: 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a  lHandle, null,..
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
7db0: 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73  , null, null, _s
7dc0: 71 6c 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c  ql, strFilename,
7dd0: 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d   new object[] {.
7de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70  .            typ
7df0: 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 73 74  eof(SQLite3), st
7e00: 72 46 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61  rFilename, vfsNa
7e10: 6d 65 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  me, connectionFl
7e20: 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ags,..          
7e30: 20 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6d 61 78    openFlags, max
7e40: 50 6f 6f 6c 53 69 7a 65 2c 20 75 73 65 50 6f 6f  PoolSize, usePoo
7e50: 6c 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  l }));..      }.
7e60: 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 42 69 6e 64  ...      // Bind
7e70: 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20 74 68   functions to th
7e80: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  is connection.  
7e90: 49 66 20 61 6e 79 20 70 72 65 76 69 6f 75 73 20  If any previous 
7ea0: 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 74 68 65  functions of the
7eb0: 20 73 61 6d 65 20 6e 61 6d 65 0d 0a 20 20 20 20   same name..    
7ec0: 20 20 2f 2f 20 77 65 72 65 20 61 6c 72 65 61 64    // were alread
7ed0: 79 20 62 6f 75 6e 64 2c 20 74 68 65 6e 20 74 68  y bound, then th
7ee0: 65 20 6e 65 77 20 62 69 6e 64 69 6e 67 73 20 72  e new bindings r
7ef0: 65 70 6c 61 63 65 20 74 68 65 20 6f 6c 64 2e 0d  eplace the old..
7f00: 0a 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 6e  .      if ((conn
7f10: 65 63 74 69 6f 6e 46 6c 61 67 73 20 26 20 53 51  ectionFlags & SQ
7f20: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7f30: 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e 63 74 69  ags.NoBindFuncti
7f40: 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74 65 43 6f  ons) != SQLiteCo
7f50: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
7f60: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a  BindFunctions)..
7f70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7f80: 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e     if (_function
7f90: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
7fa0: 20 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74            _funct
7fb0: 69 6f 6e 73 20 3d 20 6e 65 77 20 44 69 63 74 69  ions = new Dicti
7fc0: 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63  onary<SQLiteFunc
7fd0: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53  tionAttribute, S
7fe0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29  QLiteFunction>()
7ff0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66  ;....          f
8000: 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75 65  oreach (KeyValue
8010: 50 61 69 72 3c 53 51 4c 69 74 65 46 75 6e 63 74  Pair<SQLiteFunct
8020: 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51  ionAttribute, SQ
8030: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20 70 61  LiteFunction> pa
8040: 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ir..            
8050: 20 20 20 20 20 20 69 6e 20 53 51 4c 69 74 65 46        in SQLiteF
8060: 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63  unction.BindFunc
8070: 74 69 6f 6e 73 28 74 68 69 73 2c 20 63 6f 6e 6e  tions(this, conn
8080: 65 63 74 69 6f 6e 46 6c 61 67 73 29 29 0d 0a 20  ectionFlags)).. 
8090: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
80a0: 20 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74            _funct
80b0: 69 6f 6e 73 5b 70 61 69 72 2e 4b 65 79 5d 20 3d  ions[pair.Key] =
80c0: 20 70 61 69 72 2e 56 61 6c 75 65 3b 0d 0a 20 20   pair.Value;..  
80d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
80e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 65 74 54   }....      SetT
80f0: 69 6d 65 6f 75 74 28 30 29 3b 0d 0a 20 20 20 20  imeout(0);..    
8100: 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 5f    GC.KeepAlive(_
8110: 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sql);..    }....
8120: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
8130: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 65 61 72  rride void Clear
8140: 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Pool()..    {.. 
8150: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
8160: 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 50  ctionPool.ClearP
8170: 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b 0d  ool(_fileName);.
8180: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8190: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
81a0: 69 6e 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 0d  int CountPool().
81b0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
81c0: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
81d0: 67 2c 20 69 6e 74 3e 20 63 6f 75 6e 74 73 20 3d  g, int> counts =
81e0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
81f0: 69 6e 74 20 6f 70 65 6e 43 6f 75 6e 74 20 3d 20  int openCount = 
8200: 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  0;..        int 
8210: 63 6c 6f 73 65 43 6f 75 6e 74 20 3d 20 30 3b 0d  closeCount = 0;.
8220: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 74 6f 74  .        int tot
8230: 61 6c 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a  alCount = 0;....
8240: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
8250: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74  nnectionPool.Get
8260: 43 6f 75 6e 74 73 28 5f 66 69 6c 65 4e 61 6d 65  Counts(_fileName
8270: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
8280: 65 66 20 63 6f 75 6e 74 73 2c 20 72 65 66 20 6f  ef counts, ref o
8290: 70 65 6e 43 6f 75 6e 74 2c 20 72 65 66 20 63 6c  penCount, ref cl
82a0: 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  oseCount,..     
82b0: 20 20 20 20 20 20 20 72 65 66 20 74 6f 74 61 6c         ref total
82c0: 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
82d0: 20 20 20 72 65 74 75 72 6e 20 74 6f 74 61 6c 43     return totalC
82e0: 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ount;..    }....
82f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
8300: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 69  rride void SetTi
8310: 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f  meout(int nTimeo
8320: 75 74 4d 53 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  utMS)..    {..  
8330: 20 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20      IntPtr db = 
8340: 5f 73 71 6c 3b 0d 0a 20 20 20 20 20 20 69 66 20  _sql;..      if 
8350: 28 64 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  (db == IntPtr.Ze
8360: 72 6f 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  ro) throw new SQ
8370: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6e  LiteException("n
8380: 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  o connection han
8390: 64 6c 65 20 61 76 61 69 6c 61 62 6c 65 22 29 3b  dle available");
83a0: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
83b0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
83c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
83d0: 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
83e0: 65 6f 75 74 28 64 62 2c 20 6e 54 69 6d 65 6f 75  eout(db, nTimeou
83f0: 74 4d 53 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  tMS);..      if 
8400: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
8410: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
8420: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
8430: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
8440: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
8450: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8460: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65  verride bool Ste
8470: 70 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  p(SQLiteStatemen
8480: 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a  t stmt)..    {..
8490: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
84a0: 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20  rCode n;..      
84b0: 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c  Random rnd = nul
84c0: 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73  l;..      uint s
84d0: 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74  tarttick = (uint
84e0: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
84f0: 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 75  kCount;..      u
8500: 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 75  int timeout = (u
8510: 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61  int)(stmt._comma
8520: 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f  nd._commandTimeo
8530: 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d 0a 20  ut * 1000);.... 
8540: 20 20 20 20 20 52 65 73 65 74 43 61 6e 63 65 6c       ResetCancel
8550: 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  Count();....    
8560: 20 20 77 68 69 6c 65 20 28 74 72 75 65 29 0d 0a    while (true)..
8570: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8580: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
8590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
85a0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
85b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
85c0: 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
85d0: 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
85e0: 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
85f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8600: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
8610: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
8620: 69 74 65 33 5f 73 74 65 70 28 73 74 6d 74 2e 5f  ite3_step(stmt._
8630: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20  sqlite_stmt);.. 
8640: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8650: 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54 68      if (ShouldTh
8660: 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29 0d  rowForCancel()).
8670: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8680: 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d          if ((n =
8690: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
86a0: 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20 20  e.Ok) ||..      
86b0: 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20            (n == 
86c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
86d0: 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  Row) ||..       
86e0: 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20 53           (n == S
86f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44  QLiteErrorCode.D
8700: 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  one))..         
8710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8720: 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69 74 65        n = SQLite
8730: 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72  ErrorCode.Interr
8740: 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  upt;..          
8750: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
8760: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
8770: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
8780: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
8790: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
87a0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
87b0: 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 29  rCode.Interrupt)
87c0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
87d0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
87e0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
87f0: 2e 52 6f 77 29 20 72 65 74 75 72 6e 20 74 72 75  .Row) return tru
8800: 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  e;..        if (
8810: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
8820: 43 6f 64 65 2e 44 6f 6e 65 29 20 72 65 74 75 72  Code.Done) retur
8830: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
8840: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
8850: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
8860: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8870: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
8880: 6f 72 43 6f 64 65 20 72 3b 0d 0a 0d 0a 20 20 20  orCode r;....   
8890: 20 20 20 20 20 20 20 2f 2f 20 41 6e 20 65 72 72         // An err
88a0: 6f 72 20 6f 63 63 75 72 72 65 64 2c 20 61 74 74  or occurred, att
88b0: 65 6d 70 74 20 74 6f 20 72 65 73 65 74 20 74 68  empt to reset th
88c0: 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 66  e statement.  If
88d0: 20 74 68 65 20 72 65 73 65 74 20 77 6f 72 6b 65   the reset worke
88e0: 64 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20  d because the.. 
88f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 73 63 68 65           // sche
8900: 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ma has changed, 
8910: 72 65 2d 74 72 79 20 74 68 65 20 73 74 65 70 20  re-try the step 
8920: 61 67 61 69 6e 2e 20 20 49 66 20 69 74 20 65 72  again.  If it er
8930: 72 6f 72 65 64 20 6f 75 72 20 62 65 63 61 75 73  rored our becaus
8940: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a  e the database..
8950: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69 73 20            // is 
8960: 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20 6b 65 65  locked, then kee
8970: 70 20 72 65 74 72 79 69 6e 67 20 75 6e 74 69 6c  p retrying until
8980: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 69 6d   the command tim
8990: 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20  eout occurs...  
89a0: 20 20 20 20 20 20 20 20 72 20 3d 20 52 65 73 65          r = Rese
89b0: 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  t(stmt);....    
89c0: 20 20 20 20 20 20 69 66 20 28 72 20 3d 3d 20 53        if (r == S
89d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
89e0: 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
89f0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
8a00: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
8a10: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
8a20: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
8a30: 69 66 20 28 28 72 20 3d 3d 20 53 51 4c 69 74 65  if ((r == SQLite
8a40: 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
8a50: 20 7c 7c 20 72 20 3d 3d 20 53 51 4c 69 74 65 45   || r == SQLiteE
8a60: 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 26  rrorCode.Busy) &
8a70: 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20  & stmt._command 
8a80: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
8a90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8aa0: 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e     // Keep tryin
8ab0: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  g..            i
8ac0: 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20  f (rnd == null) 
8ad0: 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20 77 65  // First time we
8ae0: 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  've encountered 
8af0: 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20  the lock..      
8b00: 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20 6e 65          rnd = ne
8b10: 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20  w Random();.... 
8b20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66             // If
8b30: 20 77 65 27 76 65 20 65 78 63 65 65 64 65 64 20   we've exceeded 
8b40: 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69  the command's ti
8b50: 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70 20 61  meout, give up a
8b60: 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f  nd throw an erro
8b70: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  r..            i
8b80: 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e  f ((uint)Environ
8b90: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d  ment.TickCount -
8ba0: 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74 69 6d   starttick > tim
8bb0: 65 6f 75 74 29 0d 0a 20 20 20 20 20 20 20 20 20  eout)..         
8bc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8bd0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
8be0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 2c  LiteException(r,
8bf0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
8c00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
8c20: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
8c30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8c40: 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c   // Otherwise sl
8c50: 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d  eep for a random
8c60: 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
8c70: 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20  up to 150ms..   
8c80: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
8c90: 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65  m.Threading.Thre
8ca0: 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78  ad.Sleep(rnd.Nex
8cb0: 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20  t(1, 150));..   
8cc0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8cd0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8ce0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
8cf0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
8d00: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
8d10: 20 48 61 73 20 74 68 65 20 73 71 6c 69 74 65 33   Has the sqlite3
8d20: 5f 65 72 72 73 74 72 28 29 20 63 6f 72 65 20 6c  _errstr() core l
8d30: 69 62 72 61 72 79 20 41 50 49 20 62 65 65 6e 20  ibrary API been 
8d40: 63 68 65 63 6b 65 64 20 66 6f 72 20 79 65 74 3f  checked for yet?
8d50: 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73 6f 2c  ..    /// If so,
8d60: 20 69 73 20 69 74 20 70 72 65 73 65 6e 74 3f 0d   is it present?.
8d70: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
8d80: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
8d90: 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 68 61   static bool? ha
8da0: 76 65 5f 65 72 72 73 74 72 20 3d 20 6e 75 6c 6c  ve_errstr = null
8db0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
8dc0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
8dd0: 52 65 74 75 72 6e 73 20 74 68 65 20 65 72 72 6f  Returns the erro
8de0: 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 74 68  r message for th
8df0: 65 20 73 70 65 63 69 66 69 65 64 20 53 51 4c 69  e specified SQLi
8e00: 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 75  te return code u
8e10: 73 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68  sing..    /// th
8e20: 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72  e sqlite3_errstr
8e30: 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 66 61 6c  () function, fal
8e40: 6c 69 6e 67 20 62 61 63 6b 20 74 6f 20 74 68 65  ling back to the
8e50: 20 69 6e 74 65 72 6e 61 6c 20 6c 6f 6f 6b 75 70   internal lookup
8e60: 0d 0a 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20  ..    /// table 
8e70: 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20  if necessary... 
8e80: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8e90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
8ea0: 6d 20 6e 61 6d 65 3d 22 72 63 22 3e 54 68 65 20  m name="rc">The 
8eb0: 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
8ec0: 64 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  de.</param>..   
8ed0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
8ee0: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
8ef0: 6f 72 20 6e 75 6c 6c 20 69 66 20 69 74 20 63 61  or null if it ca
8f00: 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 2e 3c 2f  nnot be found.</
8f10: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
8f20: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74  ternal static st
8f30: 72 69 6e 67 20 47 65 74 45 72 72 6f 72 53 74 72  ring GetErrorStr
8f40: 69 6e 67 28 53 51 4c 69 74 65 45 72 72 6f 72 43  ing(SQLiteErrorC
8f50: 6f 64 65 20 72 63 29 0d 0a 20 20 20 20 7b 0d 0a  ode rc)..    {..
8f60: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
8f70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8f80: 20 20 20 20 69 66 20 28 68 61 76 65 5f 65 72 72      if (have_err
8f90: 73 74 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  str == null)..  
8fa0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
8fc0: 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3d   versionNumber =
8fd0: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75   SQLiteVersionNu
8fe0: 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  mber;..         
8ff0: 20 20 20 20 20 20 20 68 61 76 65 5f 65 72 72 73         have_errs
9000: 74 72 20 3d 20 28 76 65 72 73 69 6f 6e 4e 75 6d  tr = (versionNum
9010: 62 65 72 20 3e 3d 20 33 30 30 37 30 31 35 29 3b  ber >= 3007015);
9020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9030: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
9040: 66 20 28 28 62 6f 6f 6c 29 68 61 76 65 5f 65 72  f ((bool)have_er
9050: 72 73 74 72 29 0d 0a 20 20 20 20 20 20 20 20 20  rstr)..         
9060: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9070: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
9080: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
9090: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
90a0: 72 72 73 74 72 28 72 63 29 3b 0d 0a 0d 0a 20 20  rrstr(rc);....  
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
90c0: 20 28 70 74 72 20 21 3d 20 49 6e 74 50 74 72 2e   (ptr != IntPtr.
90d0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
90e0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50         {..#if !P
90f0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
9100: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
9110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9120: 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 50 74 72  turn Marshal.Ptr
9130: 54 6f 53 74 72 69 6e 67 41 6e 73 69 28 70 74 72  ToStringAnsi(ptr
9140: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
9150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9160: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
9170: 6e 67 28 70 74 72 2c 20 2d 31 29 3b 0d 0a 23 65  ng(ptr, -1);..#e
9180: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
9190: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
91a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
91b0: 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  }..        catch
91c0: 20 28 45 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46   (EntryPointNotF
91d0: 6f 75 6e 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a  oundException)..
91e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
91f0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
9200: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
9210: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
9220: 72 6e 20 46 61 6c 6c 62 61 63 6b 47 65 74 45 72  rn FallbackGetEr
9230: 72 6f 72 53 74 72 69 6e 67 28 72 63 29 3b 0d 0a  rorString(rc);..
9240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
9250: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
9260: 2f 2f 2f 20 48 61 73 20 74 68 65 20 73 71 6c 69  /// Has the sqli
9270: 74 65 33 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c  te3_stmt_readonl
9280: 79 28 29 20 63 6f 72 65 20 6c 69 62 72 61 72 79  y() core library
9290: 20 41 50 49 20 62 65 65 6e 20 63 68 65 63 6b 65   API been checke
92a0: 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20  d for yet?..    
92b0: 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20 69 74  /// If so, is it
92c0: 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f   present?..    /
92d0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
92e0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
92f0: 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 73 74 6d  c bool? have_stm
9300: 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 6e 75 6c  t_readonly = nul
9310: 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  l;....    /// <s
9320: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
9330: 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   Returns non-zer
9340: 6f 20 69 66 20 74 68 65 20 73 70 65 63 69 66 69  o if the specifi
9350: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
9360: 72 65 61 64 2d 6f 6e 6c 79 20 69 6e 20 6e 61 74  read-only in nat
9370: 75 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ure...    /// </
9380: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9390: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
93a0: 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65  tmt">The stateme
93b0: 6e 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61  nt to check.</pa
93c0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
93d0: 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20 74  eturns>True if t
93e0: 68 65 20 6f 75 74 65 72 20 71 75 65 72 79 20 69  he outer query i
93f0: 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 72 65  s read-only.</re
9400: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
9410: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
9420: 6f 6c 20 49 73 52 65 61 64 4f 6e 6c 79 28 0d 0a  ol IsReadOnly(..
9430: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
9440: 61 74 65 6d 65 6e 74 20 73 74 6d 74 0d 0a 20 20  atement stmt..  
9450: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
9460: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
9470: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9480: 20 20 20 20 69 66 20 28 68 61 76 65 5f 73 74 6d      if (have_stm
9490: 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 3d 20 6e 75  t_readonly == nu
94a0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
94b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
94c0: 20 20 20 20 69 6e 74 20 76 65 72 73 69 6f 6e 4e      int versionN
94d0: 75 6d 62 65 72 20 3d 20 53 51 4c 69 74 65 56 65  umber = SQLiteVe
94e0: 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20  rsionNumber;..  
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
9500: 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79  ve_stmt_readonly
9510: 20 3d 20 28 76 65 72 73 69 6f 6e 4e 75 6d 62 65   = (versionNumbe
9520: 72 20 3e 3d 20 33 30 30 37 30 30 34 29 3b 0d 0a  r >= 3007004);..
9530: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
9550: 28 28 62 6f 6f 6c 29 68 61 76 65 5f 73 74 6d 74  ((bool)have_stmt
9560: 5f 72 65 61 64 6f 6e 6c 79 29 0d 0a 20 20 20 20  _readonly)..    
9570: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9580: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9590: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
95a0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 74  thods.sqlite3_st
95b0: 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 0d 0a 20 20  mt_readonly(..  
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95d0: 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73    stmt._sqlite_s
95e0: 74 6d 74 29 20 21 3d 20 30 3b 0d 0a 20 20 20 20  tmt) != 0;..    
95f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9600: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63 61     }..        ca
9610: 74 63 68 20 28 45 6e 74 72 79 50 6f 69 6e 74 4e  tch (EntryPointN
9620: 6f 74 46 6f 75 6e 64 45 78 63 65 70 74 69 6f 6e  otFoundException
9630: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
9640: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
9650: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
9660: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
9670: 65 74 75 72 6e 20 66 61 6c 73 65 3b 20 2f 2a 20  eturn false; /* 
9680: 4e 4f 54 45 3a 20 55 6e 6b 6e 6f 77 6e 2c 20 61  NOTE: Unknown, a
9690: 73 73 75 6d 65 20 66 61 6c 73 65 2e 20 2a 2f 0d  ssume false. */.
96a0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
96b0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
96c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
96d0: 52 65 73 65 74 28 53 51 4c 69 74 65 53 74 61 74  Reset(SQLiteStat
96e0: 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20  ement stmt)..   
96f0: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
9700: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a  ErrorCode n;....
9710: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
9720: 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20  DARD..      n = 
9730: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9740: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65  ods.sqlite3_rese
9750: 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  t_interop(stmt._
9760: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23  sqlite_stmt);..#
9770: 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20  else..      n = 
9780: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
9790: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65  ods.sqlite3_rese
97a0: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
97b0: 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  tmt);..#endif...
97c0: 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 74 68 65  .      // If the
97d0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 64 2c   schema changed,
97e0: 20 74 72 79 20 61 6e 64 20 72 65 2d 70 72 65 70   try and re-prep
97f0: 61 72 65 20 69 74 0d 0a 20 20 20 20 20 20 69 66  are it..      if
9800: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
9810: 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a  orCode.Schema)..
9820: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9830: 20 2f 2f 20 52 65 63 72 65 61 74 65 20 61 20 64   // Recreate a d
9840: 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e 74 0d 0a  ummy statement..
9850: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9860: 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  tr = null;..    
9870: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
9880: 65 53 74 61 74 65 6d 65 6e 74 20 74 6d 70 20 3d  eStatement tmp =
9890: 20 50 72 65 70 61 72 65 28 6e 75 6c 6c 2c 20 73   Prepare(null, s
98a0: 74 6d 74 2e 5f 73 71 6c 53 74 61 74 65 6d 65 6e  tmt._sqlStatemen
98b0: 74 2c 20 6e 75 6c 6c 2c 20 28 75 69 6e 74 29 28  t, null, (uint)(
98c0: 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63  stmt._command._c
98d0: 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20  ommandTimeout * 
98e0: 31 30 30 30 29 2c 20 72 65 66 20 73 74 72 29 29  1000), ref str))
98f0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
9900: 20 20 20 20 20 20 20 2f 2f 20 46 69 6e 61 6c 69         // Finali
9910: 7a 65 20 74 68 65 20 65 78 69 73 74 69 6e 67 20  ze the existing 
9920: 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20  statement..     
9930: 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74       stmt._sqlit
9940: 65 5f 73 74 6d 74 2e 44 69 73 70 6f 73 65 28 29  e_stmt.Dispose()
9950: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ;..          // 
9960: 52 65 61 73 73 69 67 6e 20 61 20 6e 65 77 20 73  Reassign a new s
9970: 74 61 74 65 6d 65 6e 74 20 70 6f 69 6e 74 65 72  tatement pointer
9980: 20 74 6f 20 74 68 65 20 6f 6c 64 20 73 74 61 74   to the old stat
9990: 65 6d 65 6e 74 20 61 6e 64 20 63 6c 65 61 72 20  ement and clear 
99a0: 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 6f 6e  the temporary on
99b0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  e..          if 
99c0: 28 74 6d 70 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  (tmp != null).. 
99d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
99e0: 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71          stmt._sq
99f0: 6c 69 74 65 5f 73 74 6d 74 20 3d 20 74 6d 70 2e  lite_stmt = tmp.
9a00: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20  _sqlite_stmt;.. 
9a10: 20 20 20 20 20 20 20 20 20 20 20 74 6d 70 2e 5f             tmp._
9a20: 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d 20 6e 75  sqlite_stmt = nu
9a30: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ll;..          }
9a40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
9a50: 20 52 65 61 70 70 6c 79 20 70 61 72 61 6d 65 74   Reapply paramet
9a60: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ers..          s
9a70: 74 6d 74 2e 42 69 6e 64 50 61 72 61 6d 65 74 65  tmt.BindParamete
9a80: 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rs();..        }
9a90: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9aa0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9ab0: 2e 55 6e 6b 6e 6f 77 6e 3b 20 2f 2f 20 52 65 73  .Unknown; // Res
9ac0: 65 74 20 77 61 73 20 4f 4b 2c 20 77 69 74 68 20  et was OK, with 
9ad0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 0d 0a 20  schema change.. 
9ae0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
9af0: 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
9b00: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b  teErrorCode.Lock
9b10: 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74  ed || n == SQLit
9b20: 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29  eErrorCode.Busy)
9b30: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9b40: 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20   n;....      if 
9b50: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
9b60: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
9b70: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
9b80: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
9b90: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
9ba0: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
9bb0: 20 6e 3b 20 2f 2f 20 57 65 20 72 65 73 65 74 20   n; // We reset 
9bc0: 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d 61 20 63 68  OK, no schema ch
9bd0: 61 6e 67 65 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  anges..    }....
9be0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9bf0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
9c00: 4c 61 73 74 45 72 72 6f 72 28 29 0d 0a 20 20 20  LastError()..   
9c10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
9c20: 72 6e 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  rn GetLastError(
9c30: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  null);..    }...
9c40: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
9c50: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
9c60: 74 4c 61 73 74 45 72 72 6f 72 28 73 74 72 69 6e  tLastError(strin
9c70: 67 20 64 65 66 56 61 6c 75 65 29 0d 0a 20 20 20  g defValue)..   
9c80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69   {..        stri
9c90: 6e 67 20 72 65 73 75 6c 74 20 3d 20 53 51 4c 69  ng result = SQLi
9ca0: 74 65 42 61 73 65 2e 47 65 74 4c 61 73 74 45 72  teBase.GetLastEr
9cb0: 72 6f 72 28 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b  ror(_sql, _sql);
9cc0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74  ..        if (St
9cd0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
9ce0: 74 79 28 72 65 73 75 6c 74 29 29 20 72 65 73 75  ty(result)) resu
9cf0: 6c 74 20 3d 20 64 65 66 56 61 6c 75 65 3b 0d 0a  lt = defValue;..
9d00: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
9d10: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  esult;..    }...
9d20: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
9d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d80: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
9d90: 69 6f 6e 20 51 75 65 72 79 20 44 69 61 67 6e 6f  ion Query Diagno
9da0: 73 74 69 63 73 20 53 75 70 70 6f 72 74 0d 0a 23  stics Support..#
9db0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
9dc0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
9dd0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
9de0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66  ..    /// This f
9df0: 69 65 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20  ield is used to 
9e00: 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 20 77 68  keep track of wh
9e10: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
9e20: 0d 0a 20 20 20 20 2f 2f 2f 20 22 53 51 4c 69 74  ..    /// "SQLit
9e30: 65 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72  e_ForceLogPrepar
9e40: 65 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  e" environment v
9e50: 61 72 69 61 62 6c 65 20 68 61 73 20 62 65 65 6e  ariable has been
9e60: 20 71 75 65 72 69 65 64 2e 20 20 49 66 20 73 6f   queried.  If so
9e70: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 77 69  ,..    /// it wi
9e80: 6c 6c 20 6f 6e 6c 79 20 62 65 20 6e 6f 6e 2d 7a  ll only be non-z
9e90: 65 72 6f 20 69 66 20 74 68 65 20 65 6e 76 69 72  ero if the envir
9ea0: 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20  onment variable 
9eb0: 77 61 73 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20  was present...  
9ec0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9ed0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
9ee0: 61 74 69 63 20 62 6f 6f 6c 3f 20 66 6f 72 63 65  atic bool? force
9ef0: 4c 6f 67 50 72 65 70 61 72 65 20 3d 20 6e 75 6c  LogPrepare = nul
9f00: 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  l;....    //////
9f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20  /////////....   
9f70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
9f80: 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
9f90: 65 73 20 69 66 20 61 6c 6c 20 63 61 6c 6c 73 20  es if all calls 
9fa0: 74 6f 20 70 72 65 70 61 72 65 20 61 20 53 51 4c  to prepare a SQL
9fb0: 20 71 75 65 72 79 20 77 69 6c 6c 20 62 65 20 6c   query will be l
9fc0: 6f 67 67 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20  ogged,..    /// 
9fd0: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  regardless of th
9fe0: 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20  e flags for the 
9ff0: 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 6e 65  associated conne
a000: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
a010: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
a020: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
a030: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
a040: 74 6f 20 6c 6f 67 20 61 6c 6c 20 63 61 6c 6c 73  to log all calls
a050: 20 74 6f 20 70 72 65 70 61 72 65 20 61 20 53 51   to prepare a SQ
a060: 4c 20 71 75 65 72 79 2e 0d 0a 20 20 20 20 2f 2f  L query...    //
a070: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
a080: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
a090: 20 62 6f 6f 6c 20 46 6f 72 63 65 4c 6f 67 50 72   bool ForceLogPr
a0a0: 65 70 61 72 65 28 29 0d 0a 20 20 20 20 7b 0d 0a  epare()..    {..
a0b0: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
a0c0: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
a0d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a0e0: 69 66 20 28 66 6f 72 63 65 4c 6f 67 50 72 65 70  if (forceLogPrep
a0f0: 61 72 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  are == null)..  
a100: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a110: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a120: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
a130: 68 6f 64 73 2e 47 65 74 53 65 74 74 69 6e 67 56  hods.GetSettingV
a140: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
a150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
a160: 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c 6f 67 50  SQLite_ForceLogP
a170: 72 65 70 61 72 65 22 2c 20 6e 75 6c 6c 29 20 21  repare", null) !
a180: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a190: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1b0: 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20  forceLogPrepare 
a1c0: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
a1d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
a1e0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
a1f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a200: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a210: 20 20 20 20 20 20 20 20 20 66 6f 72 63 65 4c 6f           forceLo
a220: 67 50 72 65 70 61 72 65 20 3d 20 66 61 6c 73 65  gPrepare = false
a230: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a240: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
a250: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a260: 20 20 20 72 65 74 75 72 6e 20 28 62 6f 6f 6c 29     return (bool)
a270: 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 3b  forceLogPrepare;
a280: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
a290: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   }..#endif..    
a2a0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a2b0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a310: 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  /....    interna
a320: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
a330: 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70 61  eStatement Prepa
a340: 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  re(SQLiteConnect
a350: 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20  ion cnn, string 
a360: 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53 74  strSql, SQLiteSt
a370: 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73  atement previous
a380: 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53  , uint timeoutMS
a390: 2c 20 72 65 66 20 73 74 72 69 6e 67 20 73 74 72  , ref string str
a3a0: 52 65 6d 61 69 6e 29 0d 0a 20 20 20 20 7b 0d 0a  Remain)..    {..
a3b0: 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
a3c0: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
a3d0: 73 74 72 53 71 6c 29 29 20 73 74 72 53 71 6c 20  strSql)) strSql 
a3e0: 3d 20 73 74 72 53 71 6c 2e 54 72 69 6d 28 29 3b  = strSql.Trim();
a3f0: 0d 0a 20 20 20 20 20 20 69 66 20 28 21 53 74 72  ..      if (!Str
a400: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
a410: 79 28 73 74 72 53 71 6c 29 29 0d 0a 20 20 20 20  y(strSql))..    
a420: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d    {..        //.
a430: 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
a440: 3a 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  : SQLite does no
a450: 74 20 73 75 70 70 6f 72 74 20 74 68 65 20 63 6f  t support the co
a460: 6e 63 65 70 74 20 6f 66 20 73 65 70 61 72 61 74  ncept of separat
a470: 65 20 73 63 68 65 6d 61 73 0d 0a 20 20 20 20 20  e schemas..     
a480: 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 20 6f     //       in o
a490: 6e 65 20 64 61 74 61 62 61 73 65 3b 20 74 68 65  ne database; the
a4a0: 72 65 66 6f 72 65 2c 20 72 65 6d 6f 76 65 20 74  refore, remove t
a4b0: 68 65 20 62 61 73 65 20 73 63 68 65 6d 61 20 6e  he base schema n
a4c0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ame..        // 
a4d0: 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 73 6d        used to sm
a4e0: 6f 6f 74 68 20 69 6e 74 65 67 72 61 74 69 6f 6e  ooth integration
a4f0: 20 77 69 74 68 20 74 68 65 20 62 61 73 65 20 2e   with the base .
a500: 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a 20  NET Framework.. 
a510: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
a520: 64 61 74 61 20 63 6c 61 73 73 65 73 2e 0d 0a 20  data classes... 
a530: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
a540: 20 20 20 73 74 72 69 6e 67 20 62 61 73 65 53 63     string baseSc
a550: 68 65 6d 61 4e 61 6d 65 20 3d 20 28 63 6e 6e 20  hemaName = (cnn 
a560: 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f  != null) ? cnn._
a570: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3a  baseSchemaName :
a580: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
a590: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
a5a0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 62 61 73 65  NullOrEmpty(base
a5b0: 53 63 68 65 6d 61 4e 61 6d 65 29 29 0d 0a 20 20  SchemaName))..  
a5c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a5d0: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53     strSql = strS
a5e0: 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20  ql.Replace(..   
a5f0: 20 20 20 20 20 20 20 20 20 20 20 48 65 6c 70 65             Helpe
a600: 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
a610: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
a620: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
a630: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
a640: 20 20 20 22 5b 7b 30 7d 5d 2e 22 2c 20 62 61 73     "[{0}].", bas
a650: 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74  eSchemaName), St
a660: 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a  ring.Empty);....
a670: 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71 6c            strSql
a680: 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63   = strSql.Replac
a690: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
a6a0: 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e    HelperMethods.
a6b0: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c  StringFormat(Cul
a6c0: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
a6d0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
a6e0: 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2e 22            "{0}."
a6f0: 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  , baseSchemaName
a700: 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29  ), String.Empty)
a710: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
a720: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 53      }....      S
a730: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
a740: 6c 61 67 73 20 66 6c 61 67 73 20 3d 0d 0a 20 20  lags flags =..  
a750: 20 20 20 20 20 20 20 20 28 63 6e 6e 20 21 3d 20          (cnn != 
a760: 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 46 6c 61 67  null) ? cnn.Flag
a770: 73 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s : SQLiteConnec
a780: 74 69 6f 6e 46 6c 61 67 73 2e 44 65 66 61 75 6c  tionFlags.Defaul
a790: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
a7a0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
a7b0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
a7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 46 6f 72 63  ..          Forc
a7d0: 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c 7c  eLogPrepare() ||
a7e0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
a7f0: 20 20 20 20 28 28 66 6c 61 67 73 20 26 20 53 51      ((flags & SQ
a800: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
a810: 61 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 20  ags.LogPrepare) 
a820: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
a830: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50 72 65 70  ionFlags.LogPrep
a840: 61 72 65 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  are))..      {..
a850: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 73            if ((s
a860: 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c  trSql == null) |
a870: 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  | (strSql.Length
a880: 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72 53 71   == 0) || (strSq
a890: 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74 68 20  l.Trim().Length 
a8a0: 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20  == 0))..        
a8b0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
a8c0: 4c 6f 67 4d 65 73 73 61 67 65 28 22 50 72 65 70  LogMessage("Prep
a8d0: 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67 3e  aring {<nothing>
a8e0: 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20 20 20  }...");..       
a8f0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
a900: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
a910: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70  .LogMessage(Help
a920: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
a930: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
a940: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
a950: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
a960: 6c 74 75 72 65 2c 20 22 50 72 65 70 61 72 69 6e  lture, "Preparin
a970: 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73  g {{{0}}}...", s
a980: 74 72 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20  trSql));..      
a990: 7d 0d 0a 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  }....      IntPt
a9a0: 72 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e  r stmt = IntPtr.
a9b0: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74  Zero;..      Int
a9c0: 50 74 72 20 70 74 72 20 3d 20 49 6e 74 50 74 72  Ptr ptr = IntPtr
a9d0: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e  .Zero;..      in
a9e0: 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  t len = 0;..    
a9f0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
aa00: 65 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f  e n = SQLiteErro
aa10: 72 43 6f 64 65 2e 53 63 68 65 6d 61 3b 0d 0a 20  rCode.Schema;.. 
aa20: 20 20 20 20 20 69 6e 74 20 72 65 74 72 69 65 73       int retries
aa30: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74   = 0;..      int
aa40: 20 6d 61 78 69 6d 75 6d 52 65 74 72 69 65 73 20   maximumRetries 
aa50: 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20  = (cnn != null) 
aa60: 3f 20 63 6e 6e 2e 5f 70 72 65 70 61 72 65 52 65  ? cnn._prepareRe
aa70: 74 72 69 65 73 20 3a 20 53 51 4c 69 74 65 43 6f  tries : SQLiteCo
aa80: 6e 6e 65 63 74 69 6f 6e 2e 44 65 66 61 75 6c 74  nnection.Default
aa90: 50 72 65 70 61 72 65 52 65 74 72 69 65 73 3b 0d  PrepareRetries;.
aaa0: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20  .      byte[] b 
aab0: 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71 6c 29  = ToUTF8(strSql)
aac0: 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ;..      string 
aad0: 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b  typedefs = null;
aae0: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74  ..      SQLiteSt
aaf0: 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75  atement cmd = nu
ab00: 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f  ll;..      Rando
ab10: 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  m rnd = null;.. 
ab20: 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74       uint startt
ab30: 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69  ick = (uint)Envi
ab40: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
ab50: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65 73 65  t;....      Rese
ab60: 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 3b 0d  tCancelCount();.
ab70: 0a 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c  ...      GCHandl
ab80: 65 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e  e handle = GCHan
ab90: 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48  dle.Alloc(b, GCH
aba0: 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64  andleType.Pinned
abb0: 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  );..      IntPtr
abc0: 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41   psql = handle.A
abd0: 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63  ddrOfPinnedObjec
abe0: 74 28 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  t();..      SQLi
abf0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
ac00: 65 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  e statementHandl
ac10: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
ac20: 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   try..      {.. 
ac30: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e         while ((n
ac40: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
ac50: 6f 64 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20  ode.Schema || n 
ac60: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
ac70: 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d  de.Locked || n =
ac80: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
ac90: 65 2e 42 75 73 79 29 20 26 26 20 72 65 74 72 69  e.Busy) && retri
aca0: 65 73 20 3c 20 6d 61 78 69 6d 75 6d 52 65 74 72  es < maximumRetr
acb0: 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ies)..        {.
acc0: 0a 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a  .          try..
acd0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ace0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
acf0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
ad00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
ad10: 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
ad20: 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
ad30: 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
ad40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ad50: 20 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20           stmt = 
ad60: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
ad70: 20 20 20 20 20 20 20 20 20 20 70 74 72 20 3d 20            ptr = 
ad80: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
ad90: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
ada0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
adb0: 20 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20    len = 0;..    
adc0: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
add0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
ade0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
adf0: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73  interop(_sql, ps
ae00: 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31  ql, b.Length - 1
ae10: 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20  , ref stmt, ref 
ae20: 70 74 72 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a  ptr, ref len);..
ae30: 23 65 6c 73 65 0d 0a 23 69 66 20 55 53 45 5f 50  #else..#if USE_P
ae40: 52 45 50 41 52 45 5f 56 32 0d 0a 20 20 20 20 20  REPARE_V2..     
ae50: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
ae60: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ae70: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
ae80: 32 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  2(_sql, psql, b.
ae90: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20  Length - 1, ref 
aea0: 73 74 6d 74 2c 20 72 65 66 20 70 74 72 29 3b 0d  stmt, ref ptr);.
aeb0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
aec0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
aed0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
aee0: 74 65 33 5f 70 72 65 70 61 72 65 28 5f 73 71 6c  te3_prepare(_sql
aef0: 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68  , psql, b.Length
af00: 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20   - 1, ref stmt, 
af10: 72 65 66 20 70 74 72 29 3b 0d 0a 23 65 6e 64 69  ref ptr);..#endi
af20: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  f..            l
af30: 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66  en = -1;..#endif
af40: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
af50: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
af60: 5f 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20  _STATEMENT..    
af70: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
af80: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
af90: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
afa0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
afb0: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
afc0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
afd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
afe0: 20 20 22 50 72 65 70 61 72 65 20 28 7b 30 7d 29    "Prepare ({0})
aff0: 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29  : {1}", n, stmt)
b000: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
b010: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
b020: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
b030: 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73 74 6d 74  ode.Ok) && (stmt
b040: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
b050: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b070: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e  if (statementHan
b080: 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 73 74 61  dle != null) sta
b090: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2e 44 69 73  tementHandle.Dis
b0a0: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
b0b0: 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
b0c0: 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c  Handle = new SQL
b0d0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
b0e0: 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 3b 0d  le(_sql, stmt);.
b0f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b100: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b110: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61           if (sta
b120: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20  tementHandle != 
b130: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
b140: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b150: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b160: 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
b170: 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
b180: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
b190: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
b1a0: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79  onnectionEventTy
b1b0: 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61  pe.NewCriticalHa
b1c0: 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  ndle, null, null
b1d0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
b1e0: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 73 74 61   null, null, sta
b1f0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74  tementHandle, st
b200: 72 53 71 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  rSql, new object
b210: 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
b220: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
b230: 65 33 29 2c 20 63 6e 6e 2c 20 73 74 72 53 71 6c  e3), cnn, strSql
b240: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
b250: 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a 20 20 20 20  outMS }));..    
b260: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b270: 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54       if (ShouldT
b280: 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29  hrowForCancel())
b290: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b2b0: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
b2c0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20  orCode.Ok) ||.. 
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2e0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
b2f0: 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a  orCode.Row) ||..
b300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b310: 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72    (n == SQLiteEr
b320: 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a  rorCode.Done))..
b330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
b340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b350: 20 20 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72     n = SQLiteErr
b360: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
b370: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b380: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
b390: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
b3a0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
b3b0: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
b3c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b3d0: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
b3e0: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
b3f0: 72 75 70 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rupt)..         
b400: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
b410: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
b420: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
b430: 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20  de.Schema)..    
b440: 20 20 20 20 20 20 20 20 72 65 74 72 69 65 73 2b          retries+
b450: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  +;..          el
b460: 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
b470: 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
b480: 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  r)..          {.
b490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
b4a0: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
b4b0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20  GetLastError(), 
b4c0: 22 6e 65 61 72 20 5c 22 54 59 50 45 53 5c 22 3a  "near \"TYPES\":
b4d0: 20 73 79 6e 74 61 78 20 65 72 72 6f 72 22 2c 20   syntax error", 
b4e0: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
b4f0: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
b500: 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  se) == 0)..     
b510: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b520: 20 20 20 20 20 20 20 20 69 6e 74 20 70 6f 73 20          int pos 
b530: 3d 20 73 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66  = strSql.IndexOf
b540: 28 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  (';');..        
b550: 20 20 20 20 20 20 69 66 20 28 70 6f 73 20 3d 3d        if (pos ==
b560: 20 2d 31 29 20 70 6f 73 20 3d 20 73 74 72 53 71   -1) pos = strSq
b570: 6c 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d  l.Length - 1;...
b580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
b590: 79 70 65 64 65 66 73 20 3d 20 73 74 72 53 71 6c  ypedefs = strSql
b5a0: 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 70 6f  .Substring(0, po
b5b0: 73 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20  s + 1);..       
b5c0: 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20         strSql = 
b5d0: 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67  strSql.Substring
b5e0: 28 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20  (pos + 1);....  
b5f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52              strR
b600: 65 6d 61 69 6e 20 3d 20 53 74 72 69 6e 67 2e 45  emain = String.E
b610: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
b620: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d         while (cm
b630: 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72  d == null && str
b640: 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  Sql.Length > 0).
b650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
b660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b670: 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28    cmd = Prepare(
b680: 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65  cnn, strSql, pre
b690: 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53  vious, timeoutMS
b6a0: 2c 20 72 65 66 20 73 74 72 52 65 6d 61 69 6e 29  , ref strRemain)
b6b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b6c0: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52     strSql = strR
b6d0: 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20  emain;..        
b6e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b6f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6d 64           if (cmd
b700: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
b710: 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 53             cmd.S
b720: 65 74 54 79 70 65 73 28 74 79 70 65 64 65 66 73  etTypes(typedefs
b730: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
b740: 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d      return cmd;.
b750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b760: 23 69 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e  #if (NET_35 || N
b770: 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20  ET_40 || NET_45 
b780: 7c 7c 20 4e 45 54 5f 34 35 31 20 7c 7c 20 4e 45  || NET_451 || NE
b790: 54 5f 34 35 32 20 7c 7c 20 4e 45 54 5f 34 36 20  T_452 || NET_46 
b7a0: 7c 7c 20 4e 45 54 5f 34 36 31 20 7c 7c 20 4e 45  || NET_461 || NE
b7b0: 54 5f 34 36 32 29 20 26 26 20 21 50 4c 41 54 46  T_462) && !PLATF
b7c0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
b7d0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
b7e0: 20 20 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c    else if (_buil
b7f0: 64 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61  dingSchema == fa
b800: 6c 73 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f  lse && String.Co
b810: 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72  mpare(GetLastErr
b820: 6f 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63  or(), 0, "no suc
b830: 68 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43  h table: TEMP.SC
b840: 48 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74  HEMA", 0, 26, St
b850: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
b860: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
b870: 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) == 0)..       
b880: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b890: 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20        strRemain 
b8a0: 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  = String.Empty;.
b8b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
b8c0: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
b8d0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
b8e0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
b8f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b900: 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c              ISQL
b910: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
b920: 6f 6e 73 20 65 78 74 20 3d 20 28 28 49 53 65 72  ons ext = ((ISer
b930: 76 69 63 65 50 72 6f 76 69 64 65 72 29 53 51 4c  viceProvider)SQL
b940: 69 74 65 46 61 63 74 6f 72 79 2e 49 6e 73 74 61  iteFactory.Insta
b950: 6e 63 65 29 2e 47 65 74 53 65 72 76 69 63 65 28  nce).GetService(
b960: 74 79 70 65 6f 66 28 49 53 51 4c 69 74 65 53 63  typeof(ISQLiteSc
b970: 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29 29  hemaExtensions))
b980: 20 61 73 20 49 53 51 4c 69 74 65 53 63 68 65 6d   as ISQLiteSchem
b990: 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a  aExtensions;....
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9b0: 69 66 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29  if (ext != null)
b9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b9d0: 20 20 20 20 65 78 74 2e 42 75 69 6c 64 54 65 6d      ext.BuildTem
b9e0: 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d  pSchema(cnn);...
b9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ba00: 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e   while (cmd == n
ba10: 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65  ull && strSql.Le
ba20: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
ba30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ba40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba50: 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e  cmd = Prepare(cn
ba60: 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69  n, strSql, previ
ba70: 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20  ous, timeoutMS, 
ba80: 72 65 66 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d  ref strRemain);.
ba90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
baa0: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52     strSql = strR
bab0: 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20  emain;..        
bac0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
bae0: 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20  urn cmd;..      
baf0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
bb00: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
bb10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bb20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bb30: 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65     _buildingSche
bb40: 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ma = false;..   
bb50: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
bb60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
bb70: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  dif..          }
bb80: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
bb90: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
bba0: 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
bbb0: 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45   || n == SQLiteE
bbc0: 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 2f  rrorCode.Busy) /
bbd0: 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61  / Locked -- dela
bbe0: 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74  y a small amount
bbf0: 20 62 65 66 6f 72 65 20 72 65 74 72 79 69 6e 67   before retrying
bc00: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
bc10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65             // Ke
bc20: 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20  ep trying..     
bc30: 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d         if (rnd =
bc40: 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74  = null) // First
bc50: 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f   time we've enco
bc60: 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b  untered the lock
bc70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bc80: 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d  rnd = new Random
bc90: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
bca0: 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65     // If we've e
bcb0: 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d  xceeded the comm
bcc0: 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67  and's timeout, g
bcd0: 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77  ive up and throw
bce0: 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
bcf0: 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74         if ((uint
bd00: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
bd10: 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69  kCount - startti
bd20: 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d  ck > timeoutMS).
bd30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
bd50: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
bd60: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
bd70: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
bd80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
bd90: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
bda0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
bdb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74             // Ot
bdc0: 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f  herwise sleep fo
bdd0: 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e  r a random amoun
bde0: 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20  t of time up to 
bdf0: 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20  150ms..         
be00: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65       System.Thre
be10: 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65  ading.Thread.Sle
be20: 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31  ep(rnd.Next(1, 1
be30: 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  50));..         
be40: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
be50: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
be60: 20 20 20 20 20 20 20 20 69 66 20 28 53 68 6f 75          if (Shou
be70: 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c  ldThrowForCancel
be80: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ())..        {..
be90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
bea0: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
beb0: 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20  rCode.Ok) ||..  
bec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e                (n
bed0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
bee0: 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20  ode.Row) ||..   
bef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20               (n 
bf00: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
bf10: 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20  de.Done))..     
bf20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bf30: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 53 51            n = SQ
bf40: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e  LiteErrorCode.In
bf50: 74 65 72 72 75 70 74 3b 0d 0a 20 20 20 20 20 20  terrupt;..      
bf60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
bf70: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
bf80: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
bf90: 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  (n, null);..    
bfa0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
bfb0: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
bfc0: 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72  ErrorCode.Interr
bfd0: 75 70 74 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c  upt) return null
bfe0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
bff0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
c000: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
c010: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
c020: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
c030: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r());....       
c040: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46   strRemain = UTF
c050: 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c  8ToString(ptr, l
c060: 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  en);....        
c070: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e  if (statementHan
c080: 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64  dle != null) cmd
c090: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61   = new SQLiteSta
c0a0: 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c 61  tement(this, fla
c0b0: 67 73 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e  gs, statementHan
c0c0: 64 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75 62 73  dle, strSql.Subs
c0d0: 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e  tring(0, strSql.
c0e0: 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65 6d 61  Length - strRema
c0f0: 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72 65 76  in.Length), prev
c100: 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ious);....      
c110: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
c120: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 66 69       }..      fi
c130: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a  nally..      {..
c140: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 46          handle.F
c150: 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ree();..      }.
c160: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
c170: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
c180: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
c190: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
c1a0: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
c1b0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
c1c0: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
c1d0: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
c1e0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
c1f0: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
c200: 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
c210: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
c220: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
c230: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
c240: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
c250: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
c260: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
c270: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c  mter #{1} as NUL
c280: 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  L...",..        
c290: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
c2a0: 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20  , index));..    
c2b0: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
c2c0: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
c2d0: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
c2e0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
c2f0: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
c300: 56 61 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29  ValueType value)
c310: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
c320: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
c330: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
c340: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
c350: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48  Log.LogMessage(H
c360: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
c370: 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
c380: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
c390: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
c3a0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
c3b0: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
c3c0: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
c3d0: 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32   #{1} as type {2
c3e0: 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b  } with value {{{
c3f0: 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  3}}}...",..     
c400: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
c410: 50 74 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  Ptr, index, valu
c420: 65 2e 47 65 74 54 79 70 65 28 29 2c 20 76 61 6c  e.GetType(), val
c430: 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
c440: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
c450: 69 63 20 73 74 72 69 6e 67 20 46 6f 72 6d 61 74  ic string Format
c460: 44 61 74 65 54 69 6d 65 28 44 61 74 65 54 69 6d  DateTime(DateTim
c470: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
c480: 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42  .        StringB
c490: 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20  uilder result = 
c4a0: 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65  new StringBuilde
c4b0: 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
c4c0: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61  result.Append(va
c4d0: 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 22 79 79  lue.ToString("yy
c4e0: 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73  yy-MM-ddTHH:mm:s
c4f0: 73 2e 46 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a  s.FFFFFFFK"));..
c500: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
c510: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20  ppend(' ');..   
c520: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
c530: 6e 64 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d  nd(value.Kind);.
c540: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
c550: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20  Append(' ');..  
c560: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
c570: 65 6e 64 28 76 61 6c 75 65 2e 54 69 63 6b 73 29  end(value.Ticks)
c580: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
c590: 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72  urn result.ToStr
c5a0: 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ing();..    }...
c5b0: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
c5c0: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
c5d0: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
c5e0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
c5f0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65   int index, Date
c600: 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Time value)..   
c610: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
c620: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
c630: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
c640: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
c650: 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72  ogMessage(Helper
c660: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
c670: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
c680: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
c690: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
c6b0: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
c6c0: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
c6d0: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
c6e0: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
c6f0: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
c700: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
c710: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61  index, typeof(Da
c720: 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44  teTime), FormatD
c730: 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29  ateTime(value)))
c740: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
c750: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
c760: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
c770: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
c780: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
c790: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
c7a0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
c7b0: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
c7c0: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
c7d0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
c7e0: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
c7f0: 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
c800: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
c810: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
c820: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
c830: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
c840: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
c850: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
c860: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
c870: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
c880: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
c890: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
c8a0: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
c8b0: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20  typeof(String), 
c8c0: 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20  (value != null) 
c8d0: 3f 20 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c  ? value : "<null
c8e0: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
c8f0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
c900: 69 63 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61  ic string ToHexa
c910: 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a  decimalString(..
c920: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61          byte[] a
c930: 72 72 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d  rray..        ).
c940: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
c950: 69 66 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c  if (array == nul
c960: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
c970: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
c980: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
c990: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
c9a0: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
c9b0: 28 61 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20  (array.Length * 
c9c0: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  2);....        i
c9d0: 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61  nt length = arra
c9e0: 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  y.Length;....   
c9f0: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
ca00: 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
ca10: 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b   length; index++
ca20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
ca30: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72  esult.Append(arr
ca40: 61 79 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69  ay[index].ToStri
ca50: 6e 67 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20  ng("x2"));....  
ca60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
ca70: 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  ult.ToString();.
ca80: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
ca90: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
caa0: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
cab0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
cac0: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
cad0: 64 65 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  dex, byte[] valu
cae0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
caf0: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
cb00: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
cb10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
cb20: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
cb30: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
cb40: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
cb50: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
cb60: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
cb70: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
cb80: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
cb90: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
cba0: 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20  er #{1} as type 
cbb0: 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b  {2} with value {
cbc0: 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20  {{3}}}...",..   
cbd0: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
cbe0: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79  ntPtr, index, ty
cbf0: 70 65 6f 66 28 42 79 74 65 5b 5d 29 2c 20 28 76  peof(Byte[]), (v
cc00: 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  alue != null) ? 
cc10: 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53 74 72  ToHexadecimalStr
cc20: 69 6e 67 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e  ing(value) : "<n
cc30: 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d  ull>"));..    }.
cc40: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
cc50: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
cc60: 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65  nd_Double(SQLite
cc70: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
cc80: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cc90: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
cca0: 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76   index, double v
ccb0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
ccc0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
ccd0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
cce0: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
ccf0: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20  e_stmt;....     
cd00: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
cd10: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cd20: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
cd30: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
cd40: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
cd50: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
cd60: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
cd70: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
cd80: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
cd90: 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46   }....#if !PLATF
cda0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
cdb0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 53 51  WORK..        SQ
cdc0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
cdd0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
cde0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
cdf0: 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65  nd_double(handle
ce00: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
ce10: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
ce20: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
ce30: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
ce40: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
ce50: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
ce60: 28 29 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ());..#elif !SQL
ce70: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
ce80: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
ce90: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
cea0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ceb0: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
cec0: 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  e_interop(handle
ced0: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
cee0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ue);..        if
cef0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
cf00: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
cf10: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
cf20: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
cf30: 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 73 65 0d  rror());..#else.
cf40: 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e  .        throw n
cf50: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
cf60: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
cf70: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
cf80: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
cf90: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
cfa0: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
cfb0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
cfc0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
cfd0: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
cfe0: 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a  ex, int value)..
cff0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
d000: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
d010: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
d020: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
d030: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
d040: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
d050: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
d060: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
d070: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
d080: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
d090: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d0a0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
d0b0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
d0c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
d0d0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
d0e0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
d0f0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d100: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
d110: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
d120: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
d130: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
d140: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
d150: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
d160: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
d170: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
d180: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
d190: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
d1a0: 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69  Bind_UInt32(SQLi
d1b0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
d1c0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
d1d0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
d1e0: 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76  nt index, uint v
d1f0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
d200: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
d210: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
d220: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
d230: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20  e_stmt;....     
d240: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
d250: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d260: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
d270: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
d280: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
d290: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
d2a0: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
d2b0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
d2c0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
d2d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51   }....        SQ
d2e0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b  LiteErrorCode n;
d2f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
d300: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
d310: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42  onnectionFlags.B
d320: 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36 34  indUInt32AsInt64
d330: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
d340: 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55  ctionFlags.BindU
d350: 49 6e 74 33 32 41 73 49 6e 74 36 34 29 0d 0a 20  Int32AsInt64).. 
d360: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d370: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
d380: 32 20 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69  2 = value;....#i
d390: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
d3a0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
d3b0: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
d3c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d3d0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
d3e0: 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64  nt64(handle, ind
d3f0: 65 78 2c 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65  ex, value2);..#e
d400: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
d410: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
d420: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
d430: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d440: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74  3_bind_int64_int
d450: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
d460: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 32 29 3b  ex, ref value2);
d470: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
d480: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
d490: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
d4a0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
d4b0: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  f..        }..  
d4c0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
d4d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d4e0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
d4f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d500: 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61 6e  e3_bind_uint(han
d510: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
d520: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
d530: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
d540: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d550: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
d560: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
d570: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
d580: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
d590: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
d5a0: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74  de void Bind_Int
d5b0: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
d5c0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
d5d0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
d5e0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
d5f0: 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20   long value)..  
d600: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
d610: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
d620: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
d630: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
d640: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
d650: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
d660: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
d670: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
d680: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
d690: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
d6a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d6b0: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
d6c0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
d6d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66          }....#if
d6e0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
d6f0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
d700: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
d710: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
d720: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
d730: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
d740: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
d750: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
d760: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
d770: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
d780: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
d790: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
d7a0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69  tError());..#eli
d7b0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
d7c0: 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RD..        SQLi
d7d0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
d7e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d7f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
d800: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  _int64_interop(h
d810: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
d820: 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
d830: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
d840: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
d850: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
d860: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
d870: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
d880: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
d890: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
d8a0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
d8b0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
d8c0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
d8d0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
d8e0: 42 69 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c 69  Bind_UInt64(SQLi
d8f0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
d900: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
d910: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
d920: 6e 74 20 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20  nt index, ulong 
d930: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
d940: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
d950: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
d960: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
d970: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20  te_stmt;....    
d980: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
d990: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d9a0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
d9b0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
d9c0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
d9d0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
d9e0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
d9f0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
da00: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
da10: 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54    }....#if !PLAT
da20: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
da30: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 53  EWORK..        S
da40: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
da50: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
da60: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
da70: 69 6e 64 5f 75 69 6e 74 36 34 28 68 61 6e 64 6c  ind_uint64(handl
da80: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
da90: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
daa0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
dab0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
dac0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
dad0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
dae0: 72 28 29 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  r());..#elif !SQ
daf0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
db00: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
db10: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
db20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
db30: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74  qlite3_bind_uint
db40: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
db50: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
db60: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
db70: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
db80: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
db90: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
dba0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
dbb0: 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 73 65  Error());..#else
dbc0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
dbd0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
dbe0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
dbf0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
dc00: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
dc10: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
dc20: 5f 42 6f 6f 6c 65 61 6e 28 53 51 4c 69 74 65 53  _Boolean(SQLiteS
dc30: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
dc40: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
dc50: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
dc60: 69 6e 64 65 78 2c 20 62 6f 6f 6c 20 76 61 6c 75  index, bool valu
dc70: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
dc80: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
dc90: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
dca0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
dcb0: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
dcc0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
dcd0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
dce0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
dcf0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
dd00: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
dd10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
dd20: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
dd30: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
dd40: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
dd50: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76  ...        int v
dd60: 61 6c 75 65 32 20 3d 20 76 61 6c 75 65 20 3f 20  alue2 = value ? 
dd70: 31 20 3a 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  1 : 0;....      
dd80: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
dd90: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
dda0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ddb0: 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c  3_bind_int(handl
ddc0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 32  e, index, value2
ddd0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
dde0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
ddf0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
de00: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
de10: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
de20: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
de30: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
de40: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
de50: 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74  _Text(SQLiteStat
de60: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
de70: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
de80: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
de90: 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ex, string value
dea0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
deb0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
dec0: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
ded0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
dee0: 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  mt;....        i
def0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
df00: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
df10: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
df20: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
df30: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
df40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
df50: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
df60: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
df70: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
df80: 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d  ..        byte[]
df90: 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75   b = ToUTF8(valu
dfa0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  e);....        i
dfb0: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
dfc0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
dfd0: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
dfe0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
dff0: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
e000: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e010: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
e020: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d  dle, index, b);.
e030: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
e040: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
e050: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
e060: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e070: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
e080: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
e090: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
e0a0: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
e0b0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
e0c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e0d0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
e0e0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
e0f0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
e100: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
e110: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
e120: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74  de void Bind_Dat
e130: 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
e140: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
e150: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e160: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
e170: 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29  ex, DateTime dt)
e180: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
e190: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
e1a0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
e1b0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
e1c0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  t;....        if
e1d0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
e1e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e1f0: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
e200: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
e210: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
e220: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e230: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
e240: 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74 29 3b 0d  le, index, dt);.
e250: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
e260: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
e270: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
e280: 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 44 61 74  ionFlags.BindDat
e290: 65 54 69 6d 65 57 69 74 68 4b 69 6e 64 29 20 3d  eTimeWithKind) =
e2a0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
e2b0: 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 44 61 74 65  onFlags.BindDate
e2c0: 54 69 6d 65 57 69 74 68 4b 69 6e 64 29 0d 0a 20  TimeWithKind).. 
e2d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e2e0: 20 20 20 20 20 20 69 66 20 28 28 5f 64 61 74 65        if ((_date
e2f0: 74 69 6d 65 4b 69 6e 64 20 21 3d 20 44 61 74 65  timeKind != Date
e300: 54 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69  TimeKind.Unspeci
e310: 66 69 65 64 29 20 26 26 0d 0a 20 20 20 20 20 20  fied) &&..      
e320: 20 20 20 20 20 20 20 20 20 20 28 64 74 2e 4b 69            (dt.Ki
e330: 6e 64 20 21 3d 20 44 61 74 65 54 69 6d 65 4b 69  nd != DateTimeKi
e340: 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64 29 20  nd.Unspecified) 
e350: 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
e360: 20 20 20 20 28 64 74 2e 4b 69 6e 64 20 21 3d 20      (dt.Kind != 
e370: 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 29 0d  _datetimeKind)).
e380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
e390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3a0: 69 66 20 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e  if (_datetimeKin
e3b0: 64 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e  d == DateTimeKin
e3c0: 64 2e 55 74 63 29 0d 0a 20 20 20 20 20 20 20 20  d.Utc)..        
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 64 74 20 3d              dt =
e3e0: 20 64 74 2e 54 6f 55 6e 69 76 65 72 73 61 6c 54   dt.ToUniversalT
e3f0: 69 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ime();..        
e400: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
e410: 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d  (_datetimeKind =
e420: 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 4c  = DateTimeKind.L
e430: 6f 63 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  ocal)..         
e440: 20 20 20 20 20 20 20 20 20 20 20 64 74 20 3d 20             dt = 
e450: 64 74 2e 54 6f 4c 6f 63 61 6c 54 69 6d 65 28 29  dt.ToLocalTime()
e460: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
e470: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
e480: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 5f         switch (_
e490: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d  datetimeFormat).
e4a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e4b0: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
e4c0: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54  iteDateFormats.T
e4d0: 69 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20 20  icks:..         
e4e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
e500: 6e 67 20 76 61 6c 75 65 20 3d 20 64 74 2e 54 69  ng value = dt.Ti
e510: 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  cks;....        
e520: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e530: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
e540: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
e550: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
e560: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e570: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
e590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e5a0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
e5b0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
e5c0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
e5e0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
e5f0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
e600: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K..             
e610: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
e620: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
e630: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
e640: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
e650: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
e660: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
e670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e680: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
e690: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
e6a0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
e6b0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
e6c0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
e6e0: 65 61 6b 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  eak;..#elif !SQL
e6f0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e710: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
e720: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
e730: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
e740: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74  3_bind_int64_int
e750: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
e760: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
e770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e780: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
e790: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
e7a0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
e7b0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
e7c0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
e7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e7e0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c       break;..#el
e7f0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
e800: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
e810: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
e820: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
e830: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
e840: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e850: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
e860: 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69  DateFormats.Juli
e870: 61 6e 44 61 79 3a 0d 0a 20 20 20 20 20 20 20 20  anDay:..        
e880: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
e8a0: 6f 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f  ouble value = To
e8b0: 4a 75 6c 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a  JulianDay(dt);..
e8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e8d0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
e8e0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
e8f0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
e900: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
e910: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
e920: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
e930: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e950: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
e960: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
e970: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
e980: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66          }....#if
e990: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
e9a0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
e9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e9d0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
e9e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
e9f0: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e  _bind_double(han
ea00: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
ea10: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
ea20: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
ea30: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
ea40: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
ea50: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
ea60: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
ea70: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
ea80: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
ea90: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
eaa0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
eac0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
ead0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
eae0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
eaf0: 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  d_double_interop
eb00: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
eb10: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ref value);..   
eb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb30: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
eb40: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
eb50: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
eb60: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
eb70: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb90: 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a   break;..#else..
eba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebb0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
ebc0: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
ebd0: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
ebe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ebf0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
ec00: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
ec10: 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63  Formats.UnixEpoc
ec20: 68 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h:..            
ec30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ec40: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
ec50: 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e  value = Convert.
ec60: 54 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72  ToInt64(dt.Subtr
ec70: 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54  act(UnixEpoch).T
ec80: 6f 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d  otalSeconds);...
ec90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eca0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
ecb0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
ecc0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
ecd0: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
ece0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
ecf0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
ed00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed20: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
ed30: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
ed40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
ed50: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20         }....#if 
ed60: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
ed70: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed90: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
eda0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
edb0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
edc0: 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c  bind_int64(handl
edd0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
ede0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
edf0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
ee00: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
ee10: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
ee20: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
ee30: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
ee40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
ee50: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23         break;..#
ee60: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
ee70: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
ee80: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
ee90: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
eea0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
eeb0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
eec0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61  int64_interop(ha
eed0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
eee0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
eef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ef00: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
ef10: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
ef20: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
ef30: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
ef40: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
ef60: 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  eak;..#else..   
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef80: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
ef90: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
efa0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
efc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65  ..            de
efd0: 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
efe0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
eff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f000: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
f010: 28 64 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  (dt);....       
f020: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f030: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
f040: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
f050: 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69  LogBind) == SQLi
f060: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
f070: 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20  s.LogBind)..    
f080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f090: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
f0a0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
f0b0: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
f0c0: 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , b);..         
f0d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
f0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0f0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
f100: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
f110: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f120: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61  te3_bind_text(ha
f130: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20  ndle, index, b, 
f140: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
f150: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
f160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f170: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
f180: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
f190: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
f1a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
f1b0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1d0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
f1e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f1f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
f200: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
f210: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
f220: 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74 61 74  _Blob(SQLiteStat
f230: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
f240: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
f250: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
f260: 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c 6f 62 44  ex, byte[] blobD
f270: 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ata)..    {..   
f280: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
f290: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
f2a0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
f2b0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
f2c0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
f2d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
f2e0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
f2f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
f300: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
f310: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
f320: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
f330: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
f340: 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20 20 20  lobData);..     
f350: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f360: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
f370: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
f380: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
f390: 62 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65  bind_blob(handle
f3a0: 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74  , index, blobDat
f3b0: 61 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67  a, blobData.Leng
f3c0: 74 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29  th, (IntPtr)(-1)
f3d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
f3e0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
f3f0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
f400: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
f410: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
f420: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
f430: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
f440: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
f450: 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74  _Null(SQLiteStat
f460: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
f470: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
f480: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
f490: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
f4a0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
f4b0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
f4c0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
f4d0: 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  stmt;....       
f4e0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
f4f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
f500: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
f510: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f520: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
f530: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f540: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
f550: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a  andle, index);..
f560: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
f570: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
f580: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
f590: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
f5a0: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68  ite3_bind_null(h
f5b0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a  andle, index);..
f5c0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
f5d0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f5e0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
f5f0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
f600: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
f610: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
f620: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
f630: 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61  de int Bind_Para
f640: 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61  mCount(SQLiteSta
f650: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
f660: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
f670: 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b  gs flags)..    {
f680: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
f690: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
f6a0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
f6b0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
f6c0: 20 20 20 20 20 69 6e 74 20 76 61 6c 75 65 20 3d       int value =
f6d0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f6e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
f6f0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e  d_parameter_coun
f700: 74 28 68 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20  t(handle);....  
f710: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
f720: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
f730: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
f740: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
f750: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
f760: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
f770: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
f780: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
f790: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
f7a0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
f7b0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65  og.LogMessage(He
f7c0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
f7d0: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
f7e0: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
f7f0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
f800: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
f810: 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65          "Stateme
f820: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
f830: 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d  count is {1}.",.
f840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f850: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76   handleIntPtr, v
f860: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 20 20 20  alue));..       
f870: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
f880: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
f890: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
f8a0: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
f8b0: 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d  ng Bind_ParamNam
f8c0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
f8d0: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
f8e0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
f8f0: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  ags, int index).
f900: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
f910: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
f920: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
f930: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
f940: 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ;..        strin
f950: 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21  g name;....#if !
f960: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
f970: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  .        int len
f980: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 6e   = 0;..        n
f990: 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
f9a0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
f9b0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
f9c0: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
f9d0: 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  me_interop(handl
f9e0: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  e, index, ref le
f9f0: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
fa00: 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d  ..        name =
fa10: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
fa20: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
fa30: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  s.sqlite3_bind_p
fa40: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61  arameter_name(ha
fa50: 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31  ndle, index), -1
fa60: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
fa70: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
fa80: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
fa90: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
faa0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
fab0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
fac0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
fad0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
fae0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
faf0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
fb00: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
fb10: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65  og.LogMessage(He
fb20: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
fb30: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
fb40: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
fb50: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
fb60: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
fb70: 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65          "Stateme
fb80: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
fb90: 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b 7b 7b  #{1} name is {{{
fba0: 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20  2}}}.",..       
fbb0: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
fbc0: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 6e 61  ntPtr, index, na
fbd0: 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  me));..        }
fbe0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
fbf0: 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d  rn name;..    }.
fc00: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
fc10: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e  override int Bin
fc20: 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53 51 4c  d_ParamIndex(SQL
fc30: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
fc40: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
fc50: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
fc60: 73 74 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65  string paramName
fc70: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
fc80: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
fc90: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
fca0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
fcb0: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  mt;..        int
fcc0: 20 69 6e 64 65 78 20 3d 20 55 6e 73 61 66 65 4e   index = UnsafeN
fcd0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fce0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
fcf0: 74 65 72 5f 69 6e 64 65 78 28 68 61 6e 64 6c 65  ter_index(handle
fd00: 2c 20 54 6f 55 54 46 38 28 70 61 72 61 6d 4e 61  , ToUTF8(paramNa
fd10: 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me));....       
fd20: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
fd30: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
fd40: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
fd50: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
fd60: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
fd70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
fd80: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
fd90: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
fda0: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
fdb0: 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
fdc0: 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d  gMessage(HelperM
fdd0: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
fde0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
fdf0: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
fe00: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
fe10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fe20: 20 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30     "Statement {0
fe30: 7d 20 70 61 72 61 6d 74 65 72 20 69 6e 64 65 78  } paramter index
fe40: 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d   of name {{{1}}}
fe50: 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20   is #{2}.",..   
fe60: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
fe70: 64 6c 65 49 6e 74 50 74 72 2c 20 70 61 72 61 6d  dleIntPtr, param
fe80: 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  Name, index));..
fe90: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
fea0: 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e 64 65       return inde
feb0: 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  x;..    }....   
fec0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
fed0: 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75  de int ColumnCou
fee0: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
fef0: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
ff00: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
ff10: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
ff20: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
ff30: 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f 73 71 6c  _count(stmt._sql
ff40: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20  ite_stmt);..    
ff50: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ff60: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
ff70: 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c  g ColumnName(SQL
ff80: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
ff90: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
ffa0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
ffb0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
ffc0: 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
ffd0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
ffe0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
fff0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
10000 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  umn_name_interop
10010 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
10020 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c  mt, index, ref l
10030 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
10040 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
10050 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10060 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
10070 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
10080 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
10090 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
100a0 69 66 20 28 70 20 3d 3d 20 49 6e 74 50 74 72 2e  if (p == IntPtr.
100b0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 74  Zero)..        t
100c0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
100d0 78 63 65 70 74 69 6f 6e 28 53 51 4c 69 74 65 45  xception(SQLiteE
100e0 72 72 6f 72 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 20  rrorCode.NoMem, 
100f0 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
10100 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
10110 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65  ANDARD..      re
10120 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
10130 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  g(p, len);..#els
10140 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
10150 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20  UTF8ToString(p, 
10160 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
10170 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
10180 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70  nal override Typ
10190 65 41 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e  eAffinity Column
101a0 41 66 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53  Affinity(SQLiteS
101b0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
101c0 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
101d0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
101e0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
101f0 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
10200 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c  n_type(stmt._sql
10210 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
10220 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
10230 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10240 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54  e string ColumnT
10250 79 70 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ype(SQLiteStatem
10260 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
10270 64 65 78 2c 20 72 65 66 20 54 79 70 65 41 66 66  dex, ref TypeAff
10280 69 6e 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29  inity nAffinity)
10290 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
102a0 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69 66 20 21   int len;..#if !
102b0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
102c0 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 30  .        len = 0
102d0 3b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ;..        IntPt
102e0 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
102f0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10300 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
10310 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
10320 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
10330 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23  ex, ref len);..#
10340 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6c 65  else..        le
10350 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 20  n = -1;..       
10360 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61   IntPtr p = Unsa
10370 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10380 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
10390 65 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73 71  ecltype(stmt._sq
103a0 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
103b0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
103c0 20 20 20 20 6e 41 66 66 69 6e 69 74 79 20 3d 20      nAffinity = 
103d0 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
103e0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a  tmt, index);....
103f0 20 20 20 20 20 20 20 20 69 66 20 28 28 70 20 21          if ((p !
10400 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 26  = IntPtr.Zero) &
10410 26 20 28 28 6c 65 6e 20 3e 20 30 29 20 7c 7c 20  & ((len > 0) || 
10420 28 6c 65 6e 20 3d 3d 20 2d 31 29 29 29 0d 0a 20  (len == -1))).. 
10430 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10440 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 63        string dec
10450 6c 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74  lType = UTF8ToSt
10460 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 0d  ring(p, len);...
10470 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
10480 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
10490 72 45 6d 70 74 79 28 64 65 63 6c 54 79 70 65 29  rEmpty(declType)
104a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
104b0 20 20 20 72 65 74 75 72 6e 20 64 65 63 6c 54 79     return declTy
104c0 70 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  pe;..        }..
104d0 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
104e0 5b 5d 20 61 72 20 3d 20 73 74 6d 74 2e 54 79 70  [] ar = stmt.Typ
104f0 65 44 65 66 69 6e 69 74 69 6f 6e 73 3b 0d 0a 0d  eDefinitions;...
10500 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72 20  .        if (ar 
10510 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
10520 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10530 20 69 66 20 28 69 6e 64 65 78 20 3c 20 61 72 2e   if (index < ar.
10540 4c 65 6e 67 74 68 20 26 26 20 61 72 5b 69 6e 64  Length && ar[ind
10550 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ex] != null)..  
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10570 74 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d 3b 0d  turn ar[index];.
10580 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
10590 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
105a0 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20  ing.Empty;..    
105b0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
105c0 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
105d0 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74  olumnIndex(SQLit
105e0 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
105f0 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61   string columnNa
10600 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
10610 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c 75 6d 6e    int x = Column
10620 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a  Count(stmt);....
10630 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
10640 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b   = 0; n < x; n++
10650 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
10660 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43      if (String.C
10670 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d  ompare(columnNam
10680 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74  e, ColumnName(st
10690 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e 67 43 6f  mt, n), StringCo
106a0 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
106b0 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
106c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  )..          ret
106d0 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d  urn n;..      }.
106e0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31  .      return -1
106f0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
10700 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
10710 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f  e string ColumnO
10720 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c 69  riginalName(SQLi
10730 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
10740 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
10750 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
10760 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
10770 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
10780 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
10790 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
107a0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
107b0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
107c0 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  in_name_interop(
107d0 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
107e0 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  t, index, ref le
107f0 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
10800 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
10810 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
10820 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10830 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
10840 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  rigin_name(stmt.
10850 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
10860 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  dex), -1);..#end
10870 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
10880 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
10890 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
108a0 44 61 74 61 62 61 73 65 4e 61 6d 65 28 53 51 4c  DatabaseName(SQL
108b0 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
108c0 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
108d0 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
108e0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
108f0 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
10900 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
10910 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
10920 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10930 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
10940 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72  abase_name_inter
10950 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
10960 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
10970 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
10980 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
10990 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
109a0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
109b0 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
109c0 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28  n_database_name(
109d0 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
109e0 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  t, index), -1);.
109f0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
10a00 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10a10 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
10a20 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 53  olumnTableName(S
10a30 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
10a40 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
10a50 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
10a60 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
10a70 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
10a80 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
10a90 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
10aa0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10ab0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
10ac0 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  able_name_intero
10ad0 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
10ae0 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
10af0 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
10b00 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
10b10 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
10b20 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10b30 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
10b40 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74  _table_name(stmt
10b50 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
10b60 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
10b70 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
10b80 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
10b90 69 64 65 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d  ide void ColumnM
10ba0 65 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64  etaData(string d
10bb0 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20  ataBase, string 
10bc0 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f  table, string co
10bd0 6c 75 6d 6e 2c 20 72 65 66 20 73 74 72 69 6e 67  lumn, ref string
10be0 20 64 61 74 61 54 79 70 65 2c 20 72 65 66 20 73   dataType, ref s
10bf0 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71  tring collateSeq
10c00 75 65 6e 63 65 2c 20 72 65 66 20 62 6f 6f 6c 20  uence, ref bool 
10c10 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62 6f 6f  notNull, ref boo
10c20 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 72 65  l primaryKey, re
10c30 66 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65  f bool autoIncre
10c40 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ment)..    {..  
10c50 20 20 20 20 49 6e 74 50 74 72 20 64 61 74 61 54      IntPtr dataT
10c60 79 70 65 50 74 72 20 3d 20 49 6e 74 50 74 72 2e  ypePtr = IntPtr.
10c70 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74  Zero;..      Int
10c80 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 20 3d  Ptr collSeqPtr =
10c90 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
10ca0 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c       int nnotNul
10cb0 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e  l = 0;..      in
10cc0 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 20  t nprimaryKey = 
10cd0 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61  0;..      int na
10ce0 75 74 6f 49 6e 63 20 3d 20 30 3b 0d 0a 20 20 20  utoInc = 0;..   
10cf0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
10d00 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  de n;..      int
10d10 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69   dtLen;..      i
10d20 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66  nt csLen;....#if
10d30 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
10d40 44 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d  D..      dtLen =
10d50 20 30 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e   0;..      csLen
10d60 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6e 20 3d   = 0;..      n =
10d70 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10d80 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
10d90 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
10da0 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c  ta_interop(_sql,
10db0 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65   ToUTF8(dataBase
10dc0 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29  ), ToUTF8(table)
10dd0 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
10de0 2c 20 72 65 66 20 64 61 74 61 54 79 70 65 50 74  , ref dataTypePt
10df0 72 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74  r, ref collSeqPt
10e00 72 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c  r, ref nnotNull,
10e10 20 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79   ref nprimaryKey
10e20 2c 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 2c 20  , ref nautoInc, 
10e30 72 65 66 20 64 74 4c 65 6e 2c 20 72 65 66 20 63  ref dtLen, ref c
10e40 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  sLen);..#else.. 
10e50 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b       dtLen = -1;
10e60 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20  ..      csLen = 
10e70 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d  -1;....      n =
10e80 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10e90 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62  hods.sqlite3_tab
10ea0 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
10eb0 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  ta(_sql, ToUTF8(
10ec0 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46  dataBase), ToUTF
10ed0 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38  8(table), ToUTF8
10ee0 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61  (column), ref da
10ef0 74 61 54 79 70 65 50 74 72 2c 20 72 65 66 20 63  taTypePtr, ref c
10f00 6f 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e  ollSeqPtr, ref n
10f10 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72  notNull, ref npr
10f20 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61  imaryKey, ref na
10f30 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66  utoInc);..#endif
10f40 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
10f50 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
10f60 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
10f70 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
10f80 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
10f90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74 61  );....      data
10fa0 54 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72  Type = UTF8ToStr
10fb0 69 6e 67 28 64 61 74 61 54 79 70 65 50 74 72 2c  ing(dataTypePtr,
10fc0 20 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20 20   dtLen);..      
10fd0 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 20  collateSequence 
10fe0 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63  = UTF8ToString(c
10ff0 6f 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c 65 6e  ollSeqPtr, csLen
11000 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74 4e  );....      notN
11010 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20  ull = (nnotNull 
11020 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 70 72  == 1);..      pr
11030 69 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70 72 69  imaryKey = (npri
11040 6d 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a  maryKey == 1);..
11050 20 20 20 20 20 20 61 75 74 6f 49 6e 63 72 65 6d        autoIncrem
11060 65 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63 20  ent = (nautoInc 
11070 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  == 1);..    }...
11080 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11090 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65  erride object Ge
110a0 74 4f 62 6a 65 63 74 28 53 51 4c 69 74 65 53 74  tObject(SQLiteSt
110b0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
110c0 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
110d0 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
110e0 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  (ColumnAffinity(
110f0 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 0d 0a 20  stmt, index)).. 
11100 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11110 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
11120 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a  ffinity.Int64:..
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11150 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
11160 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
11170 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
11180 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11190 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
111a0 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
111b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
111d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
111e0 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e  tDouble(stmt, in
111f0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
11200 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11210 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
11220 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d 0a 20  ffinity.Text:.. 
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11250 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
11260 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
11270 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
11280 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11290 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
112a0 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20  nity.Blob:..    
112b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112d0 20 20 20 6c 6f 6e 67 20 73 69 7a 65 20 3d 20 47     long size = G
112e0 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e  etBytes(stmt, in
112f0 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c  dex, 0, null, 0,
11300 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   0);....        
11310 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11320 28 73 69 7a 65 20 3e 20 30 29 20 26 26 20 28 73  (size > 0) && (s
11330 69 7a 65 20 3c 3d 20 69 6e 74 2e 4d 61 78 56 61  ize <= int.MaxVa
11340 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lue))..         
11350 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11370 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74        byte[] byt
11380 65 73 20 3d 20 6e 65 77 20 62 79 74 65 5b 28 69  es = new byte[(i
11390 6e 74 29 73 69 7a 65 5d 3b 0d 0a 0d 0a 20 20 20  nt)size];....   
113a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113b0 20 20 20 20 20 47 65 74 42 79 74 65 73 28 73 74       GetBytes(st
113c0 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 79  mt, index, 0, by
113d0 74 65 73 2c 20 30 2c 20 28 69 6e 74 29 73 69 7a  tes, 0, (int)siz
113e0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
113f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11400 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 20 20  eturn bytes;..  
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11420 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
11430 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
11440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11450 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11460 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
11470 79 2e 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20  y.Null:..       
11480 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114a0 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61  return DBNull.Va
114b0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
114c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
114d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 68   }....        th
114e0 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
114f0 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
11500 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
11510 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11520 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75  de double GetDou
11530 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
11540 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
11550 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
11560 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
11570 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
11580 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
11590 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
115a0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
115b0 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ble(stmt._sqlite
115c0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
115d0 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
115e0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 64 6f  ANDARD..      do
115f0 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 30 2e 30  uble value = 0.0
11600 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  ;..      UnsafeN
11610 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11620 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
11630 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  le_interop(stmt.
11640 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
11650 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
11660 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
11670 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  alue;..#else..  
11680 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
11690 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
116a0 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
116b0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
116c0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
116d0 20 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61 6e   bool GetBoolean
116e0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
116f0 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
11700 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11710 72 65 74 75 72 6e 20 54 6f 42 6f 6f 6c 65 61 6e  return ToBoolean
11720 28 47 65 74 4f 62 6a 65 63 74 28 73 74 6d 74 2c  (GetObject(stmt,
11730 20 69 6e 64 65 78 29 2c 20 43 75 6c 74 75 72 65   index), Culture
11740 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
11750 6c 74 75 72 65 2c 20 66 61 6c 73 65 29 3b 0d 0a  lture, false);..
11760 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11770 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
11780 62 79 74 65 20 47 65 74 53 42 79 74 65 28 53 51  byte GetSByte(SQ
11790 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
117a0 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
117b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
117c0 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 73  urn unchecked((s
117d0 62 79 74 65 29 28 47 65 74 49 6e 74 33 32 28 73  byte)(GetInt32(s
117e0 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 62 79  tmt, index) & by
117f0 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a  te.MaxValue));..
11800 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11810 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
11820 79 74 65 20 47 65 74 42 79 74 65 28 53 51 4c 69  yte GetByte(SQLi
11830 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
11840 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
11850 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
11860 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 62 79 74  n unchecked((byt
11870 65 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  e)(GetInt32(stmt
11880 2c 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e  , index) & byte.
11890 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20  MaxValue));..   
118a0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
118b0 61 6c 20 6f 76 65 72 72 69 64 65 20 73 68 6f 72  al override shor
118c0 74 20 47 65 74 49 6e 74 31 36 28 53 51 4c 69 74  t GetInt16(SQLit
118d0 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
118e0 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
118f0 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
11900 20 75 6e 63 68 65 63 6b 65 64 28 28 73 68 6f 72   unchecked((shor
11910 74 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  t)(GetInt32(stmt
11920 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f 72  , index) & ushor
11930 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20  t.MaxValue));.. 
11940 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
11950 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 73  rnal override us
11960 68 6f 72 74 20 47 65 74 55 49 6e 74 31 36 28 53  hort GetUInt16(S
11970 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
11980 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
11990 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
119a0 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
119b0 75 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32  ushort)(GetInt32
119c0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
119d0 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29  ushort.MaxValue)
119e0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
119f0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11a00 64 65 20 69 6e 74 20 47 65 74 49 6e 74 33 32 28  de int GetInt32(
11a10 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
11a20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
11a30 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
11a40 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
11a50 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
11a60 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d  3_column_int(stm
11a70 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
11a80 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a  index);..    }..
11a90 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11aa0 76 65 72 72 69 64 65 20 75 69 6e 74 20 47 65 74  verride uint Get
11ab0 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  UInt32(SQLiteSta
11ac0 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
11ad0 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
11ae0 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
11af0 68 65 63 6b 65 64 28 28 75 69 6e 74 29 47 65 74  hecked((uint)Get
11b00 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
11b10 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  x));..    }.... 
11b20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
11b30 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74  ride long GetInt
11b40 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
11b50 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
11b60 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
11b70 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
11b80 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
11b90 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
11ba0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11bb0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
11bc0 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  4(stmt._sqlite_s
11bd0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
11be0 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
11bf0 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67  DARD..      long
11c00 20 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20   value = 0;..   
11c10 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
11c20 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
11c30 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65  olumn_int64_inte
11c40 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
11c50 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65  _stmt, index, re
11c60 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
11c70 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
11c80 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
11c90 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
11ca0 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
11cb0 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
11cc0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
11cd0 20 6f 76 65 72 72 69 64 65 20 75 6c 6f 6e 67 20   override ulong 
11ce0 47 65 74 55 49 6e 74 36 34 28 53 51 4c 69 74 65  GetUInt64(SQLite
11cf0 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
11d00 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
11d10 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
11d20 75 6e 63 68 65 63 6b 65 64 28 28 75 6c 6f 6e 67  unchecked((ulong
11d30 29 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20  )GetInt64(stmt, 
11d40 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d  index));..    }.
11d50 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11d60 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
11d70 47 65 74 54 65 78 74 28 53 51 4c 69 74 65 53 74  GetText(SQLiteSt
11d80 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
11d90 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
11da0 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
11db0 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
11dc0 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
11dd0 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
11de0 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
11df0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11e00 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74  _column_text_int
11e10 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
11e20 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
11e30 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
11e40 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
11e50 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
11e60 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
11e70 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
11e80 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73  umn_text(stmt._s
11e90 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
11ea0 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  x),..        Uns
11eb0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11ec0 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
11ed0 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69  bytes(stmt._sqli
11ee0 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  te_stmt, index))
11ef0 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
11f00 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
11f10 20 6f 76 65 72 72 69 64 65 20 44 61 74 65 54 69   override DateTi
11f20 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 53  me GetDateTime(S
11f30 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
11f40 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
11f50 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
11f60 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61   (_datetimeForma
11f70 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46  t == SQLiteDateF
11f80 6f 72 6d 61 74 73 2e 54 69 63 6b 73 29 0d 0a 20  ormats.Ticks).. 
11f90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 69         return Ti
11fa0 63 6b 73 54 6f 44 61 74 65 54 69 6d 65 28 47 65  cksToDateTime(Ge
11fb0 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
11fc0 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69  ex), _datetimeKi
11fd0 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  nd);..      else
11fe0 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f   if (_datetimeFo
11ff0 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61  rmat == SQLiteDa
12000 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e  teFormats.Julian
12010 44 61 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65  Day)..        re
12020 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
12030 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20  GetDouble(stmt, 
12040 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d  index), _datetim
12050 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65  eKind);..      e
12060 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d  lse if (_datetim
12070 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74  eFormat == SQLit
12080 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69  eDateFormats.Uni
12090 78 45 70 6f 63 68 29 0d 0a 20 20 20 20 20 20 20  xEpoch)..       
120a0 20 72 65 74 75 72 6e 20 55 6e 69 78 45 70 6f 63   return UnixEpoc
120b0 68 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49  hToDateTime(GetI
120c0 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
120d0 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  ), _datetimeKind
120e0 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  );....#if !SQLIT
120f0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
12100 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
12110 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
12120 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61  ateTime(UnsafeNa
12130 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12140 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f  te3_column_text_
12150 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
12160 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
12170 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29  , ref len), len)
12180 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
12190 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
121a0 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
121b0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
121c0 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f  lumn_text(stmt._
121d0 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
121e0 65 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e  ex),..        Un
121f0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12200 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
12210 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c  _bytes(stmt._sql
12220 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
12230 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
12240 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12250 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
12260 47 65 74 42 79 74 65 73 28 53 51 4c 69 74 65 53  GetBytes(SQLiteS
12270 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
12280 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44  nt index, int nD
12290 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b  ataOffset, byte[
122a0 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74  ] bDest, int nSt
122b0 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68  art, int nLength
122c0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
122d0 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66  int nlen = Unsaf
122e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
122f0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
12300 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tes(stmt._sqlite
12310 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
12320 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f  ..      // If no
12330 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66   destination buf
12340 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20  fer, return the 
12350 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20  size needed...  
12360 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
12370 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
12380 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74  en;....      int
12390 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
123a0 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
123b0 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
123c0 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
123d0 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
123e0 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
123f0 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
12400 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
12410 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
12420 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
12430 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
12440 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
12450 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   0)..      {..  
12460 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
12470 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
12480 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
12490 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e  olumn_blob(stmt.
124a0 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
124b0 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex);....       
124c0 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49   Marshal.Copy((I
124d0 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74  ntPtr)(ptr.ToInt
124e0 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73  64() + nDataOffs
124f0 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61  et), bDest, nSta
12500 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20  rt, nCopied);.. 
12510 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
12520 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  se..      {..   
12530 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30       nCopied = 0
12540 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
12550 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69      return nCopi
12560 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ed;..    }....  
12570 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12580 69 64 65 20 63 68 61 72 20 47 65 74 43 68 61 72  ide char GetChar
12590 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
125a0 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
125b0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
125c0 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
125d0 6f 43 68 61 72 28 47 65 74 55 49 6e 74 31 36 28  oChar(GetUInt16(
125e0 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
125f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
12600 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
12610 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53 51 4c  ong GetChars(SQL
12620 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
12630 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  t, int index, in
12640 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63  t nDataOffset, c
12650 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  har[] bDest, int
12660 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
12670 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
12680 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20      int nlen;.. 
12690 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64       int nCopied
126a0 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20   = nLength;.... 
126b0 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20       string str 
126c0 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  = GetText(stmt, 
126d0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e  index);..      n
126e0 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68  len = str.Length
126f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ;....      if (b
12700 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
12710 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
12720 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
12730 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
12740 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
12750 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
12760 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
12770 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
12780 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
12790 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
127a0 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
127b0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
127c0 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
127d0 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e      str.CopyTo(n
127e0 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73  DataOffset, bDes
127f0 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
12800 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  ed);..      else
12810 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d   nCopied = 0;...
12820 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
12830 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
12840 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
12850 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75  erride bool IsNu
12860 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
12870 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
12880 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
12890 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e    return (Column
128a0 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69  Affinity(stmt, i
128b0 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66  ndex) == TypeAff
128c0 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20  inity.Null);..  
128d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
128e0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
128f0 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28   AggregateCount(
12900 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
12910 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
12920 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
12930 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12940 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74  _aggregate_count
12950 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20  (context);..    
12960 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12970 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
12980 65 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74  eErrorCode Creat
12990 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67  eFunction(string
129a0 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e   strFunction, in
129b0 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65  t nArgs, bool ne
129c0 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74  edCollSeq, SQLit
129d0 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20  eCallback func, 
129e0 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
129f0 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46  uncstep, SQLiteF
12a00 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e  inalCallback fun
12a10 63 66 69 6e 61 6c 2c 20 62 6f 6f 6c 20 63 61 6e  cfinal, bool can
12a20 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a 20  Throw)..    {.. 
12a30 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
12a40 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21  Code n;....#if !
12a50 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
12a60 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
12a70 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12a80 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
12a90 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f  nction_interop(_
12aa0 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
12ab0 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
12ac0 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   4, IntPtr.Zero,
12ad0 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
12ae0 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65   funcfinal, (nee
12af0 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65  dCollSeq == true
12b00 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20  ) ? 1 : 0);..   
12b10 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
12b20 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
12b30 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
12b40 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12b50 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
12b60 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f  interop(_sql, To
12b70 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e  UTF8(strFunction
12b80 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74  ), nArgs, 1, Int
12b90 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20  Ptr.Zero, func, 
12ba0 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69  funcstep, funcfi
12bb0 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65  nal, (needCollSe
12bc0 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a  q == true) ? 1 :
12bd0 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20   0);..#else..   
12be0 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
12bf0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
12c00 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
12c10 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
12c20 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
12c30 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 4, IntPtr.Z
12c40 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
12c50 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b  tep, funcfinal);
12c60 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
12c70 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12c80 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e  .Ok) n = UnsafeN
12c90 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12ca0 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
12cb0 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
12cc0 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
12cd0 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72  nArgs, 1, IntPtr
12ce0 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
12cf0 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
12d00 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
12d10 20 20 69 66 20 28 63 61 6e 54 68 72 6f 77 20 26    if (canThrow &
12d20 26 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  & (n != SQLiteEr
12d30 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72  rorCode.Ok)) thr
12d40 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
12d50 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
12d60 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
12d70 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20    return n;..   
12d80 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
12d90 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
12da0 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61  teErrorCode Crea
12db0 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69  teCollation(stri
12dc0 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c  ng strCollation,
12dd0 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e   SQLiteCollation
12de0 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c   func, SQLiteCol
12df0 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 2c 20 62  lation func16, b
12e00 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20  ool canThrow).. 
12e10 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
12e20 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
12e30 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12e40 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
12e50 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71  te_collation(_sq
12e60 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c  l, ToUTF8(strCol
12e70 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50  lation), 2, IntP
12e80 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29  tr.Zero, func16)
12e90 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d  ;..      if (n =
12ea0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
12eb0 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65  e.Ok) n = Unsafe
12ec0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12ed0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
12ee0 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  lation(_sql, ToU
12ef0 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e  TF8(strCollation
12f00 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72  ), 1, IntPtr.Zer
12f10 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20  o, func);..     
12f20 20 69 66 20 28 63 61 6e 54 68 72 6f 77 20 26 26   if (canThrow &&
12f30 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
12f40 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72 6f  orCode.Ok)) thro
12f50 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
12f60 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
12f70 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
12f80 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20   return n;..    
12f90 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12fa0 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
12fb0 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d  ontextCollateCom
12fc0 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  pare(CollationEn
12fd0 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20  codingEnum enc, 
12fe0 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
12ff0 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e  string s1, strin
13000 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  g s2)..    {..#i
13010 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
13020 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  RD..      byte[]
13030 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65   b1;..      byte
13040 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79  [] b2;..      Sy
13050 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
13060 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e  ng converter = n
13070 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ull;....      sw
13080 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20  itch (enc)..    
13090 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
130a0 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
130b0 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20  ingEnum.UTF8:.. 
130c0 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
130d0 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
130e0 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d  .Encoding.UTF8;.
130f0 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
13100 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
13110 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
13120 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a  gEnum.UTF16LE:..
13130 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
13140 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
13150 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f  t.Encoding.Unico
13160 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
13170 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
13180 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
13190 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42  odingEnum.UTF16B
131a0 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
131b0 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
131c0 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42  .Text.Encoding.B
131d0 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b  igEndianUnicode;
131e0 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
131f0 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  k;..      }.... 
13200 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72       b1 = conver
13210 74 65 72 2e 47 65 74 42 79 74 65 73 28 73 31 29  ter.GetBytes(s1)
13220 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f  ;..      b2 = co
13230 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
13240 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  (s2);....      r
13250 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
13260 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13270 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f  3_context_collco
13280 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f  mpare_interop(co
13290 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65  ntext, b1, b1.Le
132a0 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e  ngth, b2, b2.Len
132b0 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  gth);..#else..  
132c0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
132d0 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
132e0 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
132f0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
13300 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
13310 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c   int ContextColl
13320 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61  ateCompare(Colla
13330 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
13340 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e   enc, IntPtr con
13350 74 65 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c  text, char[] c1,
13360 20 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20   char[] c2)..   
13370 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
13380 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
13390 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20  byte[] b1;..    
133a0 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20    byte[] b2;..  
133b0 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e      System.Text.
133c0 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74  Encoding convert
133d0 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  er = null;....  
133e0 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29      switch (enc)
133f0 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
13400 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
13410 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
13420 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  F8:..          c
13430 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
13440 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
13450 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  UTF8;..         
13460 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
13470 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
13480 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
13490 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6LE:..          
134a0 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
134b0 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
134c0 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20  .Unicode;..     
134d0 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
134e0 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
134f0 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
13500 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20  UTF16BE:..      
13510 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
13520 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
13530 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e  ding.BigEndianUn
13540 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
13550 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
13560 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20  }....      b1 = 
13570 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
13580 65 73 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62  es(c1);..      b
13590 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  2 = converter.Ge
135a0 74 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20  tBytes(c2);.... 
135b0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
135c0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
135d0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
135e0 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65  collcompare_inte
135f0 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c  rop(context, b1,
13600 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20   b1.Length, b2, 
13610 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c  b2.Length);..#el
13620 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
13630 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
13640 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
13650 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
13660 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
13670 65 72 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e  erride Collation
13680 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c  Sequence GetColl
13690 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51  ationSequence(SQ
136a0 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e  LiteFunction fun
136b0 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
136c0 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  t)..    {..#if !
136d0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
136e0 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e  .      Collation
136f0 53 65 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e  Sequence seq = n
13700 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  ew CollationSequ
13710 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69  ence();..      i
13720 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
13730 20 20 20 69 6e 74 20 74 79 70 65 20 3d 20 30 3b     int type = 0;
13740 0d 0a 20 20 20 20 20 20 69 6e 74 20 65 6e 63 20  ..      int enc 
13750 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50  = 0;..      IntP
13760 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
13770 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13780 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73  e3_context_colls
13790 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  eq_interop(conte
137a0 78 74 2c 20 72 65 66 20 74 79 70 65 2c 20 72 65  xt, ref type, re
137b0 66 20 65 6e 63 2c 20 72 65 66 20 6c 65 6e 29 3b  f enc, ref len);
137c0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20  ....      if (p 
137d0 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d  != null) seq.Nam
137e0 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
137f0 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  (p, len);..     
13800 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c   seq.Type = (Col
13810 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74  lationTypeEnum)t
13820 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e  ype;..      seq.
13830 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20  _func = func;.. 
13840 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e       seq.Encodin
13850 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  g = (CollationEn
13860 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d  codingEnum)enc;.
13870 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
13880 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  seq;..#else..   
13890 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
138a0 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
138b0 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
138c0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
138d0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
138e0 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c  long GetParamVal
138f0 75 65 42 79 74 65 73 28 49 6e 74 50 74 72 20 70  ueBytes(IntPtr p
13900 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65  , int nDataOffse
13910 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c  t, byte[] bDest,
13920 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74   int nStart, int
13930 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b   nLength)..    {
13940 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e  ..      int nlen
13950 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
13960 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
13970 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a  alue_bytes(p);..
13980 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f  ..      // If no
13990 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66   destination buf
139a0 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20  fer, return the 
139b0 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20  size needed...  
139c0 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
139d0 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
139e0 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74  en;....      int
139f0 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
13a00 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
13a10 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
13a20 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
13a30 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
13a40 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
13a50 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
13a60 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
13a70 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
13a80 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
13a90 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
13aa0 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
13ab0 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   0)..      {..  
13ac0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
13ad0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
13ae0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
13af0 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d  alue_blob(p);...
13b00 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c  .        Marshal
13b10 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70  .Copy((IntPtr)(p
13b20 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e  tr.ToInt64() + n
13b30 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65  DataOffset), bDe
13b40 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70  st, nStart, nCop
13b50 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ied);..      }..
13b60 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
13b70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f    {..        nCo
13b80 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  pied = 0;..     
13b90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
13ba0 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20  rn nCopied;..   
13bb0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
13bc0 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62  al override doub
13bd0 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  le GetParamValue
13be0 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74  Double(IntPtr pt
13bf0 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  r)..    {..#if !
13c00 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
13c10 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
13c20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
13c30 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13c40 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
13c50 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53  (ptr);..#elif !S
13c60 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
13c70 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c        double val
13c80 75 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20  ue = 0.0;..     
13c90 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13ca0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
13cb0 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  ue_double_intero
13cc0 70 28 70 74 72 2c 20 72 65 66 20 76 61 6c 75 65  p(ptr, ref value
13cd0 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  );..      return
13ce0 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a   value;..#else..
13cf0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
13d00 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
13d10 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
13d20 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
13d30 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
13d40 64 65 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56  de int GetParamV
13d50 61 6c 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72  alueInt32(IntPtr
13d60 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
13d70 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
13d80 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13d90 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
13da0 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (ptr);..    }...
13db0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
13dc0 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50  erride long GetP
13dd0 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49  aramValueInt64(I
13de0 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
13df0 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
13e00 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
13e10 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  K..      return 
13e20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13e30 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
13e40 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23  e_int64(ptr);..#
13e50 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
13e60 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74  NDARD..      Int
13e70 36 34 20 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20  64 value = 0;.. 
13e80 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
13e90 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13ea0 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74  _value_int64_int
13eb0 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61  erop(ptr, ref va
13ec0 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72 65 74  lue);..      ret
13ed0 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73  urn value;..#els
13ee0 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
13ef0 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
13f00 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
13f10 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
13f20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
13f30 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
13f40 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49  ParamValueText(I
13f50 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
13f60 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
13f70 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
13f80 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
13f90 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
13fa0 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
13fb0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13fc0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e  e3_value_text_in
13fd0 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20 6c  terop(ptr, ref l
13fe0 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
13ff0 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
14000 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
14010 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
14020 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  .sqlite3_value_t
14030 65 78 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20  ext(ptr),..     
14040 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
14050 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
14060 61 6c 75 65 5f 62 79 74 65 73 28 70 74 72 29 29  alue_bytes(ptr))
14070 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
14080 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
14090 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66   override TypeAf
140a0 66 69 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56  finity GetParamV
140b0 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74 72 20  alueType(IntPtr 
140c0 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
140d0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
140e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
140f0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
14100 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (ptr);..    }...
14110 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14120 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
14130 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f  rnBlob(IntPtr co
14140 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61  ntext, byte[] va
14150 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
14160 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
14170 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
14180 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65  esult_blob(conte
14190 78 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65  xt, value, value
141a0 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72  .Length, (IntPtr
141b0 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  )(-1));..    }..
141c0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
141d0 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
141e0 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72  urnDouble(IntPtr
141f0 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65   context, double
14200 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
14210 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
14220 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
14230 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
14240 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
14250 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28  3_result_double(
14260 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  context, value);
14270 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
14280 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
14290 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
142a0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
142b0 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  lt_double_intero
142c0 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76  p(context, ref v
142d0 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
142e0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
142f0 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
14300 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
14310 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
14320 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
14330 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72  e void ReturnErr
14340 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  or(IntPtr contex
14350 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  t, string value)
14360 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
14370 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14380 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
14390 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
143a0 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20   ToUTF8(value), 
143b0 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a  value.Length);..
143c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
143d0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
143e0 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28  oid ReturnInt32(
143f0 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
14400 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  int value)..    
14410 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
14420 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
14430 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
14440 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  context, value);
14450 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
14460 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
14470 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36   void ReturnInt6
14480 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  4(IntPtr context
14490 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20  , long value).. 
144a0 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
144b0 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
144c0 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61  WORK..      Unsa
144d0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
144e0 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
144f0 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61  nt64(context, va
14500 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
14510 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
14520 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
14530 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
14540 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e  _result_int64_in
14550 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72  terop(context, r
14560 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
14570 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
14580 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
14590 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
145a0 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
145b0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
145c0 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
145d0 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e  nNull(IntPtr con
145e0 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
145f0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
14600 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14610 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
14620 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ext);..    }....
14630 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14640 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
14650 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e  nText(IntPtr con
14660 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c  text, string val
14670 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
14680 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
14690 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20  TF8(value);..   
146a0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
146b0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
146c0 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65  esult_text(conte
146d0 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65  xt, ToUTF8(value
146e0 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  ), b.Length - 1,
146f0 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
14700 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e  .    }....#if IN
14710 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
14720 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
14730 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
14740 44 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 66  Determines the f
14750 69 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ile name of the 
14760 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 63  native library c
14770 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6e 61  ontaining the na
14780 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 22 76  tive..    /// "v
14790 74 73 68 69 6d 22 20 65 78 74 65 6e 73 69 6f 6e  tshim" extension
147a0 20 2d 41 4e 44 2d 20 77 68 65 74 68 65 72 20 69   -AND- whether i
147b0 74 20 73 68 6f 75 6c 64 20 62 65 20 64 79 6e 61  t should be dyna
147c0 6d 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20 62  mically loaded b
147d0 79 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69 73 20  y..    /// this 
147e0 63 6c 61 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  class...    /// 
147f0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
14800 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
14810 22 69 73 4c 6f 61 64 4e 65 65 64 65 64 22 3e 0d  "isLoadNeeded">.
14820 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6f 75  .    /// This ou
14830 74 70 75 74 20 70 61 72 61 6d 65 74 65 72 20 77  tput parameter w
14840 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 6e 6f  ill be set to no
14850 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 72 65  n-zero if the re
14860 74 75 72 6e 65 64 20 6e 61 74 69 76 65 0d 0a 20  turned native.. 
14870 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 20 66     /// library f
14880 69 6c 65 20 6e 61 6d 65 20 73 68 6f 75 6c 64 20  ile name should 
14890 62 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 6c  be dynamically l
148a0 6f 61 64 65 64 20 70 72 69 6f 72 20 74 6f 20 61  oaded prior to a
148b0 74 74 65 6d 70 74 69 6e 67 0d 0a 20 20 20 20 2f  ttempting..    /
148c0 2f 2f 20 74 68 65 20 63 72 65 61 74 69 6f 6e 20  // the creation 
148d0 6f 66 20 6e 61 74 69 76 65 20 64 69 73 70 6f 73  of native dispos
148e0 61 62 6c 65 20 65 78 74 65 6e 73 69 6f 6e 20 6d  able extension m
148f0 6f 64 75 6c 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f  odules...    ///
14900 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
14910 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
14920 20 20 2f 2f 2f 20 54 68 65 20 66 69 6c 65 20 6e    /// The file n
14930 61 6d 65 20 6f 66 20 74 68 65 20 6e 61 74 69 76  ame of the nativ
14940 65 20 6c 69 62 72 61 72 79 20 63 6f 6e 74 61 69  e library contai
14950 6e 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20  ning the native 
14960 22 76 74 73 68 69 6d 22 0d 0a 20 20 20 20 2f 2f  "vtshim"..    //
14970 2f 20 65 78 74 65 6e 73 69 6f 6e 20 2d 4f 52 2d  / extension -OR-
14980 20 6e 75 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e   null if it cann
14990 6f 74 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64  ot be determined
149a0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
149b0 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61  urns>..    priva
149c0 74 65 20 73 74 72 69 6e 67 20 47 65 74 53 68 69  te string GetShi
149d0 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61  mExtensionFileNa
149e0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 72 65 66  me(..        ref
149f0 20 62 6f 6f 6c 20 69 73 4c 6f 61 64 4e 65 65 64   bool isLoadNeed
14a00 65 64 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20  ed /* out */..  
14a10 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
14a20 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 68 69          if (_shi
14a30 6d 49 73 4c 6f 61 64 4e 65 65 64 65 64 20 21 3d  mIsLoadNeeded !=
14a40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
14a50 20 20 20 20 69 73 4c 6f 61 64 4e 65 65 64 65 64      isLoadNeeded
14a60 20 3d 20 28 62 6f 6f 6c 29 5f 73 68 69 6d 49 73   = (bool)_shimIs
14a70 4c 6f 61 64 4e 65 65 64 65 64 3b 0d 0a 20 20 20  LoadNeeded;..   
14a80 20 20 20 20 20 65 6c 73 65 0d 0a 23 69 66 20 53       else..#if S
14a90 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 7c  QLITE_STANDARD |
14aa0 7c 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c  | USE_INTEROP_DL
14ab0 4c 20 7c 7c 20 50 4c 41 54 46 4f 52 4d 5f 43 4f  L || PLATFORM_CO
14ac0 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 69 73 4c 6f              isLo
14ae0 61 64 4e 65 65 64 65 64 20 3d 20 48 65 6c 70 65  adNeeded = Helpe
14af0 72 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e 64 6f  rMethods.IsWindo
14b00 77 73 28 29 3b 20 2f 2a 20 43 4f 4d 50 41 54 20  ws(); /* COMPAT 
14b10 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  */..#else..     
14b20 20 20 20 20 20 20 20 69 73 4c 6f 61 64 4e 65 65         isLoadNee
14b30 64 65 64 20 3d 20 66 61 6c 73 65 3b 20 2f 2a 20  ded = false; /* 
14b40 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
14b50 62 6c 79 20 2a 2f 0d 0a 23 65 6e 64 69 66 0d 0a  bly */..#endif..
14b60 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
14b70 20 66 69 6c 65 4e 61 6d 65 20 3d 20 5f 73 68 69   fileName = _shi
14b80 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61  mExtensionFileNa
14b90 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  me;....        i
14ba0 66 20 28 66 69 6c 65 4e 61 6d 65 20 21 3d 20 6e  f (fileName != n
14bb0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
14bc0 20 20 72 65 74 75 72 6e 20 66 69 6c 65 4e 61 6d    return fileNam
14bd0 65 3b 0d 0a 0d 0a 23 69 66 20 28 53 51 4c 49 54  e;....#if (SQLIT
14be0 45 5f 53 54 41 4e 44 41 52 44 20 7c 7c 20 55 53  E_STANDARD || US
14bf0 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 7c 7c  E_INTEROP_DLL ||
14c00 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43   PLATFORM_COMPAC
14c10 54 46 52 41 4d 45 57 4f 52 4b 29 20 26 26 20 50  TFRAMEWORK) && P
14c20 52 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49  RELOAD_NATIVE_LI
14c30 42 52 41 52 59 0d 0a 20 20 20 20 20 20 20 20 72  BRARY..        r
14c40 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
14c50 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 4e 61 74  veMethods.GetNat
14c60 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61  iveLibraryFileNa
14c70 6d 65 4f 6e 6c 79 28 29 3b 20 2f 2a 20 43 4f 4d  meOnly(); /* COM
14c80 50 41 54 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20  PAT */..#else.. 
14c90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
14ca0 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ll;..#endif..   
14cb0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
14cc0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
14cd0 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76   Calls the nativ
14ce0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
14cf0 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  brary in order t
14d00 6f 20 63 72 65 61 74 65 20 61 20 64 69 73 70 6f  o create a dispo
14d10 73 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d  sable..    /// m
14d20 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  odule containing
14d30 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
14d40 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ion of a virtual
14d50 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f   table...    ///
14d60 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
14d70 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
14d80 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20  ="module">..    
14d90 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f  /// The module o
14da0 62 6a 65 63 74 20 74 6f 20 62 65 20 75 73 65 64  bject to be used
14db0 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 74   when creating t
14dc0 68 65 20 6e 61 74 69 76 65 20 64 69 73 70 6f 73  he native dispos
14dd0 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20  able module...  
14de0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
14df0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
14e00 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20  ame="flags">..  
14e10 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20    /// The flags 
14e20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74  for the associat
14e30 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
14e40 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20  LiteConnection" 
14e50 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
14e60 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ce...    /// </p
14e70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
14e80 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
14e90 64 20 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 53  d CreateModule(S
14ea0 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
14eb0 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  le, SQLiteConnec
14ec0 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29  tionFlags flags)
14ed0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
14ee0 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
14ef0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
14f00 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
14f10 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
14f20 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a  n("module");....
14f30 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
14f40 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
14f50 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67  ctionFlags.NoLog
14f60 4d 6f 64 75 6c 65 29 20 21 3d 20 53 51 4c 69 74  Module) != SQLit
14f70 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
14f80 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29 0d 0a 20  .NoLogModule).. 
14f90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14fa0 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67        module.Log
14fb0 45 72 72 6f 72 73 20 3d 20 28 28 66 6c 61 67 73  Errors = ((flags
14fc0 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
14fd0 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75  ionFlags.LogModu
14fe0 6c 65 45 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69  leError) == SQLi
14ff0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
15000 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72  s.LogModuleError
15010 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
15020 6d 6f 64 75 6c 65 2e 4c 6f 67 45 78 63 65 70 74  module.LogExcept
15030 69 6f 6e 73 20 3d 20 28 28 66 6c 61 67 73 20 26  ions = ((flags &
15040 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
15050 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65  nFlags.LogModule
15060 45 78 63 65 70 74 69 6f 6e 29 20 3d 3d 20 53 51  Exception) == SQ
15070 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
15080 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63  ags.LogModuleExc
15090 65 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  eption);..      
150a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
150b0 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29  f (_sql == null)
150c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
150d0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
150e0 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65 63 74  ception("connect
150f0 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
15100 69 64 20 68 61 6e 64 6c 65 22 29 3b 0d 0a 0d 0a  id handle");....
15110 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 69 73 4c          bool isL
15120 6f 61 64 4e 65 65 64 65 64 20 3d 20 66 61 6c 73  oadNeeded = fals
15130 65 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  e;..        stri
15140 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 47 65  ng fileName = Ge
15150 74 53 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46 69  tShimExtensionFi
15160 6c 65 4e 61 6d 65 28 72 65 66 20 69 73 4c 6f 61  leName(ref isLoa
15170 64 4e 65 65 64 65 64 29 3b 0d 0a 0d 0a 20 20 20  dNeeded);....   
15180 20 20 20 20 20 69 66 20 28 69 73 4c 6f 61 64 4e       if (isLoadN
15190 65 65 64 65 64 29 0d 0a 20 20 20 20 20 20 20 20  eeded)..        
151a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
151b0 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e  f (fileName == n
151c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
151d0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
151e0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
151f0 22 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 66  "the file name f
15200 6f 72 20 74 68 65 20 5c 22 76 74 73 68 69 6d 5c  or the \"vtshim\
15210 22 20 65 78 74 65 6e 73 69 6f 6e 20 69 73 20 75  " extension is u
15220 6e 6b 6e 6f 77 6e 22 29 3b 0d 0a 0d 0a 20 20 20  nknown");....   
15230 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 68           if (_sh
15240 69 6d 45 78 74 65 6e 73 69 6f 6e 50 72 6f 63 4e  imExtensionProcN
15250 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
15270 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
15280 63 65 70 74 69 6f 6e 28 22 74 68 65 20 65 6e 74  ception("the ent
15290 72 79 20 70 6f 69 6e 74 20 66 6f 72 20 74 68 65  ry point for the
152a0 20 5c 22 76 74 73 68 69 6d 5c 22 20 65 78 74 65   \"vtshim\" exte
152b0 6e 73 69 6f 6e 20 69 73 20 75 6e 6b 6e 6f 77 6e  nsion is unknown
152c0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
152d0 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65 6e 73     SetLoadExtens
152e0 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ion(true);..    
152f0 20 20 20 20 20 20 20 20 4c 6f 61 64 45 78 74 65          LoadExte
15300 6e 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 2c 20  nsion(fileName, 
15310 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 50 72  _shimExtensionPr
15320 6f 63 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ocName);..      
15330 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
15340 66 20 28 6d 6f 64 75 6c 65 2e 43 72 65 61 74 65  f (module.Create
15350 44 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75 6c 65  DisposableModule
15360 28 5f 73 71 6c 29 29 0d 0a 20 20 20 20 20 20 20  (_sql))..       
15370 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15380 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 3d 3d 20  if (_modules == 
15390 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
153a0 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73 20         _modules 
153b0 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
153c0 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d  <string, SQLiteM
153d0 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20 20 20  odule>();....   
153e0 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65           _module
153f0 73 2e 41 64 64 28 6d 6f 64 75 6c 65 2e 4e 61 6d  s.Add(module.Nam
15400 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20  e, module);.... 
15410 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
15420 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20  usePool)..      
15430 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15440 20 20 20 20 20 20 20 20 20 5f 75 73 65 50 6f 6f           _usePoo
15450 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69  l = false;....#i
15460 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
15470 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
15480 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
15490 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
154a0 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74  teLine(HelperMet
154b0 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
154c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
154d0 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
154e0 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
154f0 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
15500 20 20 20 20 20 20 20 20 20 22 43 72 65 61 74 65           "Create
15510 4d 6f 64 75 6c 65 20 28 50 6f 6f 6c 29 20 44 69  Module (Pool) Di
15520 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d 0a 20  sabled: {0}",.. 
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15540 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e     HandleToStrin
15550 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  g()));..#endif..
15560 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15570 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15580 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
15590 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
155a0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
155b0 78 63 65 70 74 69 6f 6e 28 47 65 74 4c 61 73 74  xception(GetLast
155c0 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
155d0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
155e0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
155f0 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20  ..    /// Calls 
15600 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74  the native SQLit
15610 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
15620 6e 20 6f 72 64 65 72 20 74 6f 20 63 6c 65 61 6e  n order to clean
15630 75 70 20 74 68 65 20 72 65 73 6f 75 72 63 65 73  up the resources
15640 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69  ..    /// associ
15650 61 74 65 64 20 77 69 74 68 20 61 20 6d 6f 64 75  ated with a modu
15660 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
15670 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
15680 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
15690 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
156a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
156b0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
156c0 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  odule">..    ///
156d0 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65   The module obje
156e0 63 74 20 70 72 65 76 69 6f 75 73 6c 79 20 70 61  ct previously pa
156f0 73 73 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65  ssed to the <see
15700 20 63 72 65 66 3d 22 43 72 65 61 74 65 4d 6f 64   cref="CreateMod
15710 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  ule" />..    ///
15720 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f   method...    //
15730 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
15740 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
15750 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f  "flags">..    //
15760 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20  / The flags for 
15770 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c  the associated <
15780 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
15790 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f  Connection" /> o
157a0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
157b0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
157c0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
157d0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69  override void Di
157e0 73 70 6f 73 65 4d 6f 64 75 6c 65 28 53 51 4c 69  sposeModule(SQLi
157f0 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c  teModule module,
15800 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
15810 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20  nFlags flags).. 
15820 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
15830 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
15840 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
15850 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
15860 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
15870 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20  module");....   
15880 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70       module.Disp
15890 6f 73 65 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23  ose();..    }..#
158a0 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74  endif....    int
158b0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 49  ernal override I
158c0 6e 74 50 74 72 20 41 67 67 72 65 67 61 74 65 43  ntPtr AggregateC
158d0 6f 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f  ontext(IntPtr co
158e0 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
158f0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
15900 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
15910 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74  sqlite3_aggregat
15920 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78  e_context(contex
15930 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  t, 1);..    }...
15940 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
15950 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
15960 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
15970 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65     /// Calls the
15980 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63   native SQLite c
15990 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f  ore library in o
159a0 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20  rder to declare 
159b0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  a virtual table.
159c0 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70  .    /// in resp
159d0 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69  onse to a call i
159e0 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65  nto the <see cre
159f0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
15a00 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20  Module.xCreate" 
15a10 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c  />..    /// or <
15a20 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
15a30 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
15a40 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75  onnect" /> virtu
15a50 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73  al table methods
15a60 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
15a70 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
15a80 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75  param name="modu
15a90 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  le">..    /// Th
15aa0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
15ab0 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20 74  module that is t
15ac0 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65  o be responsible
15ad0 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c   for the virtual
15ae0 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20   table..    /// 
15af0 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d  being declared..
15b00 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
15b10 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
15b20 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c 22 3e  m name="strSql">
15b30 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74  ..    /// The st
15b40 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
15b50 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
15b60 74 20 64 65 73 63 72 69 62 69 6e 67 20 74 68 65  t describing the
15b70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74   virtual table t
15b80 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 64 65  o..    /// be de
15b90 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  clared...    ///
15ba0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
15bb0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
15bc0 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f  error">..    ///
15bd0 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
15be0 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  he contents of t
15bf0 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 61 72  his parameter ar
15c00 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70  e undefined.  Up
15c10 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20  on failure,..   
15c20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63   /// it should c
15c30 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70  ontain an approp
15c40 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73  riate error mess
15c50 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  age...    /// </
15c60 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
15c70 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
15c80 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
15c90 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
15ca0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
15cb0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
15cc0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
15cd0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63  iteErrorCode Dec
15ce0 6c 61 72 65 56 69 72 74 75 61 6c 54 61 62 6c 65  lareVirtualTable
15cf0 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
15d00 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d  eModule module,.
15d10 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
15d20 73 74 72 53 71 6c 2c 0d 0a 20 20 20 20 20 20 20  strSql,..       
15d30 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
15d40 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  r..        )..  
15d50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
15d60 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
15d70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15d80 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
15d90 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61  connection has a
15da0 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
15db0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
15dc0 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72  return SQLiteErr
15dd0 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20  orCode.Error;.. 
15de0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
15df0 20 20 20 20 49 6e 74 50 74 72 20 70 53 71 6c 20      IntPtr pSql 
15e00 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
15e10 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
15e20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15e30 20 20 20 20 20 20 70 53 71 6c 20 3d 20 53 51 4c        pSql = SQL
15e40 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e  iteString.Utf8In
15e50 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 73  tPtrFromString(s
15e60 74 72 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20  trSql);....     
15e70 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
15e80 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
15e90 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
15ea0 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
15eb0 74 61 62 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tab(..          
15ec0 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 53 71 6c        _sql, pSql
15ed0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15ee0 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69    if ((n == SQLi
15ef0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
15f00 26 26 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e 75  && (module != nu
15f10 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
15f20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 65 63        module.Dec
15f30 6c 61 72 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d  lared = true;...
15f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
15f50 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
15f60 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20  rCode.Ok) error 
15f70 3d 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  = GetLastError()
15f80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15f90 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20   return n;..    
15fa0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
15fb0 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
15fc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
15fd0 66 20 28 70 53 71 6c 20 21 3d 20 49 6e 74 50 74  f (pSql != IntPt
15fe0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
15ff0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16000 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65          SQLiteMe
16010 6d 6f 72 79 2e 46 72 65 65 28 70 53 71 6c 29 3b  mory.Free(pSql);
16020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16030 20 20 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e    pSql = IntPtr.
16040 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
16050 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
16060 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
16070 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
16080 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e   /// Calls the n
16090 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72  ative SQLite cor
160a0 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64  e library in ord
160b0 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20  er to declare a 
160c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
160d0 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20     /// function 
160e0 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61  in response to a
160f0 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c   call into the <
16100 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
16110 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
16120 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f  reate" />..    /
16130 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d  // or <see cref=
16140 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
16150 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
16160 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  > virtual table 
16170 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f  methods...    //
16180 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
16190 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
161a0 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
161b0 20 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c   /// The virtual
161c0 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68   table module th
161d0 61 74 20 69 73 20 74 6f 20 62 65 20 72 65 73 70  at is to be resp
161e0 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20  onsible for the 
161f0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
16200 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20     /// function 
16210 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d  being declared..
16220 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
16230 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
16240 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74  m name="argument
16250 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f  Count">..    ///
16260 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   The number of a
16270 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
16280 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64  function being d
16290 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  eclared...    //
162a0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
162b0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
162c0 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  "name">..    ///
162d0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
162e0 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20   function being 
162f0 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
16300 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
16310 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
16320 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f  ="error">..    /
16330 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
16340 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
16350 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
16360 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20  are undefined.  
16370 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20  Upon failure,.. 
16380 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64     /// it should
16390 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72   contain an appr
163a0 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65  opriate error me
163b0 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ssage...    /// 
163c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
163d0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
163e0 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
163f0 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
16400 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  de...    /// </r
16410 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
16420 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
16430 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44  QLiteErrorCode D
16440 65 63 6c 61 72 65 56 69 72 74 75 61 6c 46 75 6e  eclareVirtualFun
16450 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
16460 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
16470 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e  ule,..        in
16480 74 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c  t argumentCount,
16490 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
164a0 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
164b0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
164c0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
164d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
164e0 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
164f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16500 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 63        error = "c
16510 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
16520 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22   invalid handle"
16530 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
16540 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
16550 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
16560 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16570 20 20 20 49 6e 74 50 74 72 20 70 4e 61 6d 65 20     IntPtr pName 
16580 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
16590 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
165a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
165b0 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 53 51        pName = SQ
165c0 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
165d0 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
165e0 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  name);....      
165f0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
16600 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
16610 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
16620 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66  lite3_overload_f
16630 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
16640 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
16650 70 4e 61 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43  pName, argumentC
16660 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
16670 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
16680 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
16690 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61  k) error = GetLa
166a0 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20  stError();....  
166b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
166c0 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   n;..        }..
166d0 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
166e0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
166f0 20 20 20 20 20 20 20 20 69 66 20 28 70 4e 61 6d          if (pNam
16700 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e != IntPtr.Zero
16710 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
16720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16730 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
16740 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a 20 20 20  ree(pName);..   
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4e 61               pNa
16760 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  me = IntPtr.Zero
16770 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
16780 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
16790 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
167a0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
167b0 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73  .    /// Enables
167c0 20 6f 72 20 64 69 73 61 62 6c 65 73 20 61 20 63   or disables a c
167d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
167e0 69 6f 6e 20 66 6f 72 20 74 68 65 20 64 61 74 61  ion for the data
167f0 62 61 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 63  base...    /// c
16800 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
16810 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
16820 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
16830 61 6d 65 3d 22 6f 70 74 69 6f 6e 22 3e 0d 0a 20  ame="option">.. 
16840 20 20 20 2f 2f 2f 20 54 68 65 20 64 61 74 61 62     /// The datab
16850 61 73 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ase configuratio
16860 6e 20 6f 70 74 69 6f 6e 20 74 6f 20 65 6e 61 62  n option to enab
16870 6c 65 20 6f 72 20 64 69 73 61 62 6c 65 2e 0d 0a  le or disable...
16880 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
16890 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
168a0 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d   name="bOnOff">.
168b0 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f  .    /// True to
168c0 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20   enable loading 
168d0 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66  of extensions, f
168e0 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e  alse to disable.
168f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
16900 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
16910 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
16920 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
16930 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
16940 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
16950 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
16960 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
16970 72 72 6f 72 43 6f 64 65 20 53 65 74 43 6f 6e 66  rrorCode SetConf
16980 69 67 75 72 61 74 69 6f 6e 4f 70 74 69 6f 6e 28  igurationOption(
16990 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
169a0 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 20  ConfigDbOpsEnum 
169b0 6f 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  option,..       
169c0 20 62 6f 6f 6c 20 62 4f 6e 4f 66 66 0d 0a 20 20   bool bOnOff..  
169d0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
169e0 20 20 20 20 20 20 20 20 69 66 20 28 28 6f 70 74          if ((opt
169f0 69 6f 6e 20 3c 20 53 51 4c 69 74 65 43 6f 6e 66  ion < SQLiteConf
16a00 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  igDbOpsEnum.SQLI
16a10 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42  TE_DBCONFIG_ENAB
16a20 4c 45 5f 46 4b 45 59 29 20 7c 7c 0d 0a 20 20 20  LE_FKEY) ||..   
16a30 20 20 20 20 20 20 20 20 20 28 6f 70 74 69 6f 6e           (option
16a40 20 3e 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44   > SQLiteConfigD
16a50 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  bOpsEnum.SQLITE_
16a60 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f  DBCONFIG_ENABLE_
16a70 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 29 29  LOAD_EXTENSION))
16a80 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
16a90 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
16aa0 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
16ab0 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  on(HelperMethods
16ac0 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
16ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ae0 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
16af0 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75 6e               "un
16b10 73 75 70 70 6f 72 74 65 64 20 63 6f 6e 66 69 67  supported config
16b20 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 2c 20  uration option, 
16b30 6d 75 73 74 20 62 65 3a 20 7b 30 7d 2c 20 7b 31  must be: {0}, {1
16b40 7d 2c 20 7b 32 7d 2c 20 6f 72 20 7b 33 7d 22 2c  }, {2}, or {3}",
16b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b60 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62    SQLiteConfigDb
16b70 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44  OpsEnum.SQLITE_D
16b80 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 46  BCONFIG_ENABLE_F
16b90 4b 45 59 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  KEY,..          
16ba0 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
16bb0 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  igDbOpsEnum.SQLI
16bc0 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42  TE_DBCONFIG_ENAB
16bd0 4c 45 5f 54 52 49 47 47 45 52 2c 0d 0a 20 20 20  LE_TRIGGER,..   
16be0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
16bf0 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e  iteConfigDbOpsEn
16c00 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46  um.SQLITE_DBCONF
16c10 49 47 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f 54  IG_ENABLE_FTS3_T
16c20 4f 4b 45 4e 49 5a 45 52 2c 0d 0a 20 20 20 20 20  OKENIZER,..     
16c30 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16c40 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
16c50 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47  .SQLITE_DBCONFIG
16c60 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54  _ENABLE_LOAD_EXT
16c70 45 4e 53 49 4f 4e 29 29 3b 0d 0a 20 20 20 20 20  ENSION));..     
16c80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
16c90 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30 3b 20  int result = 0; 
16ca0 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a  /* NOT USED */..
16cb0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
16cc0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
16cd0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f  hods.sqlite3_db_
16ce0 63 6f 6e 66 69 67 5f 69 6e 74 5f 72 65 66 69 6e  config_int_refin
16cf0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
16d00 5f 73 71 6c 2c 20 6f 70 74 69 6f 6e 2c 20 28 62  _sql, option, (b
16d10 4f 6e 4f 66 66 20 3f 20 31 20 3a 20 30 29 2c 20  OnOff ? 1 : 0), 
16d20 72 65 66 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20  ref result);..  
16d30 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
16d40 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
16d50 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73  / Enables or dis
16d60 61 62 6c 65 73 20 65 78 74 65 6e 73 69 6f 6e 20  ables extension 
16d70 6c 6f 61 64 69 6e 67 20 62 79 20 53 51 4c 69 74  loading by SQLit
16d80 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
16d90 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
16da0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e  <param name="bOn
16db0 4f 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  Off">..    /// T
16dc0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f  rue to enable lo
16dd0 61 64 69 6e 67 20 6f 66 20 65 78 74 65 6e 73 69  ading of extensi
16de0 6f 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69  ons, false to di
16df0 73 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  sable...    /// 
16e00 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
16e10 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
16e20 76 6f 69 64 20 53 65 74 4c 6f 61 64 45 78 74 65  void SetLoadExte
16e30 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f 66  nsion(bool bOnOf
16e40 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  f)..    {..     
16e50 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
16e60 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de n;....       
16e70 20 69 66 20 28 53 51 4c 69 74 65 56 65 72 73 69   if (SQLiteVersi
16e80 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30 31 33  onNumber >= 3013
16e90 30 30 30 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  000)..        {.
16ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
16eb0 20 53 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f   SetConfiguratio
16ec0 6e 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  nOption(..      
16ed0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
16ee0 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e  ConfigDbOpsEnum.
16ef0 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
16f00 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54 45  ENABLE_LOAD_EXTE
16f10 4e 53 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20  NSION,..        
16f20 20 20 20 20 20 20 20 20 62 4f 6e 4f 66 66 29 3b          bOnOff);
16f30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
16f40 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
16f50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16f60 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
16f70 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
16f80 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78  3_enable_load_ex
16f90 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  tension(..      
16fa0 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
16fb0 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30  (bOnOff ? -1 : 0
16fc0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
16fd0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
16fe0 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
16ff0 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
17000 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
17010 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
17020 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
17030 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
17040 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20  ..    /// Loads 
17050 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69  a SQLite extensi
17060 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20  on library from 
17070 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d  the named file..
17080 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
17090 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
170a0 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61  ram name="fileNa
170b0 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
170c0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79  e name of the dy
170d0 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61  namic link libra
170e0 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69  ry file containi
170f0 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  ng the extension
17100 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
17110 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
17120 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61  ram name="procNa
17130 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
17140 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78  e name of the ex
17150 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20  ported function 
17160 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69  used to initiali
17170 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  ze the extension
17180 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75  ...    /// If nu
17190 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20  ll, the default 
171a0 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69  "sqlite3_extensi
171b0 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65  on_init" will be
171c0 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20   used...    /// 
171d0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
171e0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
171f0 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69  void LoadExtensi
17200 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61  on(string fileNa
17210 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e  me, string procN
17220 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
17230 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d       if (fileNam
17240 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
17250 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
17260 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
17270 63 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61 6d  ception("fileNam
17280 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
17290 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d 20  IntPtr pError = 
172a0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
172b0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
172c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
172d0 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 46      byte[] utf8F
172e0 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e  ileName = UTF8En
172f0 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42  coding.UTF8.GetB
17300 79 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b 20  ytes(fileName + 
17310 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  '\0');..        
17320 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38 50      byte[] utf8P
17330 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  rocName = null;.
17340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
17350 66 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20 6e  f (procName != n
17360 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
17370 20 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e 61        utf8ProcNa
17380 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e  me = UTF8Encodin
17390 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73 28  g.UTF8.GetBytes(
173a0 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27 29  procName + '\0')
173b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
173c0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
173d0 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
173e0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
173f0 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
17400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17410 20 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c 65    _sql, utf8File
17420 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e 61  Name, utf8ProcNa
17430 6d 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b  me, ref pError);
17440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17450 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
17460 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
17480 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
17490 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38 54  ception(n, UTF8T
174a0 6f 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c 20  oString(pError, 
174b0 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  -1));..        }
174c0 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
174d0 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
174e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 45            if (pE
174f0 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a  rror != IntPtr.Z
17500 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
17510 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17520 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
17530 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
17540 5f 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d 0a  _free(pError);..
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17560 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e  pError = IntPtr.
17570 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
17580 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
17590 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
175a0 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73  / Enables or dis
175b0 61 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20 72  abled extended r
175c0 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75  esult codes retu
175d0 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a  rned by SQLite..
175e0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
175f0 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 45 78  rride void SetEx
17600 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65  tendedResultCode
17610 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a  s(bool bOnOff)..
17620 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
17630 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
17640 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
17650 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74  hods.sqlite3_ext
17660 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64  ended_result_cod
17670 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  es(..          _
17680 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d  sql, (bOnOff ? -
17690 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20 20  1 : 0));....    
176a0 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
176b0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
176c0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
176d0 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
176e0 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
176f0 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74    }..    /// Get
17700 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74  s the last SQLit
17710 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20  e error code..  
17720 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
17730 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
17740 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28 29  ode ResultCode()
17750 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
17760 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
17770 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
17780 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b  3_errcode(_sql);
17790 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f  ..    }..    ///
177a0 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53   Gets the last S
177b0 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20 65  QLite extended e
177c0 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69  rror code..    i
177d0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
177e0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
177f0 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43   ExtendedResultC
17800 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ode()..    {..  
17810 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
17820 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
17830 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
17840 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a  errcode(_sql);..
17850 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
17860 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61   Add a log messa
17870 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74  ge via the SQLit
17880 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e  e sqlite3_log in
17890 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e  terface...    in
178a0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
178b0 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65 28  void LogMessage(
178c0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
178d0 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67  iErrCode, string
178e0 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20   zMessage)..    
178f0 7b 0d 0a 20 20 20 20 20 20 53 74 61 74 69 63 4c  {..      StaticL
17900 6f 67 4d 65 73 73 61 67 65 28 69 45 72 72 43 6f  ogMessage(iErrCo
17910 64 65 2c 20 7a 4d 65 73 73 61 67 65 29 3b 0d 0a  de, zMessage);..
17920 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
17930 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73 61   Add a log messa
17940 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69 74  ge via the SQLit
17950 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69 6e  e sqlite3_log in
17960 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69 6e  terface...    in
17970 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f  ternal static vo
17980 69 64 20 53 74 61 74 69 63 4c 6f 67 4d 65 73 73  id StaticLogMess
17990 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43  age(SQLiteErrorC
179a0 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74  ode iErrCode, st
179b0 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a  ring zMessage)..
179c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
179d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
179e0 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72  .sqlite3_log(iEr
179f0 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a 4d  rCode, ToUTF8(zM
17a00 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20 7d  essage));..    }
17a10 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
17a20 43 4f 44 45 43 20 7c 7c 20 49 4e 54 45 52 4f 50  CODEC || INTEROP
17a30 5f 49 4e 43 4c 55 44 45 5f 53 45 45 0d 0a 20 20  _INCLUDE_SEE..  
17a40 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
17a50 69 64 65 20 76 6f 69 64 20 53 65 74 50 61 73 73  ide void SetPass
17a60 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73  word(byte[] pass
17a70 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20  wordBytes)..    
17a80 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
17a90 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
17aa0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
17ab0 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71  .sqlite3_key(_sq
17ac0 6c 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  l, passwordBytes
17ad0 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2e  , passwordBytes.
17ae0 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20  Length);..      
17af0 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
17b00 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
17b10 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
17b20 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
17b30 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
17b40 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c      if (_usePool
17b50 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
17b60 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66      _usePool = f
17b70 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45  alse;....#if !NE
17b80 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
17b90 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
17ba0 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63 65 2e  ..        Trace.
17bb0 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72  WriteLine(Helper
17bc0 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
17bd0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
17be0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
17bf0 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
17c00 20 20 20 20 20 20 20 20 22 53 65 74 50 61 73 73          "SetPass
17c10 77 6f 72 64 20 28 50 6f 6f 6c 29 20 44 69 73 61  word (Pool) Disa
17c20 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  bled: {0}",..   
17c30 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53         HandleToS
17c40 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64  tring()));..#end
17c50 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  if..      }..   
17c60 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
17c70 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
17c80 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64 28   ChangePassword(
17c90 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f  byte[] newPasswo
17ca0 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d  rdBytes)..    {.
17cb0 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
17cc0 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
17cd0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
17ce0 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73 71  qlite3_rekey(_sq
17cf0 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79  l, newPasswordBy
17d00 74 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f 72  tes, (newPasswor
17d10 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 20  dBytes == null) 
17d20 3f 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f 72  ? 0 : newPasswor
17d30 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d  dBytes.Length);.
17d40 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
17d50 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
17d60 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
17d70 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
17d80 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
17d90 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  ;....      if (_
17da0 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20  usePool)..      
17db0 7b 0d 0a 20 20 20 20 20 20 20 20 5f 75 73 65 50  {..        _useP
17dc0 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ool = false;....
17dd0 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
17de0 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
17df0 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
17e00 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
17e10 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
17e20 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
17e30 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
17e40 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
17e50 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  re,..          "
17e60 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64 20 28  ChangePassword (
17e70 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65 64 3a 20  Pool) Disabled: 
17e80 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
17e90 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28   HandleToString(
17ea0 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  )));..#endif..  
17eb0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
17ec0 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ndif....    inte
17ed0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
17ee0 69 64 20 53 65 74 50 72 6f 67 72 65 73 73 48 6f  id SetProgressHo
17ef0 6f 6b 28 69 6e 74 20 6e 4f 70 73 2c 20 53 51 4c  ok(int nOps, SQL
17f00 69 74 65 50 72 6f 67 72 65 73 73 43 61 6c 6c 62  iteProgressCallb
17f10 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
17f20 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
17f30 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
17f40 6c 69 74 65 33 5f 70 72 6f 67 72 65 73 73 5f 68  lite3_progress_h
17f50 61 6e 64 6c 65 72 28 5f 73 71 6c 2c 20 6e 4f 70  andler(_sql, nOp
17f60 73 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  s, func, IntPtr.
17f70 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
17f80 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
17f90 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 41  erride void SetA
17fa0 75 74 68 6f 72 69 7a 65 72 48 6f 6f 6b 28 53 51  uthorizerHook(SQ
17fb0 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72 43 61  LiteAuthorizerCa
17fc0 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
17fd0 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
17fe0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
17ff0 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f  qlite3_set_autho
18000 72 69 7a 65 72 28 5f 73 71 6c 2c 20 66 75 6e 63  rizer(_sql, func
18010 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
18020 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
18030 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
18040 76 6f 69 64 20 53 65 74 55 70 64 61 74 65 48 6f  void SetUpdateHo
18050 6f 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65 43  ok(SQLiteUpdateC
18060 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
18070 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
18080 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
18090 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68  sqlite3_update_h
180a0 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20  ook(_sql, func, 
180b0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
180c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
180d0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
180e0 69 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b  id SetCommitHook
180f0 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c  (SQLiteCommitCal
18100 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
18110 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
18120 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
18130 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f  lite3_commit_hoo
18140 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  k(_sql, func, In
18150 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
18160 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
18170 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
18180 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61 63   SetTraceCallbac
18190 6b 28 53 51 4c 69 74 65 54 72 61 63 65 43 61 6c  k(SQLiteTraceCal
181a0 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
181b0 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
181c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
181d0 6c 69 74 65 33 5f 74 72 61 63 65 28 5f 73 71 6c  lite3_trace(_sql
181e0 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
181f0 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
18200 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
18210 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 52 6f  rride void SetRo
18220 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74  llbackHook(SQLit
18230 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  eRollbackCallbac
18240 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
18250 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
18260 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
18270 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28  3_rollback_hook(
18280 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
18290 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
182a0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
182b0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
182c0 6c 6c 6f 77 73 20 74 68 65 20 73 65 74 74 69 6e  llows the settin
182d0 67 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20 63  g of a logging c
182e0 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20  allback invoked 
182f0 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20 61  by SQLite when a
18300 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76  ..    /// log ev
18310 65 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c  ent occurs.  Onl
18320 79 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d  y one callback m
18330 61 79 20 62 65 20 73 65 74 2e 20 20 49 66 20 4e  ay be set.  If N
18340 55 4c 4c 20 69 73 20 70 61 73 73 65 64 2c 0d 0a  ULL is passed,..
18350 20 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67      /// the logg
18360 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  ing callback is 
18370 75 6e 72 65 67 69 73 74 65 72 65 64 2e 0d 0a 20  unregistered... 
18380 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
18390 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
183a0 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68  m name="func">Th
183b0 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  e callback funct
183c0 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f  ion to invoke.</
183d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
183e0 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73  <returns>Returns
183f0 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f   a result code</
18400 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
18410 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
18420 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
18430 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53  SetLogCallback(S
18440 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b  QLiteLogCallback
18450 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
18460 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
18470 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
18480 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
18490 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c  sqlite3_config_l
184a0 6f 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og(..           
184b0 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73   SQLiteConfigOps
184c0 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46  Enum.SQLITE_CONF
184d0 49 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49 6e  IG_LOG, func, In
184e0 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20  tPtr.Zero);.... 
184f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
18500 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
18510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
18570 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
18580 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72  ary>..    /// Cr
18590 65 61 74 65 73 20 61 20 6e 65 77 20 53 51 4c 69  eates a new SQLi
185a0 74 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  te backup object
185b0 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 70 72   based on the pr
185c0 6f 76 69 64 65 64 20 64 65 73 74 69 6e 61 74 69  ovided destinati
185d0 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61  on..    /// data
185e0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
185f0 20 20 54 68 65 20 73 6f 75 72 63 65 20 64 61 74    The source dat
18600 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
18610 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20   is the one..   
18620 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20   /// associated 
18630 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74  with this object
18640 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 61 6e  .  The source an
18650 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  d destination da
18660 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
18670 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e  connections cann
18680 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65 2e 0d  ot be the same..
18690 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
186a0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
186b0 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e  ram name="destCn
186c0 6e 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69  n">The destinati
186d0 6f 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  on database conn
186e0 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  ection.</param>.
186f0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
18700 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e  name="destName">
18710 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  The destination 
18720 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f  database name.</
18730 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
18740 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75  <param name="sou
18750 72 63 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75  rceName">The sou
18760 72 63 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d  rce database nam
18770 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
18780 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
18790 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20 62   newly created b
187a0 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72  ackup object.</r
187b0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
187c0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
187d0 51 4c 69 74 65 42 61 63 6b 75 70 20 49 6e 69 74  QLiteBackup Init
187e0 69 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20  ializeBackup(.. 
187f0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
18800 6e 65 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c  nection destCnn,
18810 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
18820 20 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20   destName,..    
18830 20 20 20 20 73 74 72 69 6e 67 20 73 6f 75 72 63      string sourc
18840 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29  eName..        )
18850 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
18860 20 69 66 20 28 64 65 73 74 43 6e 6e 20 3d 3d 20   if (destCnn == 
18870 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18880 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
18890 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
188a0 6f 6e 28 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a  on("destCnn");..
188b0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
188c0 73 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d  stName == null).
188d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
188e0 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
188f0 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65  ullException("de
18900 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20  stName");....   
18910 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 4e       if (sourceN
18920 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
18930 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
18940 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
18950 45 78 63 65 70 74 69 6f 6e 28 22 73 6f 75 72 63  Exception("sourc
18960 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  eName");....    
18970 20 20 20 20 53 51 4c 69 74 65 33 20 64 65 73 74      SQLite3 dest
18980 53 71 6c 69 74 65 33 20 3d 20 64 65 73 74 43 6e  Sqlite3 = destCn
18990 6e 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69 74 65  n._sql as SQLite
189a0 33 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  3;....        if
189b0 20 28 64 65 73 74 53 71 6c 69 74 65 33 20 3d 3d   (destSqlite3 ==
189c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
189d0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
189e0 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
189f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18a00 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63    "Destination c
18a10 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 6e 6f  onnection has no
18a20 20 77 72 61 70 70 65 72 2e 22 2c 0d 0a 20 20 20   wrapper.",..   
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65               "de
18a40 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  stCnn");....    
18a50 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
18a60 74 69 6f 6e 48 61 6e 64 6c 65 20 64 65 73 74 48  tionHandle destH
18a70 61 6e 64 6c 65 20 3d 20 64 65 73 74 53 71 6c 69  andle = destSqli
18a80 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20  te3._sql;....   
18a90 20 20 20 20 20 69 66 20 28 64 65 73 74 48 61 6e       if (destHan
18aa0 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
18ab0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
18ac0 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65  new ArgumentExce
18ad0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
18ae0 20 20 20 20 20 20 20 20 22 44 65 73 74 69 6e 61          "Destina
18af0 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
18b00 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
18b10 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20 20 20 20  andle.",..      
18b20 20 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43            "destC
18b30 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nn");....       
18b40 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
18b50 6e 48 61 6e 64 6c 65 20 73 6f 75 72 63 65 48 61  nHandle sourceHa
18b60 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a  ndle = _sql;....
18b70 20 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72          if (sour
18b80 63 65 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c  ceHandle == null
18b90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
18ba0 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
18bb0 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
18bc0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
18bd0 20 20 20 20 20 22 53 6f 75 72 63 65 20 63 6f 6e       "Source con
18be0 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69  nection has an i
18bf0 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
18c00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74  ;....        byt
18c10 65 5b 5d 20 7a 44 65 73 74 4e 61 6d 65 20 3d 20  e[] zDestName = 
18c20 54 6f 55 54 46 38 28 64 65 73 74 4e 61 6d 65 29  ToUTF8(destName)
18c30 3b 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  ;..        byte[
18c40 5d 20 7a 53 6f 75 72 63 65 4e 61 6d 65 20 3d 20  ] zSourceName = 
18c50 54 6f 55 54 46 38 28 73 6f 75 72 63 65 4e 61 6d  ToUTF8(sourceNam
18c60 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  e);....        S
18c70 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
18c80 65 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d  e backupHandle =
18c90 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
18ca0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
18cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
18cc0 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
18cd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
18ce0 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45   finally /* NOTE
18cf0 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29  : Thread.Abort()
18d00 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d   protection. */.
18d10 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
18d20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 62          IntPtr b
18d30 61 63 6b 75 70 20 3d 20 55 6e 73 61 66 65 4e 61  ackup = UnsafeNa
18d40 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
18d50 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28  te3_backup_init(
18d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d70 20 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44    destHandle, zD
18d80 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48  estName, sourceH
18d90 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61  andle, zSourceNa
18da0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
18db0 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
18dc0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
18df0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
18e00 65 73 75 6c 74 43 6f 64 65 20 3d 20 52 65 73 75  esultCode = Resu
18e10 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20  ltCode();....   
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18e30 28 72 65 73 75 6c 74 43 6f 64 65 20 21 3d 20 53  (resultCode != S
18e40 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
18e50 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
18e60 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
18e70 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
18e80 6e 28 72 65 73 75 6c 74 43 6f 64 65 2c 20 47 65  n(resultCode, Ge
18e90 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18eb0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
18ec0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
18ed0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
18ee0 69 6f 6e 28 22 66 61 69 6c 65 64 20 74 6f 20 69  ion("failed to i
18ef0 6e 69 74 69 61 6c 69 7a 65 20 62 61 63 6b 75 70  nitialize backup
18f00 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
18f10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
18f20 20 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d    backupHandle =
18f30 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75   new SQLiteBacku
18f40 70 48 61 6e 64 6c 65 28 64 65 73 74 48 61 6e 64  pHandle(destHand
18f50 6c 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a 20 20  le, backup);..  
18f60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18f70 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
18f80 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
18f90 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
18fa0 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
18fb0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
18fc0 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
18fd0 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48  ype.NewCriticalH
18fe0 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20  andle, null,..  
18ff0 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
19000 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 62 61 63 6b  null, null, back
19010 75 70 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20  upHandle, null, 
19020 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a  new object[] {..
19030 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
19040 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 64 65 73  of(SQLite3), des
19050 74 43 6e 6e 2c 20 64 65 73 74 4e 61 6d 65 2c 20  tCnn, destName, 
19060 73 6f 75 72 63 65 4e 61 6d 65 20 7d 29 29 3b 0d  sourceName }));.
19070 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
19080 6e 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b  n new SQLiteBack
19090 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  up(..           
190a0 20 74 68 69 73 2c 20 62 61 63 6b 75 70 48 61 6e   this, backupHan
190b0 64 6c 65 2c 20 64 65 73 74 48 61 6e 64 6c 65 2c  dle, destHandle,
190c0 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72   zDestName, sour
190d0 63 65 48 61 6e 64 6c 65 2c 0d 0a 20 20 20 20 20  ceHandle,..     
190e0 20 20 20 20 20 20 20 7a 53 6f 75 72 63 65 4e 61         zSourceNa
190f0 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  me);..    }.... 
19100 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
19110 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65 73  ..    /// Copies
19120 20 75 70 20 74 6f 20 4e 20 70 61 67 65 73 20 66   up to N pages f
19130 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 20 64  rom the source d
19140 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64  atabase to the d
19150 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20  estination..    
19160 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 61 73 73  /// database ass
19170 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
19180 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75   specified backu
19190 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
191a0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
191b0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
191c0 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
191d0 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
191e0 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20   use.</param>.. 
191f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
19200 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20 20  me="nPage">..   
19210 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
19220 6f 66 20 70 61 67 65 73 20 74 6f 20 63 6f 70 79  of pages to copy
19230 2c 20 6e 65 67 61 74 69 76 65 20 74 6f 20 63 6f  , negative to co
19240 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67  py all remaining
19250 20 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f   pages...    ///
19260 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
19270 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
19280 72 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f  retry">..    ///
19290 20 53 65 74 20 74 6f 20 74 72 75 65 20 69 66 20   Set to true if 
192a0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e 65  the operation ne
192b0 65 64 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  eds to be retrie
192c0 64 20 64 75 65 20 74 6f 20 64 61 74 61 62 61 73  d due to databas
192d0 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69  e..    /// locki
192e0 6e 67 20 69 73 73 75 65 73 3b 20 6f 74 68 65 72  ng issues; other
192f0 77 69 73 65 2c 20 73 65 74 20 74 6f 20 66 61 6c  wise, set to fal
19300 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  se...    /// </p
19310 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
19320 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
19330 2f 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  / True if there 
19340 61 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20 74  are more pages t
19350 6f 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61 6c  o be copied, fal
19360 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20  se otherwise... 
19370 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
19380 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
19390 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74  override bool St
193a0 65 70 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  epBackup(..     
193b0 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
193c0 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20 20 20 20  backup,..       
193d0 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a 20 20 20   int nPage,..   
193e0 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 72 65       ref bool re
193f0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  try..        )..
19400 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
19410 65 74 72 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  etry = false;...
19420 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63  .        if (bac
19430 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  kup == null)..  
19440 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
19450 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
19460 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75  Exception("backu
19470 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p");....        
19480 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
19490 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b  le handle = back
194a0 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75  up._sqlite_backu
194b0 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  p;....        if
194c0 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c   (handle == null
194d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
194e0 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
194f0 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
19500 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
19510 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
19520 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
19530 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
19540 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
19550 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64  handlePtr = hand
19560 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  le;....        i
19570 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20  f (handlePtr == 
19580 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
19590 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
195a0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
195b0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195d0 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
195e0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
195f0 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b  ndle pointer.");
19600 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
19610 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
19620 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
19630 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
19640 75 70 5f 73 74 65 70 28 68 61 6e 64 6c 65 50 74  up_step(handlePt
19650 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20 20 20 20  r, nPage);..    
19660 20 20 20 20 62 61 63 6b 75 70 2e 5f 73 74 65 70      backup._step
19670 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e  Result = n; /* N
19680 4f 54 45 3a 20 53 61 76 65 20 66 6f 72 20 75 73  OTE: Save for us
19690 65 20 62 79 20 46 69 6e 69 73 68 42 61 63 6b 75  e by FinishBacku
196a0 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  p. */....       
196b0 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
196c0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
196d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
196e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
196f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
19700 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
19710 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
19720 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20  Code.Busy)..    
19730 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19740 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b     retry = true;
19750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
19760 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
19770 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
19780 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
19790 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63  iteErrorCode.Loc
197a0 6b 65 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ked)..        {.
197b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
197c0 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ry = true;..    
197d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
197e0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
197f0 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66  .        else if
19800 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
19810 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d 0a 20 20  orCode.Done)..  
19820 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19830 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
19840 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
19850 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
19860 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19870 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
19880 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
19890 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
198a0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
198b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
198c0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
198d0 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75  / Returns the nu
198e0 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65  mber of pages re
198f0 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f  maining to be co
19900 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 73 6f  pied from the so
19910 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  urce..    /// da
19920 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64 65  tabase to the de
19930 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
19940 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  se associated wi
19950 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
19960 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63 6b 75 70  ..    /// backup
19970 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f   object...    //
19980 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
19990 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
199a0 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62  e="backup">The b
199b0 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20  ackup object to 
199c0 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  check.</param>..
199d0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
199e0 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70  >The number of p
199f0 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74  ages remaining t
19a00 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c 2f 72 65  o be copied.</re
19a10 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
19a20 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
19a30 74 20 52 65 6d 61 69 6e 69 6e 67 42 61 63 6b 75  t RemainingBacku
19a40 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
19a50 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
19a60 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
19a70 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
19a80 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
19a90 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
19aa0 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
19ab0 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
19ac0 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
19ad0 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
19ae0 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
19af0 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
19b00 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
19b10 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
19b20 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
19b30 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
19b40 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
19b50 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
19b60 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
19b70 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
19b80 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
19b90 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
19ba0 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
19bb0 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
19bc0 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
19bd0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
19be0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
19bf0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
19c00 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
19c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19c20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
19c30 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
19c40 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
19c50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
19c60 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
19c70 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
19c80 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69 6e 69 6e  _backup_remainin
19c90 67 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20  g(handlePtr);.. 
19ca0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
19cb0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
19cc0 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 74  // Returns the t
19cd0 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70  otal number of p
19ce0 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72  ages in the sour
19cf0 63 65 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  ce database asso
19d00 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  ciated..    /// 
19d10 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
19d20 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  ed backup object
19d30 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
19d40 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
19d50 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
19d60 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
19d70 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c  bject to check.<
19d80 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
19d90 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 74 6f   <returns>The to
19da0 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  tal number of pa
19db0 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63  ges in the sourc
19dc0 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 72 65 74  e database.</ret
19dd0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
19de0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
19df0 20 50 61 67 65 43 6f 75 6e 74 42 61 63 6b 75 70   PageCountBackup
19e00 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
19e10 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a  eBackup backup..
19e20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
19e30 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
19e40 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
19e50 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
19e60 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
19e70 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
19e80 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
19e90 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
19ea0 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
19eb0 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
19ec0 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
19ed0 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
19ee0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
19ef0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
19f00 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
19f10 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
19f20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
19f30 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
19f40 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
19f50 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
19f60 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
19f70 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
19f80 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
19f90 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
19fa0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
19fb0 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
19fc0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
19fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19fe0 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
19ff0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
1a000 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
1a010 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
1a020 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
1a030 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1a040 62 61 63 6b 75 70 5f 70 61 67 65 63 6f 75 6e 74  backup_pagecount
1a050 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20  (handlePtr);..  
1a060 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
1a070 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1a080 2f 20 44 65 73 74 72 6f 79 73 20 74 68 65 20 62  / Destroys the b
1a090 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c 20 72 6f  ackup object, ro
1a0a0 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e 79 20 62  lling back any b
1a0b0 61 63 6b 75 70 20 74 68 61 74 20 6d 61 79 20 62  ackup that may b
1a0c0 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70 72  e in..    /// pr
1a0d0 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ogess...    /// 
1a0e0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1a0f0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1a100 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63  "backup">The bac
1a110 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 64 65  kup object to de
1a120 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  stroy.</param>..
1a130 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1a140 72 72 69 64 65 20 76 6f 69 64 20 46 69 6e 69 73  rride void Finis
1a150 68 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  hBackup(..      
1a160 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
1a170 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29  ackup..        )
1a180 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1a190 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
1a1a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1a1b0 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
1a1c0 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
1a1d0 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
1a1e0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
1a1f0 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
1a200 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
1a210 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
1a220 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
1a230 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1a240 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1a250 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
1a260 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
1a280 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
1a290 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
1a2a0 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
1a2b0 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
1a2c0 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
1a2d0 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
1a2e0 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
1a2f0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
1a300 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1a310 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1a320 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
1a330 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
1a340 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
1a350 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
1a360 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 23 69 66 20  nter.");....#if 
1a370 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
1a380 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1a390 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
1a3a0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1a3b0 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
1a3c0 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28  _finish_interop(
1a3d0 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6c  handlePtr);..#el
1a3e0 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  se..        SQLi
1a3f0 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
1a400 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1a410 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
1a420 75 70 5f 66 69 6e 69 73 68 28 68 61 6e 64 6c 65  up_finish(handle
1a430 50 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  Ptr);..#endif.. 
1a440 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 53 65         handle.Se
1a450 74 48 61 6e 64 6c 65 41 73 49 6e 76 61 6c 69 64  tHandleAsInvalid
1a460 28 29 3b 0d 0a 0d 0a 23 69 66 20 43 4f 55 4e 54  ();....#if COUNT
1a470 5f 48 41 4e 44 4c 45 0d 0a 20 20 20 20 20 20 20  _HANDLE..       
1a480 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74   if ((n == SQLit
1a490 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c  eErrorCode.Ok) |
1a4a0 7c 20 28 6e 20 3d 3d 20 62 61 63 6b 75 70 2e 5f  | (n == backup._
1a4b0 73 74 65 70 52 65 73 75 6c 74 29 29 20 68 61 6e  stepResult)) han
1a4c0 64 6c 65 2e 57 61 73 52 65 6c 65 61 73 65 64 4f  dle.WasReleasedO
1a4d0 6b 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  k();..#endif....
1a4e0 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 21          if ((n !
1a4f0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
1a500 65 2e 4f 6b 29 20 26 26 20 28 6e 20 21 3d 20 62  e.Ok) && (n != b
1a510 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c  ackup._stepResul
1a520 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
1a530 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
1a540 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
1a550 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
1a560 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1a570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1a5d0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1a5e0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
1a5f0 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c  mines if the SQL
1a600 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
1a610 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61   has been initia
1a620 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20  lized for the.. 
1a630 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70     /// current p
1a640 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
1a650 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1a660 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
1a670 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61      /// A boolea
1a680 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  n indicating whe
1a690 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
1a6a0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
1a6b0 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  ary has been..  
1a6c0 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65    /// initialize
1a6d0 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
1a6e0 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
1a6f0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1a700 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1a710 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 49 6e 69  rride bool IsIni
1a720 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20  tialized()..    
1a730 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
1a740 6e 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61  n StaticIsInitia
1a750 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d  lized();..    }.
1a760 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
1a770 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
1a780 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20  termines if the 
1a790 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
1a7a0 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69  ary has been ini
1a7b0 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
1a7c0 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
1a7d0 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
1a7e0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1a7f0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1a800 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f  >..    /// A boo
1a810 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20  lean indicating 
1a820 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
1a830 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
1a840 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d  ibrary has been.
1a850 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c  .    /// initial
1a860 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72  ized for the cur
1a870 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
1a880 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1a890 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1a8a0 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 74 61 74  static bool Stat
1a8b0 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
1a8c0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1a8d0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
1a8e0 20 42 55 47 46 49 58 3a 20 50 72 65 76 65 6e 74   BUGFIX: Prevent
1a8f0 20 72 61 63 65 73 20 77 69 74 68 20 6f 74 68 65   races with othe
1a900 72 20 74 68 72 65 61 64 73 20 66 6f 72 20 74 68  r threads for th
1a910 69 73 20 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c  is entire block,
1a920 20 64 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   due..        //
1a930 20 20 20 20 20 20 20 20 20 74 6f 20 74 68 65 20           to the 
1a940 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61  try/finally sema
1a950 6e 74 69 63 73 2e 20 20 53 65 65 20 74 69 63 6b  ntics.  See tick
1a960 65 74 20 5b 37 32 39 30 35 63 39 61 37 37 5d 2e  et [72905c9a77].
1a970 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
1a980 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
1a990 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  Root)..        {
1a9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1a9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1a9c0 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the 
1a9d0 73 74 61 74 65 20 6f 66 20 74 68 65 20 6c 6f 67  state of the log
1a9e0 67 69 6e 67 20 63 6c 61 73 73 20 61 6e 64 20 74  ging class and t
1a9f0 68 65 6e 20 72 65 73 74 6f 72 65 20 69 74 0d 0a  hen restore it..
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1aa10 20 20 20 20 20 61 66 74 65 72 20 77 65 20 61 72       after we ar
1aa20 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20  e done to avoid 
1aa30 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79  logging too many
1aa40 20 66 61 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a   false errors...
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1aa70 20 73 61 76 65 64 45 6e 61 62 6c 65 64 20 3d 20   savedEnabled = 
1aa80 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
1aa90 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
1aaa0 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
1aab0 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  d = false;....  
1aac0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
1aad0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1aaf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ab00 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
1ab10 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73 65 73 20  method [ab]uses 
1ab20 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51  the fact that SQ
1ab30 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  Lite will always
1ab40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ab50 20 20 2f 2f 20 20 20 20 20 20 20 72 65 74 75 72    //       retur
1ab60 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 66  n SQLITE_ERROR f
1ab70 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63  or any unknown c
1ab80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
1ab90 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
1aba0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 2a 75       //       *u
1abb0 6e 6c 65 73 73 2a 20 74 68 65 20 53 51 4c 69 74  nless* the SQLit
1abc0 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c  e library has al
1abd0 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69  ready been initi
1abe0 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20  alized...       
1abf0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1ac00 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 20 69    In that case i
1ac10 74 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 72 65  t will always re
1ac20 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
1ac30 53 45 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  SE...           
1ac40 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1ac50 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
1ac60 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
1ac70 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1ac80 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  s.sqlite3_config
1ac90 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  _none(..        
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1acb0 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e  teConfigOpsEnum.
1acc0 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f  SQLITE_CONFIG_NO
1acd0 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  NE);....        
1ace0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
1acf0 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
1ad00 72 43 6f 64 65 2e 4d 69 73 75 73 65 29 3b 0d 0a  rCode.Misuse);..
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1ad20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
1ad30 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
1ad40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ad50 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61     SQLiteLog.Ena
1ad60 62 6c 65 64 20 3d 20 73 61 76 65 64 45 6e 61 62  bled = savedEnab
1ad70 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  led;..          
1ad80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1ad90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1ada0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1adb0 2f 2f 2f 20 48 65 6c 70 65 72 20 66 75 6e 63 74  /// Helper funct
1adc0 69 6f 6e 20 74 6f 20 72 65 74 72 69 65 76 65 20  ion to retrieve 
1add0 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 64 61 74 61  a column of data
1ade0 20 66 72 6f 6d 20 61 6e 20 61 63 74 69 76 65 20   from an active 
1adf0 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20  statement...    
1ae00 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1ae10 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1ae20 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 73  ame="stmt">The s
1ae30 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 73  tatement being s
1ae40 74 65 70 28 29 27 64 20 74 68 72 6f 75 67 68 3c  tep()'d through<
1ae50 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1ae60 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c   <param name="fl
1ae70 61 67 73 22 3e 54 68 65 20 66 6c 61 67 73 20 61  ags">The flags a
1ae80 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1ae90 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f  he connection.</
1aea0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1aeb0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64  <param name="ind
1aec0 65 78 22 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 69  ex">The column i
1aed0 6e 64 65 78 20 74 6f 20 72 65 74 72 69 65 76 65  ndex to retrieve
1aee0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1aef0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
1af00 79 70 22 3e 54 68 65 20 74 79 70 65 20 6f 66 20  yp">The type of 
1af10 64 61 74 61 20 63 6f 6e 74 61 69 6e 65 64 20 69  data contained i
1af20 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49  n the column.  I
1af30 66 20 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 2c  f Uninitialized,
1af40 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77   this function w
1af50 69 6c 6c 20 72 65 74 72 69 65 76 65 20 74 68 65  ill retrieve the
1af60 20 64 61 74 61 74 79 70 65 20 69 6e 66 6f 72 6d   datatype inform
1af70 61 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ation.</param>..
1af80 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1af90 3e 52 65 74 75 72 6e 73 20 74 68 65 20 64 61 74  >Returns the dat
1afa0 61 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c  a in the column<
1afb0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
1afc0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1afd0 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65   object GetValue
1afe0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
1aff0 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
1b000 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
1b010 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 53  gs, int index, S
1b020 51 4c 69 74 65 54 79 70 65 20 74 79 70 29 0d 0a  QLiteType typ)..
1b030 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 54 79 70      {..      Typ
1b040 65 41 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20  eAffinity aff = 
1b050 74 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20  typ.Affinity;.. 
1b060 20 20 20 20 20 69 66 20 28 61 66 66 20 3d 3d 20       if (aff == 
1b070 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c  TypeAffinity.Nul
1b080 6c 29 20 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c  l) return DBNull
1b090 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54  .Value;..      T
1b0a0 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  ype t = null;...
1b0b0 0a 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54  .      if (typ.T
1b0c0 79 70 65 20 21 3d 20 44 62 54 79 70 65 2e 4f 62  ype != DbType.Ob
1b0d0 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  ject)..      {..
1b0e0 20 20 20 20 20 20 20 20 74 20 3d 20 53 51 4c 69          t = SQLi
1b0f0 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65  teConvert.SQLite
1b100 54 79 70 65 54 6f 54 79 70 65 28 74 79 70 29 3b  TypeToType(typ);
1b110 0d 0a 20 20 20 20 20 20 20 20 61 66 66 20 3d 20  ..        aff = 
1b120 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79 28 74  TypeToAffinity(t
1b130 2c 20 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20  , flags);..     
1b140 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28   }....      if (
1b150 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
1b160 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47  onnectionFlags.G
1b170 65 74 41 6c 6c 41 73 54 65 78 74 29 20 3d 3d 20  etAllAsText) == 
1b180 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1b190 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65  Flags.GetAllAsTe
1b1a0 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72  xt)..          r
1b1b0 65 74 75 72 6e 20 47 65 74 54 65 78 74 28 73 74  eturn GetText(st
1b1c0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
1b1d0 20 20 20 20 20 73 77 69 74 63 68 20 28 61 66 66       switch (aff
1b1e0 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
1b1f0 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
1b200 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20  inity.Blob:..   
1b210 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54         if (typ.T
1b220 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75  ype == DbType.Gu
1b230 69 64 20 26 26 20 74 79 70 2e 41 66 66 69 6e 69  id && typ.Affini
1b240 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69  ty == TypeAffini
1b250 74 79 2e 54 65 78 74 29 0d 0a 20 20 20 20 20 20  ty.Text)..      
1b260 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
1b270 20 47 75 69 64 28 47 65 74 54 65 78 74 28 73 74   Guid(GetText(st
1b280 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a  mt, index));....
1b290 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20            int n 
1b2a0 3d 20 28 69 6e 74 29 47 65 74 42 79 74 65 73 28  = (int)GetBytes(
1b2b0 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20  stmt, index, 0, 
1b2c0 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20  null, 0, 0);..  
1b2d0 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
1b2e0 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d   = new byte[n];.
1b2f0 0a 20 20 20 20 20 20 20 20 20 20 47 65 74 42 79  .          GetBy
1b300 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c  tes(stmt, index,
1b310 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d   0, b, 0, n);...
1b320 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
1b330 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70  yp.Type == DbTyp
1b340 65 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d 20 31  e.Guid && n == 1
1b350 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  6)..            
1b360 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28  return new Guid(
1b370 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
1b380 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20   return b;..    
1b390 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
1b3a0 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d  inity.DateTime:.
1b3b0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
1b3c0 6e 20 47 65 74 44 61 74 65 54 69 6d 65 28 73 74  n GetDateTime(st
1b3d0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
1b3e0 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
1b3f0 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
1b400 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
1b410 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
1b420 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20  GetDouble(stmt, 
1b430 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
1b440 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72     return Conver
1b450 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65 74  t.ChangeType(Get
1b460 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64  Double(stmt, ind
1b470 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a  ex), t, null);..
1b480 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
1b490 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a  eAffinity.Int64:
1b4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
1b4b0 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
1b4c0 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c  n GetInt64(stmt,
1b4d0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
1b4e0 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
1b4f0 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 20 72 65  eof(Boolean)) re
1b500 74 75 72 6e 20 47 65 74 42 6f 6f 6c 65 61 6e 28  turn GetBoolean(
1b510 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
1b520 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
1b530 3d 20 74 79 70 65 6f 66 28 53 42 79 74 65 29 29  = typeof(SByte))
1b540 20 72 65 74 75 72 6e 20 47 65 74 53 42 79 74 65   return GetSByte
1b550 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
1b560 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
1b570 3d 3d 20 74 79 70 65 6f 66 28 42 79 74 65 29 29  == typeof(Byte))
1b580 20 72 65 74 75 72 6e 20 47 65 74 42 79 74 65 28   return GetByte(
1b590 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
1b5a0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
1b5b0 3d 20 74 79 70 65 6f 66 28 49 6e 74 31 36 29 29  = typeof(Int16))
1b5c0 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 31 36   return GetInt16
1b5d0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
1b5e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
1b5f0 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 31 36  == typeof(UInt16
1b600 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e  )) return GetUIn
1b610 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t16(stmt, index)
1b620 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
1b630 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74  (t == typeof(Int
1b640 33 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 49  32)) return GetI
1b650 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
1b660 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
1b670 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
1b680 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20 47 65  nt32)) return Ge
1b690 74 55 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  tUInt32(stmt, in
1b6a0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
1b6b0 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
1b6c0 28 49 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20  (Int64)) return 
1b6d0 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
1b6e0 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
1b6f0 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
1b700 66 28 55 49 6e 74 36 34 29 29 20 72 65 74 75 72  f(UInt64)) retur
1b710 6e 20 47 65 74 55 49 6e 74 36 34 28 73 74 6d 74  n GetUInt64(stmt
1b720 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
1b730 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
1b740 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47  ert.ChangeType(G
1b750 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  etInt64(stmt, in
1b760 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d  dex), t, null);.
1b770 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74  .        default
1b780 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  :..          ret
1b790 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74  urn GetText(stmt
1b7a0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
1b7b0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
1b7c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1b7d0 64 65 20 69 6e 74 20 47 65 74 43 75 72 73 6f 72  de int GetCursor
1b7e0 46 6f 72 54 61 62 6c 65 28 53 51 4c 69 74 65 53  ForTable(SQLiteS
1b7f0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
1b800 6e 74 20 64 62 2c 20 69 6e 74 20 72 6f 6f 74 50  nt db, int rootP
1b810 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  age)..    {..#if
1b820 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
1b830 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  D..      return 
1b840 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1b850 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c  ods.sqlite3_tabl
1b860 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f 70  e_cursor_interop
1b870 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
1b880 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67 65  mt, db, rootPage
1b890 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
1b8a0 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e   return -1;..#en
1b8b0 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
1b8c0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1b8d0 69 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49  ide long GetRowI
1b8e0 64 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74  dForCursor(SQLit
1b8f0 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
1b900 20 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20 20   int cursor)..  
1b910 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
1b920 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
1b930 20 6c 6f 6e 67 20 72 6f 77 69 64 20 3d 20 30 3b   long rowid = 0;
1b940 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
1b950 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
1b960 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1b970 2e 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f  .sqlite3_cursor_
1b980 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 73 74  rowid_interop(st
1b990 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
1b9a0 20 63 75 72 73 6f 72 2c 20 72 65 66 20 72 6f 77   cursor, ref row
1b9b0 69 64 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  id);..      if (
1b9c0 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
1b9d0 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e  rCode.Ok) return
1b9e0 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20   rowid;....     
1b9f0 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73   return 0;..#els
1ba00 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
1ba10 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  0;..#endif..    
1ba20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1ba30 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
1ba40 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78  GetIndexColumnEx
1ba50 74 65 6e 64 65 64 49 6e 66 6f 28 73 74 72 69 6e  tendedInfo(strin
1ba60 67 20 64 61 74 61 62 61 73 65 2c 20 73 74 72 69  g database, stri
1ba70 6e 67 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  ng index, string
1ba80 20 63 6f 6c 75 6d 6e 2c 20 72 65 66 20 69 6e 74   column, ref int
1ba90 20 73 6f 72 74 4d 6f 64 65 2c 20 72 65 66 20 69   sortMode, ref i
1baa0 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20  nt onError, ref 
1bab0 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e  string collation
1bac0 53 65 71 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b  Sequence)..    {
1bad0 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
1bae0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e  ANDARD..      In
1baf0 74 50 74 72 20 63 6f 6c 6c 20 3d 20 49 6e 74 50  tPtr coll = IntP
1bb00 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
1bb10 69 6e 74 20 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b  int colllen = 0;
1bb20 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
1bb30 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20  rorCode rc;.... 
1bb40 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65       rc = Unsafe
1bb50 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1bb60 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75  lite3_index_colu
1bb70 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28  mn_info_interop(
1bb80 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74  _sql, ToUTF8(dat
1bb90 61 62 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69  abase), ToUTF8(i
1bba0 6e 64 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f  ndex), ToUTF8(co
1bbb0 6c 75 6d 6e 29 2c 20 72 65 66 20 73 6f 72 74 4d  lumn), ref sortM
1bbc0 6f 64 65 2c 20 72 65 66 20 6f 6e 45 72 72 6f 72  ode, ref onError
1bbd0 2c 20 72 65 66 20 63 6f 6c 6c 2c 20 72 65 66 20  , ref coll, ref 
1bbe0 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  colllen);..     
1bbf0 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74   if (rc != SQLit
1bc00 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
1bc10 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
1bc20 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c  xception(rc, nul
1bc30 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c  l);....      col
1bc40 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d  lationSequence =
1bc50 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f   UTF8ToString(co
1bc60 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23  ll, colllen);..#
1bc70 65 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f 72 74  else..      sort
1bc80 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20  Mode = 0;..     
1bc90 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20   onError = 2;.. 
1bca0 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65       collationSe
1bcb0 71 75 65 6e 63 65 20 3d 20 22 42 49 4e 41 52 59  quence = "BINARY
1bcc0 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  ";..#endif..    
1bcd0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1bce0 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
1bcf0 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43  eErrorCode FileC
1bd00 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44  ontrol(string zD
1bd10 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49  bName, int op, I
1bd20 6e 74 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20  ntPtr pArg)..   
1bd30 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
1bd40 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1bd50 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c  hods.sqlite3_fil
1bd60 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20  e_control(_sql, 
1bd70 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  (zDbName != null
1bd80 29 20 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61  ) ? ToUTF8(zDbNa
1bd90 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20  me) : null, op, 
1bda0 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  pArg);..    }.. 
1bdb0 20 7d 0d 0a 7d 0d 0a                              }..}..