System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact dc820da30482cf35bf465206145ed4dbee666212:


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 33 2e 30 22 3b 0d 0a 23   "1.0.103.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 6c 6f 6e 67 20 47 65 74 43 68 61 72  ide long GetChar
12590 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  s(SQLiteStatemen
125a0 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
125b0 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  x, int nDataOffs
125c0 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65 73 74  et, char[] bDest
125d0 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
125e0 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  t nLength)..    
125f0 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65  {..      int nle
12600 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43  n;..      int nC
12610 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b  opied = nLength;
12620 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  ....      string
12630 20 73 74 72 20 3d 20 47 65 74 54 65 78 74 28 73   str = GetText(s
12640 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
12650 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c      nlen = str.L
12660 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
12670 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c  if (bDest == nul
12680 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d  l) return nlen;.
12690 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ...      if (nCo
126a0 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20  pied + nStart > 
126b0 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43  bDest.Length) nC
126c0 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65  opied = bDest.Le
126d0 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a  ngth - nStart;..
126e0 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65        if (nCopie
126f0 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20  d + nDataOffset 
12700 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20  > nlen) nCopied 
12710 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66  = nlen - nDataOf
12720 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  fset;....      i
12730 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d  f (nCopied > 0).
12740 0a 20 20 20 20 20 20 20 20 73 74 72 2e 43 6f 70  .        str.Cop
12750 79 54 6f 28 6e 44 61 74 61 4f 66 66 73 65 74 2c  yTo(nDataOffset,
12760 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20   bDest, nStart, 
12770 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20  nCopied);..     
12780 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20 3d 20   else nCopied = 
12790 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  0;....      retu
127a0 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20  rn nCopied;..   
127b0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
127c0 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
127d0 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74   IsNull(SQLiteSt
127e0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
127f0 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
12800 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 43  .      return (C
12810 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74  olumnAffinity(st
12820 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20 54 79  mt, index) == Ty
12830 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29  peAffinity.Null)
12840 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
12850 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
12860 65 20 69 6e 74 20 41 67 67 72 65 67 61 74 65 43  e int AggregateC
12870 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  ount(IntPtr cont
12880 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ext)..    {..   
12890 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
128a0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
128b0 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
128c0 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d  count(context);.
128d0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
128e0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
128f0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
12900 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73  CreateFunction(s
12910 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f  tring strFunctio
12920 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f  n, int nArgs, bo
12930 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20  ol needCollSeq, 
12940 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
12950 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62  unc, SQLiteCallb
12960 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51  ack funcstep, SQ
12970 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63  LiteFinalCallbac
12980 6b 20 66 75 6e 63 66 69 6e 61 6c 2c 20 62 6f 6f  k funcfinal, boo
12990 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20  l canThrow)..   
129a0 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
129b0 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a  ErrorCode n;....
129c0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
129d0 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20  DARD..      n = 
129e0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
129f0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
12a00 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65  te_function_inte
12a10 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
12a20 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
12a30 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e  Args, 4, IntPtr.
12a40 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
12a50 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c  step, funcfinal,
12a60 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d   (needCollSeq ==
12a70 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b   true) ? 1 : 0);
12a80 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
12a90 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12aa0 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e  .Ok) n = UnsafeN
12ab0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12ac0 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
12ad0 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71  tion_interop(_sq
12ae0 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
12af0 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31  ction), nArgs, 1
12b00 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
12b10 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
12b20 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43  uncfinal, (needC
12b30 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20  ollSeq == true) 
12b40 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65  ? 1 : 0);..#else
12b50 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
12b60 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12b70 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
12b80 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  unction(_sql, To
12b90 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e  UTF8(strFunction
12ba0 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74  ), nArgs, 4, Int
12bb0 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20  Ptr.Zero, func, 
12bc0 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69  funcstep, funcfi
12bd0 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  nal);..      if 
12be0 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
12bf0 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e  rCode.Ok) n = Un
12c00 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12c10 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
12c20 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  _function(_sql, 
12c30 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
12c40 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49  on), nArgs, 1, I
12c50 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
12c60 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
12c70 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d  final);..#endif.
12c80 0a 20 20 20 20 20 20 69 66 20 28 63 61 6e 54 68  .      if (canTh
12c90 72 6f 77 20 26 26 20 28 6e 20 21 3d 20 53 51 4c  row && (n != SQL
12ca0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
12cb0 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
12cc0 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
12cd0 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
12ce0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b  .      return n;
12cf0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12d00 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12d10 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12d20 20 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e   CreateCollation
12d30 28 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61  (string strColla
12d40 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c  tion, SQLiteColl
12d50 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69  ation func, SQLi
12d60 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63  teCollation func
12d70 31 36 2c 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f  16, bool canThro
12d80 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  w)..    {..     
12d90 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12da0 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
12db0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12dc0 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
12dd0 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  n(_sql, ToUTF8(s
12de0 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c  trCollation), 2,
12df0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
12e00 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66  nc16);..      if
12e10 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
12e20 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55  orCode.Ok) n = U
12e30 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12e40 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
12e50 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c  e_collation(_sql
12e60 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c  , ToUTF8(strColl
12e70 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74  ation), 1, IntPt
12e80 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a  r.Zero, func);..
12e90 20 20 20 20 20 20 69 66 20 28 63 61 6e 54 68 72        if (canThr
12ea0 6f 77 20 26 26 20 28 6e 20 21 3d 20 53 51 4c 69  ow && (n != SQLi
12eb0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29  teErrorCode.Ok))
12ec0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
12ed0 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
12ee0 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
12ef0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
12f00 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
12f10 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12f20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  int ContextColla
12f30 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74  teCompare(Collat
12f40 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20  ionEncodingEnum 
12f50 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74  enc, IntPtr cont
12f60 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20  ext, string s1, 
12f70 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20  string s2)..    
12f80 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
12f90 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62  TANDARD..      b
12fa0 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20  yte[] b1;..     
12fb0 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20   byte[] b2;..   
12fc0 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45     System.Text.E
12fd0 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65  ncoding converte
12fe0 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
12ff0 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d     switch (enc).
13000 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
13010 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
13020 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
13030 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  8:..          co
13040 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
13050 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
13060 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8;..          
13070 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
13080 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e  case CollationEn
13090 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36  codingEnum.UTF16
130a0 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  LE:..          c
130b0 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
130c0 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
130d0 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
130e0 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
130f0 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
13100 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
13110 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20  TF16BE:..       
13120 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
13130 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
13140 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69  ing.BigEndianUni
13150 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  code;..         
13160 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
13170 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63  ....      b1 = c
13180 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65  onverter.GetByte
13190 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32  s(s1);..      b2
131a0 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74   = converter.Get
131b0 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20  Bytes(s2);....  
131c0 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
131d0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
131e0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
131f0 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72  ollcompare_inter
13200 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20  op(context, b1, 
13210 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62  b1.Length, b2, b
13220 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73  2.Length);..#els
13230 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
13240 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
13250 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
13260 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
13270 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
13280 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78  rride int Contex
13290 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28  tCollateCompare(
132a0 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
132b0 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74  gEnum enc, IntPt
132c0 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b  r context, char[
132d0 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32 29  ] c1, char[] c2)
132e0 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
132f0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
13300 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d       byte[] b1;.
13310 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32  .      byte[] b2
13320 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  ;..      System.
13330 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f  Text.Encoding co
13340 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d  nverter = null;.
13350 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20  ...      switch 
13360 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  (enc)..      {..
13370 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
13380 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
13390 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20  um.UTF8:..      
133a0 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
133b0 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
133c0 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20  ding.UTF8;..    
133d0 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
133e0 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
133f0 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
13400 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20  .UTF16LE:..     
13410 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
13420 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
13430 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a  oding.Unicode;..
13440 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
13450 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
13460 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
13470 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20  Enum.UTF16BE:.. 
13480 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
13490 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
134a0 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64  .Encoding.BigEnd
134b0 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ianUnicode;..   
134c0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
134d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
134e0 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47  b1 = converter.G
134f0 65 74 42 79 74 65 73 28 63 31 29 3b 0d 0a 20 20  etBytes(c1);..  
13500 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74      b2 = convert
13510 65 72 2e 47 65 74 42 79 74 65 73 28 63 32 29 3b  er.GetBytes(c2);
13520 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
13530 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13540 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
13550 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65  text_collcompare
13560 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
13570 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c  , b1, b1.Length,
13580 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b   b2, b2.Length);
13590 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
135a0 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
135b0 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
135c0 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
135d0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
135e0 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c  al override Coll
135f0 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65  ationSequence Ge
13600 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e  tCollationSequen
13610 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ce(SQLiteFunctio
13620 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63  n func, IntPtr c
13630 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
13640 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
13650 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c  DARD..      Coll
13660 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65  ationSequence se
13670 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f  q = new Collatio
13680 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20  nSequence();..  
13690 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
136a0 0d 0a 20 20 20 20 20 20 69 6e 74 20 74 79 70 65  ..      int type
136b0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74   = 0;..      int
136c0 20 65 6e 63 20 3d 20 30 3b 0d 0a 20 20 20 20 20   enc = 0;..     
136d0 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61   IntPtr p = Unsa
136e0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
136f0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
13700 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28  collseq_interop(
13710 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 74 79 70  context, ref typ
13720 65 2c 20 72 65 66 20 65 6e 63 2c 20 72 65 66 20  e, ref enc, ref 
13730 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  len);....      i
13740 66 20 28 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65  f (p != null) se
13750 71 2e 4e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53  q.Name = UTF8ToS
13760 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a  tring(p, len);..
13770 20 20 20 20 20 20 73 65 71 2e 54 79 70 65 20 3d        seq.Type =
13780 20 28 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45   (CollationTypeE
13790 6e 75 6d 29 74 79 70 65 3b 0d 0a 20 20 20 20 20  num)type;..     
137a0 20 73 65 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e   seq._func = fun
137b0 63 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 45 6e  c;..      seq.En
137c0 63 6f 64 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74  coding = (Collat
137d0 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29  ionEncodingEnum)
137e0 65 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  enc;....      re
137f0 74 75 72 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65  turn seq;..#else
13800 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
13810 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
13820 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
13830 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
13840 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13850 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72  ride long GetPar
13860 61 6d 56 61 6c 75 65 42 79 74 65 73 28 49 6e 74  amValueBytes(Int
13870 50 74 72 20 70 2c 20 69 6e 74 20 6e 44 61 74 61  Ptr p, int nData
13880 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62  Offset, byte[] b
13890 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74  Dest, int nStart
138a0 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a  , int nLength)..
138b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74      {..      int
138c0 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61   nlen = UnsafeNa
138d0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
138e0 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
138f0 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20  p);....      // 
13900 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f  If no destinatio
13910 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e  n buffer, return
13920 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64   the size needed
13930 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65  ...      if (bDe
13940 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  st == null) retu
13950 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20  rn nlen;....    
13960 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20    int nCopied = 
13970 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  nLength;....    
13980 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
13990 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c  nStart > bDest.L
139a0 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d  ength) nCopied =
139b0 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20   bDest.Length - 
139c0 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69  nStart;..      i
139d0 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61  f (nCopied + nDa
139e0 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29  taOffset > nlen)
139f0 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20   nCopied = nlen 
13a00 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a  - nDataOffset;..
13a10 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
13a20 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ied > 0)..      
13a30 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
13a40 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61  r ptr = UnsafeNa
13a50 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13a60 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 70  te3_value_blob(p
13a70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61  );....        Ma
13a80 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50  rshal.Copy((IntP
13a90 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28  tr)(ptr.ToInt64(
13aa0 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29  ) + nDataOffset)
13ab0 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c  , bDest, nStart,
13ac0 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20   nCopied);..    
13ad0 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d    }..      else.
13ae0 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
13af0 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a    nCopied = 0;..
13b00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
13b10 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b   return nCopied;
13b20 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
13b30 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
13b40 20 64 6f 75 62 6c 65 20 47 65 74 50 61 72 61 6d   double GetParam
13b50 56 61 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74 50  ValueDouble(IntP
13b60 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a  tr ptr)..    {..
13b70 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
13b80 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
13b90 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
13ba0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13bb0 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64  .sqlite3_value_d
13bc0 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c  ouble(ptr);..#el
13bd0 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
13be0 41 52 44 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c  ARD..      doubl
13bf0 65 20 76 61 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a  e value = 0.0;..
13c00 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
13c10 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13c20 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69  3_value_double_i
13c30 6e 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20  nterop(ptr, ref 
13c40 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72  value);..      r
13c50 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65  eturn value;..#e
13c60 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
13c70 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
13c80 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
13c90 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
13ca0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
13cb0 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 50  verride int GetP
13cc0 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49  aramValueInt32(I
13cd0 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
13ce0 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
13cf0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13d00 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
13d10 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20  e_int(ptr);..   
13d20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
13d30 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
13d40 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
13d50 74 36 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d  t64(IntPtr ptr).
13d60 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41  .    {..#if !PLA
13d70 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
13d80 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 72 65  MEWORK..      re
13d90 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
13da0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13db0 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 74 72  _value_int64(ptr
13dc0 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
13dd0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
13de0 20 20 49 6e 74 36 34 20 76 61 6c 75 65 20 3d 20    Int64 value = 
13df0 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  0;..      Unsafe
13e00 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13e10 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
13e20 34 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 72  4_interop(ptr, r
13e30 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ef value);..    
13e40 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
13e50 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
13e60 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
13e70 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
13e80 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
13e90 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13ea0 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
13eb0 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54  g GetParamValueT
13ec0 65 78 74 28 49 6e 74 50 74 72 20 70 74 72 29 0d  ext(IntPtr ptr).
13ed0 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
13ee0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
13ef0 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
13f00 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
13f10 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
13f20 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13f30 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
13f40 78 74 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20  xt_interop(ptr, 
13f50 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  ref len), len);.
13f60 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
13f70 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
13f80 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
13f90 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
13fa0 6c 75 65 5f 74 65 78 74 28 70 74 72 29 2c 0d 0a  lue_text(ptr),..
13fb0 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
13fc0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13fd0 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
13fe0 70 74 72 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ptr));..#endif..
13ff0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
14000 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54  ernal override T
14010 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74 50  ypeAffinity GetP
14020 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49 6e  aramValueType(In
14030 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
14040 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
14050 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14060 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
14070 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20 20 20  _type(ptr);..   
14080 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
14090 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
140a0 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50   ReturnBlob(IntP
140b0 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74 65  tr context, byte
140c0 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  [] value)..    {
140d0 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
140e0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
140f0 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28  te3_result_blob(
14100 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c 20  context, value, 
14110 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49  value.Length, (I
14120 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
14130 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
14140 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
14150 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 49  d ReturnDouble(I
14160 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 64  ntPtr context, d
14170 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20  ouble value)..  
14180 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
14190 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
141a0 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  ORK..      Unsaf
141b0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
141c0 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
141d0 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76 61  uble(context, va
141e0 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
141f0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
14200 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
14210 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
14220 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69  _result_double_i
14230 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20  nterop(context, 
14240 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
14250 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
14260 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
14270 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
14280 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
14290 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
142a0 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
142b0 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20 63  rnError(IntPtr c
142c0 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76  ontext, string v
142d0 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
142e0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
142f0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14300 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e  result_error(con
14310 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c  text, ToUTF8(val
14320 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  ue), value.Lengt
14330 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  h);..    }....  
14340 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
14350 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49  ide void ReturnI
14360 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74  nt32(IntPtr cont
14370 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d  ext, int value).
14380 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
14390 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
143a0 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
143b0 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76 61  _int(context, va
143c0 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lue);..    }....
143d0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
143e0 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
143f0 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63 6f  nInt64(IntPtr co
14400 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75  ntext, long valu
14410 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
14420 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
14430 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
14440 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14450 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
14460 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78  ult_int64(contex
14470 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69  t, value);..#eli
14480 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
14490 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RD..      Unsafe
144a0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
144b0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
144c0 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  64_interop(conte
144d0 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  xt, ref value);.
144e0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
144f0 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
14500 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
14510 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
14520 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
14530 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
14540 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74  ReturnNull(IntPt
14550 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
14560 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
14570 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
14580 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c  ite3_result_null
14590 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20  (context);..    
145a0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
145b0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
145c0 52 65 74 75 72 6e 54 65 78 74 28 49 6e 74 50 74  ReturnText(IntPt
145d0 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
145e0 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
145f0 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20  .      byte[] b 
14600 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b  = ToUTF8(value);
14610 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
14620 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
14630 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
14640 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28  context, ToUTF8(
14650 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68  value), b.Length
14660 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d   - 1, (IntPtr)(-
14670 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23  1));..    }....#
14680 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  if INTEROP_VIRTU
14690 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f  AL_TABLE..    //
146a0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
146b0 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
146c0 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 66  the file name of
146d0 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72   the native libr
146e0 61 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ary containing t
146f0 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f  he native..    /
14700 2f 2f 20 22 76 74 73 68 69 6d 22 20 65 78 74 65  // "vtshim" exte
14710 6e 73 69 6f 6e 20 2d 41 4e 44 2d 20 77 68 65 74  nsion -AND- whet
14720 68 65 72 20 69 74 20 73 68 6f 75 6c 64 20 62 65  her it should be
14730 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 6c 6f 61   dynamically loa
14740 64 65 64 20 62 79 0d 0a 20 20 20 20 2f 2f 2f 20  ded by..    /// 
14750 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20  this class...   
14760 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
14770 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
14780 6e 61 6d 65 3d 22 69 73 4c 6f 61 64 4e 65 65 64  name="isLoadNeed
14790 65 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ed">..    /// Th
147a0 69 73 20 6f 75 74 70 75 74 20 70 61 72 61 6d 65  is output parame
147b0 74 65 72 20 77 69 6c 6c 20 62 65 20 73 65 74 20  ter will be set 
147c0 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  to non-zero if t
147d0 68 65 20 72 65 74 75 72 6e 65 64 20 6e 61 74 69  he returned nati
147e0 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69 62 72  ve..    /// libr
147f0 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 20 73 68  ary file name sh
14800 6f 75 6c 64 20 62 65 20 64 79 6e 61 6d 69 63 61  ould be dynamica
14810 6c 6c 79 20 6c 6f 61 64 65 64 20 70 72 69 6f 72  lly loaded prior
14820 20 74 6f 20 61 74 74 65 6d 70 74 69 6e 67 0d 0a   to attempting..
14830 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 72 65 61      /// the crea
14840 74 69 6f 6e 20 6f 66 20 6e 61 74 69 76 65 20 64  tion of native d
14850 69 73 70 6f 73 61 62 6c 65 20 65 78 74 65 6e 73  isposable extens
14860 69 6f 6e 20 6d 6f 64 75 6c 65 73 2e 0d 0a 20 20  ion modules...  
14870 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
14880 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
14890 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
148a0 69 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ile name of the 
148b0 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 63  native library c
148c0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6e 61  ontaining the na
148d0 74 69 76 65 20 22 76 74 73 68 69 6d 22 0d 0a 20  tive "vtshim".. 
148e0 20 20 20 2f 2f 2f 20 65 78 74 65 6e 73 69 6f 6e     /// extension
148f0 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74   -OR- null if it
14900 20 63 61 6e 6e 6f 74 20 62 65 20 64 65 74 65 72   cannot be deter
14910 6d 69 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  mined...    /// 
14920 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
14930 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 47  private string G
14940 65 74 53 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46  etShimExtensionF
14950 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  ileName(..      
14960 20 20 72 65 66 20 62 6f 6f 6c 20 69 73 4c 6f 61    ref bool isLoa
14970 64 4e 65 65 64 65 64 20 2f 2a 20 6f 75 74 20 2a  dNeeded /* out *
14980 2f 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  /..        )..  
14990 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
149a0 28 5f 73 68 69 6d 49 73 4c 6f 61 64 4e 65 65 64  (_shimIsLoadNeed
149b0 65 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ed != null)..   
149c0 20 20 20 20 20 20 20 20 20 69 73 4c 6f 61 64 4e           isLoadN
149d0 65 65 64 65 64 20 3d 20 28 62 6f 6f 6c 29 5f 73  eeded = (bool)_s
149e0 68 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65 64 3b  himIsLoadNeeded;
149f0 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
14a00 23 69 66 20 53 51 4c 49 54 45 5f 53 54 41 4e 44  #if SQLITE_STAND
14a10 41 52 44 20 7c 7c 20 55 53 45 5f 49 4e 54 45 52  ARD || USE_INTER
14a20 4f 50 5f 44 4c 4c 20 7c 7c 20 50 4c 41 54 46 4f  OP_DLL || PLATFO
14a30 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
14a40 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
14a50 20 69 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20   isLoadNeeded = 
14a60 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 49 73  HelperMethods.Is
14a70 57 69 6e 64 6f 77 73 28 29 3b 20 2f 2a 20 43 4f  Windows(); /* CO
14a80 4d 50 41 54 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a  MPAT */..#else..
14a90 20 20 20 20 20 20 20 20 20 20 20 20 69 73 4c 6f              isLo
14aa0 61 64 4e 65 65 64 65 64 20 3d 20 66 61 6c 73 65  adNeeded = false
14ab0 3b 20 2f 2a 20 6d 69 78 65 64 2d 6d 6f 64 65 20  ; /* mixed-mode 
14ac0 61 73 73 65 6d 62 6c 79 20 2a 2f 0d 0a 23 65 6e  assembly */..#en
14ad0 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  dif....        s
14ae0 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d  tring fileName =
14af0 20 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46   _shimExtensionF
14b00 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
14b10 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65      if (fileName
14b20 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
14b30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 69         return fi
14b40 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 28  leName;....#if (
14b50 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20  SQLITE_STANDARD 
14b60 7c 7c 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44  || USE_INTEROP_D
14b70 4c 4c 20 7c 7c 20 50 4c 41 54 46 4f 52 4d 5f 43  LL || PLATFORM_C
14b80 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 29  OMPACTFRAMEWORK)
14b90 20 26 26 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49   && PRELOAD_NATI
14ba0 56 45 5f 4c 49 42 52 41 52 59 0d 0a 20 20 20 20  VE_LIBRARY..    
14bb0 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
14bc0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47  eNativeMethods.G
14bd0 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46  etNativeLibraryF
14be0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 28 29 3b 20 2f  ileNameOnly(); /
14bf0 2a 20 43 4f 4d 50 41 54 20 2a 2f 0d 0a 23 65 6c  * COMPAT */..#el
14c00 73 65 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  se..        retu
14c10 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66  rn null;..#endif
14c20 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
14c30 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
14c40 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
14c50 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f  native SQLite co
14c60 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72  re library in or
14c70 64 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  der to create a 
14c80 64 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20  disposable..    
14c90 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61  /// module conta
14ca0 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d  ining the implem
14cb0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69  entation of a vi
14cc0 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20  rtual table...  
14cd0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
14ce0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
14cf0 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
14d00 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64  .    /// The mod
14d10 75 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20 62 65  ule object to be
14d20 20 75 73 65 64 20 77 68 65 6e 20 63 72 65 61 74   used when creat
14d30 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 64  ing the native d
14d40 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75 6c 65  isposable module
14d50 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
14d60 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
14d70 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
14d80 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
14d90 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73  lags for the ass
14da0 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63 72 65  ociated <see cre
14db0 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  f="SQLiteConnect
14dc0 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ion" /> object i
14dd0 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f  nstance...    //
14de0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
14df0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
14e00 65 20 76 6f 69 64 20 43 72 65 61 74 65 4d 6f 64  e void CreateMod
14e10 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ule(SQLiteModule
14e20 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43   module, SQLiteC
14e30 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
14e40 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lags)..    {..  
14e50 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
14e60 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
14e70 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
14e80 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
14e90 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29  eption("module")
14ea0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
14eb0 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
14ec0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
14ed0 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 29 20 21 3d 20  NoLogModule) != 
14ee0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
14ef0 46 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c  Flags.NoLogModul
14f00 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
14f10 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
14f20 65 2e 4c 6f 67 45 72 72 6f 72 73 20 3d 20 28 28  e.LogErrors = ((
14f30 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
14f40 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
14f50 67 4d 6f 64 75 6c 65 45 72 72 6f 72 29 20 3d 3d  gModuleError) ==
14f60 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
14f70 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65  nFlags.LogModule
14f80 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  Error);..       
14f90 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45       module.LogE
14fa0 78 63 65 70 74 69 6f 6e 73 20 3d 20 28 28 66 6c  xceptions = ((fl
14fb0 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
14fc0 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d  ectionFlags.LogM
14fd0 6f 64 75 6c 65 45 78 63 65 70 74 69 6f 6e 29 20  oduleException) 
14fe0 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
14ff0 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75  ionFlags.LogModu
15000 6c 65 45 78 63 65 70 74 69 6f 6e 29 3b 0d 0a 20  leException);.. 
15010 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
15020 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20      if (_sql == 
15030 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15040 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
15050 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 63 6f  iteException("co
15060 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
15070 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 29  invalid handle")
15080 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  ;....        boo
15090 6c 20 69 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d  l isLoadNeeded =
150a0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
150b0 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
150c0 20 3d 20 47 65 74 53 68 69 6d 45 78 74 65 6e 73   = GetShimExtens
150d0 69 6f 6e 46 69 6c 65 4e 61 6d 65 28 72 65 66 20  ionFileName(ref 
150e0 69 73 4c 6f 61 64 4e 65 65 64 65 64 29 3b 0d 0a  isLoadNeeded);..
150f0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 73  ..        if (is
15100 4c 6f 61 64 4e 65 65 64 65 64 29 0d 0a 20 20 20  LoadNeeded)..   
15110 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15120 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65      if (fileName
15130 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15140 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
15150 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
15160 74 69 6f 6e 28 22 74 68 65 20 66 69 6c 65 20 6e  tion("the file n
15170 61 6d 65 20 66 6f 72 20 74 68 65 20 5c 22 76 74  ame for the \"vt
15180 73 68 69 6d 5c 22 20 65 78 74 65 6e 73 69 6f 6e  shim\" extension
15190 20 69 73 20 75 6e 6b 6e 6f 77 6e 22 29 3b 0d 0a   is unknown");..
151a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
151b0 20 28 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e   (_shimExtension
151c0 50 72 6f 63 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  ProcName == null
151d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
151e0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
151f0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 74 68  iteException("th
15200 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 66 6f  e entry point fo
15210 72 20 74 68 65 20 5c 22 76 74 73 68 69 6d 5c 22  r the \"vtshim\"
15220 20 65 78 74 65 6e 73 69 6f 6e 20 69 73 20 75 6e   extension is un
15230 6b 6e 6f 77 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  known");....    
15240 20 20 20 20 20 20 20 20 53 65 74 4c 6f 61 64 45          SetLoadE
15250 78 74 65 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d  xtension(true);.
15260 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 61  .            Loa
15270 64 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e  dExtension(fileN
15280 61 6d 65 2c 20 5f 73 68 69 6d 45 78 74 65 6e 73  ame, _shimExtens
15290 69 6f 6e 50 72 6f 63 4e 61 6d 65 29 3b 0d 0a 20  ionProcName);.. 
152a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
152b0 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 2e 43      if (module.C
152c0 72 65 61 74 65 44 69 73 70 6f 73 61 62 6c 65 4d  reateDisposableM
152d0 6f 64 75 6c 65 28 5f 73 71 6c 29 29 0d 0a 20 20  odule(_sql))..  
152e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
152f0 20 20 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65       if (_module
15300 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
15310 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64              _mod
15320 75 6c 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69  ules = new Dicti
15330 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51  onary<string, SQ
15340 4c 69 74 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a  LiteModule>();..
15350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d  ..            _m
15360 6f 64 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c  odules.Add(modul
15370 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b  e.Name, module);
15380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15390 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20  if (_usePool).. 
153a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
153b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 75                _u
153c0 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d  sePool = false;.
153d0 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
153e0 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
153f0 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
15400 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
15410 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70  e.WriteLine(Help
15420 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
15430 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
15440 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
15450 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
15460 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
15480 72 65 61 74 65 4d 6f 64 75 6c 65 20 28 50 6f 6f  reateModule (Poo
15490 6c 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d  l) Disabled: {0}
154a0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
154b0 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f          HandleTo
154c0 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e  String()));..#en
154d0 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
154e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
154f0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
15500 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15510 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
15520 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65  LiteException(Ge
15530 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
15540 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
15550 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
15560 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
15570 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
15580 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
15590 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
155a0 63 6c 65 61 6e 75 70 20 74 68 65 20 72 65 73 6f  cleanup the reso
155b0 75 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61  urces..    /// a
155c0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
155d0 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69   module containi
155e0 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  ng the implement
155f0 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75  ation of a virtu
15600 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  al table...    /
15610 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
15620 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
15630 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
15640 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65    /// The module
15650 20 6f 62 6a 65 63 74 20 70 72 65 76 69 6f 75 73   object previous
15660 6c 79 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  ly passed to the
15670 20 3c 73 65 65 20 63 72 65 66 3d 22 43 72 65 61   <see cref="Crea
15680 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20  teModule" />..  
15690 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20    /// method... 
156a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
156b0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
156c0 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20  name="flags">.. 
156d0 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73     /// The flags
156e0 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61   for the associa
156f0 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ted <see cref="S
15700 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22  QLiteConnection"
15710 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
15720 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nce...    /// </
15730 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
15740 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
15750 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65  id DisposeModule
15760 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f  (SQLiteModule mo
15770 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  dule, SQLiteConn
15780 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
15790 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
157a0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d     if (module ==
157b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
157c0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
157d0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
157e0 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a  ion("module");..
157f0 0d 0a 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65  ..        module
15800 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
15810 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
15820 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
15830 69 64 65 20 49 6e 74 50 74 72 20 41 67 67 72 65  ide IntPtr Aggre
15840 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50  gateContext(IntP
15850 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20  tr context)..   
15860 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
15870 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
15880 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67  hods.sqlite3_agg
15890 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63  regate_context(c
158a0 6f 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20  ontext, 1);..   
158b0 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f   }....#if INTERO
158c0 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
158d0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
158e0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c  y>..    /// Call
158f0 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c  s the native SQL
15900 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
15910 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63   in order to dec
15920 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c 20 74  lare a virtual t
15930 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  able..    /// in
15940 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63   response to a c
15950 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65  all into the <se
15960 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
15970 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65  ativeModule.xCre
15980 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  ate" />..    ///
15990 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49   or <see cref="I
159a0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
159b0 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  le.xConnect" /> 
159c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65  virtual table me
159d0 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  thods...    /// 
159e0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
159f0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
15a00 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f  "module">..    /
15a10 2f 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20 74  // The virtual t
15a20 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74  able module that
15a30 20 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e   is to be respon
15a40 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69  sible for the vi
15a50 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
15a60 20 2f 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c 61   /// being decla
15a70 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
15a80 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
15a90 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72  <param name="str
15aa0 53 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  Sql">..    /// T
15ab0 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  he string contai
15ac0 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
15ad0 74 65 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e  tement describin
15ae0 67 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  g the virtual ta
15af0 62 6c 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20  ble to..    /// 
15b00 62 65 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  be declared...  
15b10 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
15b20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
15b30 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20  ame="error">..  
15b40 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
15b50 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  ss, the contents
15b60 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74   of this paramet
15b70 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  er are undefined
15b80 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c  .  Upon failure,
15b90 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f  ..    /// it sho
15ba0 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61  uld contain an a
15bb0 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72  ppropriate error
15bc0 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f   message...    /
15bd0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
15be0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
15bf0 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
15c00 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
15c10 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20   code...    /// 
15c20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
15c30 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
15c40 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
15c50 65 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c  e DeclareVirtual
15c60 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  Table(..        
15c70 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
15c80 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ule,..        st
15c90 72 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20  ring strSql,..  
15ca0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
15cb0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
15cc0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
15cd0 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
15ce0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ll)..        {..
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
15d00 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20  r = "connection 
15d10 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
15d20 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20  andle";..       
15d30 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
15d40 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
15d50 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  r;..        }...
15d60 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
15d70 70 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65  pSql = IntPtr.Ze
15d80 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
15d90 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
15da0 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20             pSql 
15db0 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
15dc0 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
15dd0 69 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a  ing(strSql);....
15de0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
15df0 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
15e00 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
15e10 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c  ods.sqlite3_decl
15e20 61 72 65 5f 76 74 61 62 28 0d 0a 20 20 20 20 20  are_vtab(..     
15e30 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c             _sql,
15e40 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20   pSql);....     
15e50 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d         if ((n ==
15e60 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
15e70 2e 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65 20  .Ok) && (module 
15e80 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  != null))..     
15e90 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
15ea0 65 2e 44 65 63 6c 61 72 65 64 20 3d 20 74 72 75  e.Declared = tru
15eb0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
15ec0 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
15ed0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65  eErrorCode.Ok) e
15ee0 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72  rror = GetLastEr
15ef0 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ror();....      
15f00 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
15f10 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
15f20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
15f30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15f40 20 20 20 20 69 66 20 28 70 53 71 6c 20 21 3d 20      if (pSql != 
15f50 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
15f60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
15f80 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
15f90 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  Sql);..         
15fa0 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20 49 6e         pSql = In
15fb0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
15fc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
15fd0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
15fe0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
15ff0 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20  ..    /// Calls 
16000 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74  the native SQLit
16010 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
16020 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61  n order to decla
16030 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  re a virtual tab
16040 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  le..    /// func
16050 74 69 6f 6e 20 69 6e 20 72 65 73 70 6f 6e 73 65  tion in response
16060 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20   to a call into 
16070 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
16080 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
16090 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a  le.xCreate" />..
160a0 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20      /// or <see 
160b0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
160c0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65  iveModule.xConne
160d0 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74  ct" /> virtual t
160e0 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20  able methods... 
160f0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
16100 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
16110 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e  m name="module">
16120 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69  ..    /// The vi
16130 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
16140 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65  le that is to be
16150 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
16160 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
16170 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  le..    /// func
16180 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61  tion being decla
16190 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
161a0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
161b0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
161c0 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20  umentCount">..  
161d0 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
161e0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
161f0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65   the function be
16200 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
16210 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
16220 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
16230 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20  name="name">..  
16240 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f    /// The name o
16250 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62  f the function b
16260 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a  eing declared...
16270 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
16280 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
16290 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a   name="error">..
162a0 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
162b0 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e  cess, the conten
162c0 74 73 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d  ts of this param
162d0 65 74 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e  eter are undefin
162e0 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72  ed.  Upon failur
162f0 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73  e,..    /// it s
16300 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e  hould contain an
16310 20 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72   appropriate err
16320 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20  or message...   
16330 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
16340 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
16350 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e  ..    /// A stan
16360 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
16370 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  rn code...    //
16380 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
16390 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
163a0 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
163b0 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72 74 75  ode DeclareVirtu
163c0 61 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  alFunction(..   
163d0 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
163e0 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,..     
163f0 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43     int argumentC
16400 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 73  ount,..        s
16410 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
16420 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
16430 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29  error..        )
16440 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
16450 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
16460 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
16470 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
16480 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68   = "connection h
16490 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
164a0 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  ndle";..        
164b0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
164c0 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
164d0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
164e0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
164f0 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65  Name = IntPtr.Ze
16500 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ro;....        t
16510 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
16520 20 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65             pName
16530 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
16540 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
16550 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20  ring(name);.... 
16560 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16570 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
16580 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
16590 64 73 2e 73 71 6c 69 74 65 33 5f 6f 76 65 72 6c  ds.sqlite3_overl
165a0 6f 61 64 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a 20  oad_function(.. 
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
165c0 73 71 6c 2c 20 70 4e 61 6d 65 2c 20 61 72 67 75  sql, pName, argu
165d0 6d 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  mentCount);.... 
165e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
165f0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
16600 6f 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20  ode.Ok) error = 
16610 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d  GetLastError();.
16620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
16630 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20  eturn n;..      
16640 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
16650 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
16660 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
16670 28 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72  (pName != IntPtr
16680 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
16690 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
166a0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
166b0 6f 72 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b  ory.Free(pName);
166c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
166d0 20 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72    pName = IntPtr
166e0 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
166f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
16700 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
16710 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
16720 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e  ary>..    /// En
16730 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65  ables or disable
16740 73 20 61 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  s a configuratio
16750 6e 20 6f 70 74 69 6f 6e 20 66 6f 72 20 74 68 65  n option for the
16760 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...    
16770 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  /// connection..
16780 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
16790 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
167a0 72 61 6d 20 6e 61 6d 65 3d 22 6f 70 74 69 6f 6e  ram name="option
167b0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
167c0 64 61 74 61 62 61 73 65 20 63 6f 6e 66 69 67 75  database configu
167d0 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 20 74 6f  ration option to
167e0 20 65 6e 61 62 6c 65 20 6f 72 20 64 69 73 61 62   enable or disab
167f0 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  le...    /// </p
16800 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
16810 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f  param name="bOnO
16820 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72  ff">..    /// Tr
16830 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61  ue to enable loa
16840 64 69 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f  ding of extensio
16850 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73  ns, false to dis
16860 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
16870 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
16880 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
16890 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
168a0 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
168b0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
168c0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
168d0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
168e0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65  LiteErrorCode Se
168f0 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 4f 70  tConfigurationOp
16900 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53  tion(..        S
16910 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73  QLiteConfigDbOps
16920 45 6e 75 6d 20 6f 70 74 69 6f 6e 2c 0d 0a 20 20  Enum option,..  
16930 20 20 20 20 20 20 62 6f 6f 6c 20 62 4f 6e 4f 66        bool bOnOf
16940 66 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  f..        )..  
16950 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
16960 28 28 6f 70 74 69 6f 6e 20 3c 20 53 51 4c 69 74  ((option < SQLit
16970 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
16980 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47  .SQLITE_DBCONFIG
16990 5f 45 4e 41 42 4c 45 5f 46 4b 45 59 29 20 7c 7c  _ENABLE_FKEY) ||
169a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6f  ..            (o
169b0 70 74 69 6f 6e 20 3e 20 53 51 4c 69 74 65 43 6f  ption > SQLiteCo
169c0 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51  nfigDbOpsEnum.SQ
169d0 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e  LITE_DBCONFIG_EN
169e0 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  ABLE_LOAD_EXTENS
169f0 49 4f 4e 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ION))..        {
16a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
16a10 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
16a20 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65  ception(HelperMe
16a30 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
16a40 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
16a50 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
16a60 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
16a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16a80 20 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 63    "unsupported c
16a90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
16aa0 69 6f 6e 2c 20 6d 75 73 74 20 62 65 3a 20 7b 30  ion, must be: {0
16ab0 7d 2c 20 7b 31 7d 2c 20 7b 32 7d 2c 20 6f 72 20  }, {1}, {2}, or 
16ac0 7b 33 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {3}",..         
16ad0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
16ae0 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
16af0 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41  ITE_DBCONFIG_ENA
16b00 42 4c 45 5f 46 4b 45 59 2c 0d 0a 20 20 20 20 20  BLE_FKEY,..     
16b10 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16b20 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
16b30 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47  .SQLITE_DBCONFIG
16b40 5f 45 4e 41 42 4c 45 5f 54 52 49 47 47 45 52 2c  _ENABLE_TRIGGER,
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 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 2c 0d 0a  TS3_TOKENIZER,..
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bb0 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70  SQLiteConfigDbOp
16bc0 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43  sEnum.SQLITE_DBC
16bd0 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 4c 4f 41  ONFIG_ENABLE_LOA
16be0 44 5f 45 58 54 45 4e 53 49 4f 4e 29 29 3b 0d 0a  D_EXTENSION));..
16bf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16c00 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20       int result 
16c10 3d 20 30 3b 20 2f 2a 20 4e 4f 54 20 55 53 45 44  = 0; /* NOT USED
16c20 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72   */....        r
16c30 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
16c40 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
16c50 33 5f 64 62 5f 63 6f 6e 66 69 67 5f 69 6e 74 5f  3_db_config_int_
16c60 72 65 66 69 6e 74 28 0d 0a 20 20 20 20 20 20 20  refint(..       
16c70 20 20 20 20 20 5f 73 71 6c 2c 20 6f 70 74 69 6f       _sql, optio
16c80 6e 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 31 20 3a  n, (bOnOff ? 1 :
16c90 20 30 29 2c 20 72 65 66 20 72 65 73 75 6c 74 29   0), ref result)
16ca0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
16cb0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
16cc0 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f     /// Enables o
16cd0 72 20 64 69 73 61 62 6c 65 73 20 65 78 74 65 6e  r disables exten
16ce0 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20  sion loading by 
16cf0 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f  SQLite...    ///
16d00 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
16d10 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
16d20 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20  ="bOnOff">..    
16d30 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62  /// True to enab
16d40 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78  le loading of ex
16d50 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20  tensions, false 
16d60 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20  to disable...   
16d70 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
16d80 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
16d90 72 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f 61  ride void SetLoa
16da0 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20  dExtension(bool 
16db0 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a  bOnOff)..    {..
16dc0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
16dd0 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20  rorCode n;....  
16de0 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65        if (SQLite
16df0 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d  VersionNumber >=
16e00 20 33 30 31 33 30 30 30 29 0d 0a 20 20 20 20 20   3013000)..     
16e10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16e20 20 20 6e 20 3d 20 53 65 74 43 6f 6e 66 69 67 75    n = SetConfigu
16e30 72 61 74 69 6f 6e 4f 70 74 69 6f 6e 28 0d 0a 20  rationOption(.. 
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
16e50 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73  QLiteConfigDbOps
16e60 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f  Enum.SQLITE_DBCO
16e70 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44  NFIG_ENABLE_LOAD
16e80 5f 45 58 54 45 4e 53 49 4f 4e 2c 0d 0a 20 20 20  _EXTENSION,..   
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 62 4f 6e               bOn
16ea0 4f 66 66 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  Off);..        }
16eb0 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
16ec0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16ed0 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
16ee0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
16ef0 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f  qlite3_enable_lo
16f00 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20  ad_extension(.. 
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
16f20 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d  sql, (bOnOff ? -
16f30 31 20 3a 20 30 29 29 3b 0d 0a 20 20 20 20 20 20  1 : 0));..      
16f40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
16f50 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
16f60 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
16f70 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
16f80 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
16f90 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d  Error());..    }
16fa0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
16fb0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c  mary>..    /// L
16fc0 6f 61 64 73 20 61 20 53 51 4c 69 74 65 20 65 78  oads a SQLite ex
16fd0 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 20  tension library 
16fe0 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 66  from the named f
16ff0 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ile...    /// </
17000 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
17010 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
17020 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f  ileName">..    /
17030 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
17040 68 65 20 64 79 6e 61 6d 69 63 20 6c 69 6e 6b 20  he dynamic link 
17050 6c 69 62 72 61 72 79 20 66 69 6c 65 20 63 6f 6e  library file con
17060 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65  taining the exte
17070 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  nsion...    /// 
17080 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
17090 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
170a0 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f  rocName">..    /
170b0 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
170c0 68 65 20 65 78 70 6f 72 74 65 64 20 66 75 6e 63  he exported func
170d0 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 69 6e 69  tion used to ini
170e0 74 69 61 6c 69 7a 65 20 74 68 65 20 65 78 74 65  tialize the exte
170f0 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  nsion...    /// 
17100 49 66 20 6e 75 6c 6c 2c 20 74 68 65 20 64 65 66  If null, the def
17110 61 75 6c 74 20 22 73 71 6c 69 74 65 33 5f 65 78  ault "sqlite3_ex
17120 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 22 20 77 69  tension_init" wi
17130 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20  ll be used...   
17140 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
17150 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
17160 72 69 64 65 20 76 6f 69 64 20 4c 6f 61 64 45 78  ride void LoadEx
17170 74 65 6e 73 69 6f 6e 28 73 74 72 69 6e 67 20 66  tension(string f
17180 69 6c 65 4e 61 6d 65 2c 20 73 74 72 69 6e 67 20  ileName, string 
17190 70 72 6f 63 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  procName)..    {
171a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 69  ..        if (fi
171b0 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d  leName == null).
171c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
171d0 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
171e0 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 69  ullException("fi
171f0 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20  leName");....   
17200 20 20 20 20 20 49 6e 74 50 74 72 20 70 45 72 72       IntPtr pErr
17210 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  or = IntPtr.Zero
17220 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
17230 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
17240 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
17250 75 74 66 38 46 69 6c 65 4e 61 6d 65 20 3d 20 55  utf8FileName = U
17260 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  TF8Encoding.UTF8
17270 2e 47 65 74 42 79 74 65 73 28 66 69 6c 65 4e 61  .GetBytes(fileNa
17280 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 20 20 20  me + '\0');..   
17290 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
172a0 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 6e  utf8ProcName = n
172b0 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
172c0 20 20 20 20 69 66 20 28 70 72 6f 63 4e 61 6d 65      if (procName
172d0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
172e0 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 50             utf8P
172f0 72 6f 63 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e  rocName = UTF8En
17300 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42  coding.UTF8.GetB
17310 79 74 65 73 28 70 72 6f 63 4e 61 6d 65 20 2b 20  ytes(procName + 
17320 27 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  '\0');....      
17330 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
17340 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
17350 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
17360 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
17370 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
17380 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 75 74 66         _sql, utf
17390 38 46 69 6c 65 4e 61 6d 65 2c 20 75 74 66 38 50  8FileName, utf8P
173a0 72 6f 63 4e 61 6d 65 2c 20 72 65 66 20 70 45 72  rocName, ref pEr
173b0 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
173c0 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
173d0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
173e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
173f0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
17400 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
17410 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 45 72  UTF8ToString(pEr
17420 72 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20  ror, -1));..    
17430 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
17440 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
17450 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
17460 66 20 28 70 45 72 72 6f 72 20 21 3d 20 49 6e 74  f (pError != Int
17470 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
17480 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17490 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
174a0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
174b0 6c 69 74 65 33 5f 66 72 65 65 28 70 45 72 72 6f  lite3_free(pErro
174c0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
174d0 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 49 6e       pError = In
174e0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
174f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17500 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
17510 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f     /// Enables o
17520 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e  r disabled exten
17530 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73  ded result codes
17540 20 72 65 74 75 72 6e 65 64 20 62 79 20 53 51 4c   returned by SQL
17550 69 74 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ite..    interna
17560 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
17570 53 65 74 45 78 74 65 6e 64 65 64 52 65 73 75 6c  SetExtendedResul
17580 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f  tCodes(bool bOnO
17590 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ff)..    {..    
175a0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
175b0 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
175c0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
175d0 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c  3_extended_resul
175e0 74 5f 63 6f 64 65 73 28 0d 0a 20 20 20 20 20 20  t_codes(..      
175f0 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66      _sql, (bOnOf
17600 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d  f ? -1 : 0));...
17610 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
17620 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
17630 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
17640 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
17650 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
17660 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f  ;..    }..    //
17670 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20  / Gets the last 
17680 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64  SQLite error cod
17690 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  e..    internal 
176a0 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
176b0 72 72 6f 72 43 6f 64 65 20 52 65 73 75 6c 74 43  rrorCode ResultC
176c0 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ode()..    {..  
176d0 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
176e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
176f0 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 5f  qlite3_errcode(_
17700 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  sql);..    }..  
17710 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c    /// Gets the l
17720 61 73 74 20 53 51 4c 69 74 65 20 65 78 74 65 6e  ast SQLite exten
17730 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a  ded error code..
17740 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
17750 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
17760 72 43 6f 64 65 20 45 78 74 65 6e 64 65 64 52 65  rCode ExtendedRe
17770 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20  sultCode()..    
17780 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
17790 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
177a0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65  ods.sqlite3_exte
177b0 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 5f 73 71  nded_errcode(_sq
177c0 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
177d0 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20    /// Add a log 
177e0 6d 65 73 73 61 67 65 20 76 69 61 20 74 68 65 20  message via the 
177f0 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c  SQLite sqlite3_l
17800 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20  og interface... 
17810 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
17820 72 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d 65 73  ride void LogMes
17830 73 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72  sage(SQLiteError
17840 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73  Code iErrCode, s
17850 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d  tring zMessage).
17860 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 74  .    {..      St
17870 61 74 69 63 4c 6f 67 4d 65 73 73 61 67 65 28 69  aticLogMessage(i
17880 45 72 72 43 6f 64 65 2c 20 7a 4d 65 73 73 61 67  ErrCode, zMessag
17890 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
178a0 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20    /// Add a log 
178b0 6d 65 73 73 61 67 65 20 76 69 61 20 74 68 65 20  message via the 
178c0 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c  SQLite sqlite3_l
178d0 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20  og interface... 
178e0 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
178f0 69 63 20 76 6f 69 64 20 53 74 61 74 69 63 4c 6f  ic void StaticLo
17900 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 45  gMessage(SQLiteE
17910 72 72 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64  rrorCode iErrCod
17920 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61  e, string zMessa
17930 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ge)..    {..    
17940 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
17950 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f  thods.sqlite3_lo
17960 67 28 69 45 72 72 43 6f 64 65 2c 20 54 6f 55 54  g(iErrCode, ToUT
17970 46 38 28 7a 4d 65 73 73 61 67 65 29 29 3b 0d 0a  F8(zMessage));..
17980 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54      }....#if INT
17990 45 52 4f 50 5f 43 4f 44 45 43 20 7c 7c 20 49 4e  EROP_CODEC || IN
179a0 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45  TEROP_INCLUDE_SE
179b0 45 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  E..    internal 
179c0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
179d0 74 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d  tPassword(byte[]
179e0 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d   passwordBytes).
179f0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
17a00 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
17a10 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
17a20 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65  thods.sqlite3_ke
17a30 79 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72 64  y(_sql, password
17a40 42 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64 42  Bytes, passwordB
17a50 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20  ytes.Length);.. 
17a60 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
17a70 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
17a80 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
17a90 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
17aa0 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
17ab0 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 75 73  ...      if (_us
17ac0 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d  ePool)..      {.
17ad0 0a 20 20 20 20 20 20 20 20 5f 75 73 65 50 6f 6f  .        _usePoo
17ae0 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69  l = false;....#i
17af0 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
17b00 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
17b10 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54  CTION..        T
17b20 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48  race.WriteLine(H
17b30 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
17b40 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
17b50 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
17b60 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
17b70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 53 65  ,..          "Se
17b80 74 50 61 73 73 77 6f 72 64 20 28 50 6f 6f 6c 29  tPassword (Pool)
17b90 20 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c   Disabled: {0}",
17ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 48 61 6e 64  ..          Hand
17bb0 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  leToString()));.
17bc0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d  .#endif..      }
17bd0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
17be0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
17bf0 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73   void ChangePass
17c00 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50  word(byte[] newP
17c10 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20  asswordBytes).. 
17c20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
17c30 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
17c40 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
17c50 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65  ods.sqlite3_reke
17c60 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73 77  y(_sql, newPassw
17c70 6f 72 64 42 79 74 65 73 2c 20 28 6e 65 77 50 61  ordBytes, (newPa
17c80 73 73 77 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e  sswordBytes == n
17c90 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50 61  ull) ? 0 : newPa
17ca0 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67  sswordBytes.Leng
17cb0 74 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  th);..      if (
17cc0 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
17cd0 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
17ce0 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
17cf0 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
17d00 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
17d10 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20  if (_usePool).. 
17d20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17d30 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65  _usePool = false
17d40 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  ;....#if !NET_CO
17d50 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
17d60 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
17d70 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
17d80 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68  eLine(HelperMeth
17d90 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
17da0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 43 75 6c  (..          Cul
17db0 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
17dc0 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
17dd0 20 20 20 20 22 43 68 61 6e 67 65 50 61 73 73 77      "ChangePassw
17de0 6f 72 64 20 28 50 6f 6f 6c 29 20 44 69 73 61 62  ord (Pool) Disab
17df0 6c 65 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  led: {0}",..    
17e00 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74        HandleToSt
17e10 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69  ring()));..#endi
17e20 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  f..      }..    
17e30 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
17e40 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
17e50 64 65 20 76 6f 69 64 20 53 65 74 50 72 6f 67 72  de void SetProgr
17e60 65 73 73 48 6f 6f 6b 28 69 6e 74 20 6e 4f 70 73  essHook(int nOps
17e70 2c 20 53 51 4c 69 74 65 50 72 6f 67 72 65 73 73  , SQLiteProgress
17e80 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
17e90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 55      {..        U
17ea0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
17eb0 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 6f 67 72  ds.sqlite3_progr
17ec0 65 73 73 5f 68 61 6e 64 6c 65 72 28 5f 73 71 6c  ess_handler(_sql
17ed0 2c 20 6e 4f 70 73 2c 20 66 75 6e 63 2c 20 49 6e  , nOps, func, In
17ee0 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
17ef0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
17f00 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
17f10 20 53 65 74 41 75 74 68 6f 72 69 7a 65 72 48 6f   SetAuthorizerHo
17f20 6f 6b 28 53 51 4c 69 74 65 41 75 74 68 6f 72 69  ok(SQLiteAuthori
17f30 7a 65 72 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  zerCallback func
17f40 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
17f50 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
17f60 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 65 74 5f  ods.sqlite3_set_
17f70 61 75 74 68 6f 72 69 7a 65 72 28 5f 73 71 6c 2c  authorizer(_sql,
17f80 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
17f90 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
17fa0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
17fb0 72 69 64 65 20 76 6f 69 64 20 53 65 74 55 70 64  ride void SetUpd
17fc0 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70  ateHook(SQLiteUp
17fd0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e  dateCallback fun
17fe0 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  c)..    {..     
17ff0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
18000 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75 70 64  hods.sqlite3_upd
18010 61 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66  ate_hook(_sql, f
18020 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
18030 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
18040 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
18050 64 65 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69  de void SetCommi
18060 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d  tHook(SQLiteComm
18070 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  itCallback func)
18080 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
18090 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
180a0 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69  ds.sqlite3_commi
180b0 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e  t_hook(_sql, fun
180c0 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
180d0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
180e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
180f0 20 76 6f 69 64 20 53 65 74 54 72 61 63 65 43 61   void SetTraceCa
18100 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 54 72 61  llback(SQLiteTra
18110 63 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ceCallback func)
18120 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
18130 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
18140 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61 63 65  ds.sqlite3_trace
18150 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
18160 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
18170 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
18180 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
18190 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28  SetRollbackHook(
181a0 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61  SQLiteRollbackCa
181b0 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
181c0 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
181d0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
181e0 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f  qlite3_rollback_
181f0 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
18200 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
18210 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
18220 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
18230 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20 73  /// Allows the s
18240 65 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67 67  etting of a logg
18250 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76  ing callback inv
18260 6f 6b 65 64 20 62 79 20 53 51 4c 69 74 65 20 77  oked by SQLite w
18270 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c  hen a..    /// l
18280 6f 67 20 65 76 65 6e 74 20 6f 63 63 75 72 73 2e  og event occurs.
18290 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c 62    Only one callb
182a0 61 63 6b 20 6d 61 79 20 62 65 20 73 65 74 2e 20  ack may be set. 
182b0 20 49 66 20 4e 55 4c 4c 20 69 73 20 70 61 73 73   If NULL is pass
182c0 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  ed,..    /// the
182d0 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63   logging callbac
182e0 6b 20 69 73 20 75 6e 72 65 67 69 73 74 65 72 65  k is unregistere
182f0 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
18300 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
18310 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e  <param name="fun
18320 63 22 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b 20  c">The callback 
18330 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f  function to invo
18340 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ke.</param>..   
18350 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
18360 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63  turns a result c
18370 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ode</returns>.. 
18380 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
18390 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
183a0 43 6f 64 65 20 53 65 74 4c 6f 67 43 61 6c 6c 62  Code SetLogCallb
183b0 61 63 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c  ack(SQLiteLogCal
183c0 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
183d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
183e0 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
183f0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
18400 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
18410 66 69 67 5f 6c 6f 67 28 0d 0a 20 20 20 20 20 20  fig_log(..      
18420 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
18430 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  igOpsEnum.SQLITE
18440 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66 75 6e  _CONFIG_LOG, fun
18450 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
18460 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
18470 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn rc;..    }...
18480 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
18490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
184a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
184b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
184c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
184d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
184e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
184f0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
18500 2f 2f 20 43 72 65 61 74 65 73 20 61 20 6e 65 77  // Creates a new
18510 20 53 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f   SQLite backup o
18520 62 6a 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74  bject based on t
18530 68 65 20 70 72 6f 76 69 64 65 64 20 64 65 73 74  he provided dest
18540 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  ination..    ///
18550 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
18560 74 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63  tion.  The sourc
18570 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
18580 63 74 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65  ction is the one
18590 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69  ..    /// associ
185a0 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f  ated with this o
185b0 62 6a 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72  bject.  The sour
185c0 63 65 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69  ce and destinati
185d0 6f 6e 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  on database..   
185e0 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73   /// connections
185f0 20 63 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73   cannot be the s
18600 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ame...    /// </
18610 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
18620 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
18630 65 73 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74  estCnn">The dest
18640 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
18650 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61   connection.</pa
18660 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
18670 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e  aram name="destN
18680 61 6d 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61  ame">The destina
18690 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61  tion database na
186a0 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  me.</param>..   
186b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
186c0 3d 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68  ="sourceName">Th
186d0 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
186e0 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d  e name.</param>.
186f0 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
18700 73 3e 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61  s>The newly crea
18710 74 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ted backup objec
18720 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  t.</returns>..  
18730 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
18740 69 64 65 20 53 51 4c 69 74 65 42 61 63 6b 75 70  ide SQLiteBackup
18750 20 49 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75   InitializeBacku
18760 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
18770 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73  teConnection des
18780 74 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73  tCnn,..        s
18790 74 72 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d  tring destName,.
187a0 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
187b0 73 6f 75 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20  sourceName..    
187c0 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
187d0 20 20 20 20 20 20 69 66 20 28 64 65 73 74 43 6e        if (destCn
187e0 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
187f0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
18800 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
18810 63 65 70 74 69 6f 6e 28 22 64 65 73 74 43 6e 6e  ception("destCnn
18820 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
18830 66 20 28 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e  f (destName == n
18840 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
18850 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
18860 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
18870 6e 28 22 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a  n("destName");..
18880 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f  ..        if (so
18890 75 72 63 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  urceName == null
188a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
188b0 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
188c0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
188d0 73 6f 75 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d  sourceName");...
188e0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 33  .        SQLite3
188f0 20 64 65 73 74 53 71 6c 69 74 65 33 20 3d 20 64   destSqlite3 = d
18900 65 73 74 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53  estCnn._sql as S
18910 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20  QLite3;....     
18920 20 20 20 69 66 20 28 64 65 73 74 53 71 6c 69 74     if (destSqlit
18930 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  e3 == null)..   
18940 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
18950 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
18960 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
18970 20 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74         "Destinat
18980 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ion connection h
18990 61 73 20 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c  as no wrapper.",
189a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
189b0 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d    "destCnn");...
189c0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
189d0 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
189e0 64 65 73 74 48 61 6e 64 6c 65 20 3d 20 64 65 73  destHandle = des
189f0 74 53 71 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a  tSqlite3._sql;..
18a00 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
18a10 73 74 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c  stHandle == null
18a20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
18a30 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
18a40 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  tException(..   
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
18a60 73 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63  stination connec
18a70 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
18a80 6c 69 64 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20  lid handle.",.. 
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
18aa0 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
18ab0 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
18ac0 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75  ectionHandle sou
18ad0 72 63 65 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c  rceHandle = _sql
18ae0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
18af0 28 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d  (sourceHandle ==
18b00 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18b10 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
18b20 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
18b30 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
18b40 20 20 20 20 20 20 20 20 20 20 22 53 6f 75 72 63            "Sourc
18b50 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  e connection has
18b60 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
18b70 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
18b80 20 20 62 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61    byte[] zDestNa
18b90 6d 65 20 3d 20 54 6f 55 54 46 38 28 64 65 73 74  me = ToUTF8(dest
18ba0 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
18bb0 62 79 74 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61  byte[] zSourceNa
18bc0 6d 65 20 3d 20 54 6f 55 54 46 38 28 73 6f 75 72  me = ToUTF8(sour
18bd0 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  ceName);....    
18be0 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
18bf0 48 61 6e 64 6c 65 20 62 61 63 6b 75 70 48 61 6e  Handle backupHan
18c00 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  dle = null;.... 
18c10 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
18c20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18c30 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
18c40 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
18c50 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a        finally /*
18c60 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62   NOTE: Thread.Ab
18c70 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e  ort() protection
18c80 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  . */..        {.
18c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
18ca0 50 74 72 20 62 61 63 6b 75 70 20 3d 20 55 6e 73  Ptr backup = Uns
18cb0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
18cc0 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
18cd0 69 6e 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  init(..         
18ce0 20 20 20 20 20 20 20 64 65 73 74 48 61 6e 64 6c         destHandl
18cf0 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f  e, zDestName, so
18d00 75 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75  urceHandle, zSou
18d10 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  rceName);....   
18d20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63           if (bac
18d30 6b 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  kup == IntPtr.Ze
18d40 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
18d50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18d60 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
18d70 6f 64 65 20 72 65 73 75 6c 74 43 6f 64 65 20 3d  ode resultCode =
18d80 20 52 65 73 75 6c 74 43 6f 64 65 28 29 3b 0d 0a   ResultCode();..
18d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18da0 20 20 69 66 20 28 72 65 73 75 6c 74 43 6f 64 65    if (resultCode
18db0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
18dc0 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
18de0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
18df0 65 70 74 69 6f 6e 28 72 65 73 75 6c 74 43 6f 64  eption(resultCod
18e00 65 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  e, GetLastError(
18e10 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
18e20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18e40 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
18e50 78 63 65 70 74 69 6f 6e 28 22 66 61 69 6c 65 64  xception("failed
18e60 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 62   to initialize b
18e70 61 63 6b 75 70 22 29 3b 0d 0a 20 20 20 20 20 20  ackup");..      
18e80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18e90 20 20 20 20 20 20 20 62 61 63 6b 75 70 48 61 6e         backupHan
18ea0 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  dle = new SQLite
18eb0 42 61 63 6b 75 70 48 61 6e 64 6c 65 28 64 65 73  BackupHandle(des
18ec0 74 48 61 6e 64 6c 65 2c 20 62 61 63 6b 75 70 29  tHandle, backup)
18ed0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
18ee0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
18ef0 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
18f00 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
18f10 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
18f20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
18f30 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45  QLiteConnectionE
18f40 76 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74  ventType.NewCrit
18f50 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c  icalHandle, null
18f60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
18f70 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ull, null, null,
18f80 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 6e   backupHandle, n
18f90 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b  ull, new object[
18fa0 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..           
18fb0 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29   typeof(SQLite3)
18fc0 2c 20 64 65 73 74 43 6e 6e 2c 20 64 65 73 74 4e  , destCnn, destN
18fd0 61 6d 65 2c 20 73 6f 75 72 63 65 4e 61 6d 65 20  ame, sourceName 
18fe0 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  }));....        
18ff0 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74  return new SQLit
19000 65 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  eBackup(..      
19010 20 20 20 20 20 20 74 68 69 73 2c 20 62 61 63 6b        this, back
19020 75 70 48 61 6e 64 6c 65 2c 20 64 65 73 74 48 61  upHandle, destHa
19030 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c  ndle, zDestName,
19040 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d 0a   sourceHandle,..
19050 20 20 20 20 20 20 20 20 20 20 20 20 7a 53 6f 75              zSou
19060 72 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d  rceName);..    }
19070 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
19080 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
19090 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70 61  opies up to N pa
190a0 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f 75  ges from the sou
190b0 72 63 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  rce database to 
190c0 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d  the destination.
190d0 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73  .    /// databas
190e0 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
190f0 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  h the specified 
19100 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a  backup object...
19110 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
19120 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
19130 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
19140 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
19150 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61  ct to use.</para
19160 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
19170 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e  am name="nPage">
19180 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
19190 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f  mber of pages to
191a0 20 63 6f 70 79 2c 20 6e 65 67 61 74 69 76 65 20   copy, negative 
191b0 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61  to copy all rema
191c0 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20  ining pages...  
191d0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
191e0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
191f0 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20  ame="retry">..  
19200 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72 75    /// Set to tru
19210 65 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69  e if the operati
19220 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
19230 65 74 72 69 65 64 20 64 75 65 20 74 6f 20 64 61  etried due to da
19240 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
19250 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 3b 20  locking issues; 
19260 6f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20 74  otherwise, set t
19270 6f 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f  o false...    //
19280 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
19290 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
192a0 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74     /// True if t
192b0 68 65 72 65 20 61 72 65 20 6d 6f 72 65 20 70 61  here are more pa
192c0 67 65 73 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ges to be copied
192d0 2c 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73  , false otherwis
192e0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
192f0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
19300 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
19310 6f 6c 20 53 74 65 70 42 61 63 6b 75 70 28 0d 0a  ol StepBackup(..
19320 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
19330 63 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20  ckup backup,..  
19340 20 20 20 20 20 20 69 6e 74 20 6e 50 61 67 65 2c        int nPage,
19350 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f  ..        ref bo
19360 6f 6c 20 72 65 74 72 79 0d 0a 20 20 20 20 20 20  ol retry..      
19370 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
19380 20 20 20 20 72 65 74 72 79 20 3d 20 66 61 6c 73      retry = fals
19390 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
193a0 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
193b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
193c0 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
193d0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
193e0 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
193f0 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
19400 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
19410 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
19420 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
19430 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
19440 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
19450 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
19460 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
19470 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
19480 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
19490 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
194a0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
194b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
194c0 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
194d0 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
194e0 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
194f0 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
19500 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
19510 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
19520 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
19530 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
19540 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
19550 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
19560 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
19570 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r.");....       
19580 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
19590 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
195a0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
195b0 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 68 61 6e  _backup_step(han
195c0 64 6c 65 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d  dlePtr, nPage);.
195d0 0a 20 20 20 20 20 20 20 20 62 61 63 6b 75 70 2e  .        backup.
195e0 5f 73 74 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b  _stepResult = n;
195f0 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20 66   /* NOTE: Save f
19600 6f 72 20 75 73 65 20 62 79 20 46 69 6e 69 73 68  or use by Finish
19610 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20  Backup. */....  
19620 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
19630 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
19640 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  k)..        {.. 
19650 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
19660 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
19670 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
19680 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
19690 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d  ErrorCode.Busy).
196a0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
196b0 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20          retry = 
196c0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
196d0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
196e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
196f0 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d      else if (n =
19700 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
19710 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20  e.Locked)..     
19720 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19730 20 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d    retry = true;.
19740 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
19750 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
19760 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
19770 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
19780 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65  teErrorCode.Done
19790 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
197a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
197b0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
197c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
197d0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
197e0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
197f0 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
19800 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
19810 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
19820 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
19830 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
19840 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
19850 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
19860 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20  es remaining to 
19870 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74  be copied from t
19880 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f  he source..    /
19890 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  // database to t
198a0 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
198b0 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74  atabase associat
198c0 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ed with the spec
198d0 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62  ified..    /// b
198e0 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
198f0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
19900 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
19910 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
19920 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
19930 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
19940 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
19950 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72  turns>The number
19960 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e   of pages remain
19970 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64  ing to be copied
19980 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
19990 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
199a0 64 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67  de int Remaining
199b0 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
199c0 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61   SQLiteBackup ba
199d0 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d  ckup..        ).
199e0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
199f0 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75  if (backup == nu
19a00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
19a10 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
19a20 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
19a30 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20  ("backup");.... 
19a40 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
19a50 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  kupHandle handle
19a60 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74   = backup._sqlit
19a70 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20  e_backup;....   
19a80 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
19a90 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
19aa0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
19ab0 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
19ac0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
19ae0 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
19af0 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
19b00 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
19b10 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72  IntPtr handlePtr
19b20 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
19b30 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
19b40 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  Ptr == IntPtr.Ze
19b50 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
19b60 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
19b70 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
19b80 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
19b90 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
19ba0 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
19bb0 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e  alid handle poin
19bc0 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ter.");....     
19bd0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
19be0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
19bf0 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d  lite3_backup_rem
19c00 61 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74 72  aining(handlePtr
19c10 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
19c20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
19c30 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
19c40 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
19c50 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
19c60 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
19c70 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..   
19c80 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70   /// with the sp
19c90 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f  ecified backup o
19ca0 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bject...    /// 
19cb0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
19cc0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
19cd0 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63  "backup">The bac
19ce0 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68  kup object to ch
19cf0 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  eck.</param>..  
19d00 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
19d10 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
19d20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
19d30 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 2e  source database.
19d40 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
19d50 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
19d60 65 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74 42  e int PageCountB
19d70 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
19d80 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63  SQLiteBackup bac
19d90 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  kup..        )..
19da0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
19db0 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
19dc0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
19dd0 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
19de0 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
19df0 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
19e00 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
19e10 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
19e20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
19e30 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
19e40 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
19e50 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
19e60 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
19e70 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
19e80 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
19e90 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
19ea0 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
19eb0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
19ec0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
19ed0 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
19ee0 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
19ef0 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
19f00 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
19f10 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
19f20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
19f30 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
19f40 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
19f50 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
19f60 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
19f70 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
19f80 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  er.");....      
19f90 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
19fa0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
19fb0 69 74 65 33 5f 62 61 63 6b 75 70 5f 70 61 67 65  ite3_backup_page
19fc0 63 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74 72 29  count(handlePtr)
19fd0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
19fe0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
19ff0 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20     /// Destroys 
1a000 74 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  the backup objec
1a010 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20  t, rolling back 
1a020 61 6e 79 20 62 61 63 6b 75 70 20 74 68 61 74 20  any backup that 
1a030 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f  may be in..    /
1a040 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20  // progess...   
1a050 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1a060 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1a070 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
1a080 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
1a090 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72  to destroy.</par
1a0a0 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
1a0b0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
1a0c0 46 69 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a 20  FinishBackup(.. 
1a0d0 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
1a0e0 6b 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20  kup backup..    
1a0f0 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
1a100 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
1a110 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1a120 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1a130 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
1a140 65 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29  eption("backup")
1a150 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
1a160 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20  iteBackupHandle 
1a170 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e  handle = backup.
1a180 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d  _sqlite_backup;.
1a190 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
1a1a0 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1a1c0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
1a1d0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
1a1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a1f0 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
1a200 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
1a210 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
1a220 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
1a230 64 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  dlePtr = handle;
1a240 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
1a250 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74  handlePtr == Int
1a260 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
1a270 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1a280 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
1a290 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
1a2b0 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
1a2c0 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
1a2d0 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d  e pointer.");...
1a2e0 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
1a2f0 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53  NDARD..        S
1a300 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
1a310 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
1a320 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
1a330 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74  ackup_finish_int
1a340 65 72 6f 70 28 68 61 6e 64 6c 65 50 74 72 29 3b  erop(handlePtr);
1a350 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
1a360 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1a370 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
1a380 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1a390 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68  _backup_finish(h
1a3a0 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6e 64  andlePtr);..#end
1a3b0 69 66 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64  if..        hand
1a3c0 6c 65 2e 53 65 74 48 61 6e 64 6c 65 41 73 49 6e  le.SetHandleAsIn
1a3d0 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66 20  valid();....#if 
1a3e0 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20 20  COUNT_HANDLE..  
1a3f0 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20        if ((n == 
1a400 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
1a410 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20 62 61 63  Ok) || (n == bac
1a420 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29  kup._stepResult)
1a430 29 20 68 61 6e 64 6c 65 2e 57 61 73 52 65 6c 65  ) handle.WasRele
1a440 61 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69  asedOk();..#endi
1a450 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  f....        if 
1a460 28 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72  ((n != SQLiteErr
1a470 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e  orCode.Ok) && (n
1a480 20 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70   != backup._step
1a490 52 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20  Result))..      
1a4a0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1a4b0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
1a4c0 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
1a4d0 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
1a4e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1a4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a540 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
1a550 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1a560 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68  Determines if th
1a570 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
1a580 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20 69  brary has been i
1a590 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
1a5a0 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72  he..    /// curr
1a5b0 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ent process...  
1a5c0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1a5d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
1a5e0 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62  ns>..    /// A b
1a5f0 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e  oolean indicatin
1a600 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
1a610 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
1a620 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65   library has bee
1a630 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69  n..    /// initi
1a640 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63  alized for the c
1a650 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
1a660 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
1a670 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
1a680 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
1a690 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d  IsInitialized().
1a6a0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1a6b0 72 65 74 75 72 6e 20 53 74 61 74 69 63 49 73 49  return StaticIsI
1a6c0 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20  nitialized();.. 
1a6d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
1a6e0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1a6f0 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66  // Determines if
1a700 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
1a710 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65   library has bee
1a720 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  n initialized fo
1a730 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  r the..    /// c
1a740 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
1a750 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1a760 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
1a770 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
1a780 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61  A boolean indica
1a790 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
1a7a0 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  not the SQLite c
1a7b0 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ore library has 
1a7c0 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  been..    /// in
1a7d0 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68  itialized for th
1a7e0 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
1a7f0 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  s...    /// </re
1a800 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
1a810 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c  rnal static bool
1a820 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c   StaticIsInitial
1a830 69 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ized()..    {.. 
1a840 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a850 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 50 72     // BUGFIX: Pr
1a860 65 76 65 6e 74 20 72 61 63 65 73 20 77 69 74 68  event races with
1a870 20 6f 74 68 65 72 20 74 68 72 65 61 64 73 20 66   other threads f
1a880 6f 72 20 74 68 69 73 20 65 6e 74 69 72 65 20 62  or this entire b
1a890 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20  lock, due..     
1a8a0 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74 6f     //         to
1a8b0 20 74 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79   the try/finally
1a8c0 20 73 65 6d 61 6e 74 69 63 73 2e 20 20 53 65 65   semantics.  See
1a8d0 20 74 69 63 6b 65 74 20 5b 37 32 39 30 35 63 39   ticket [72905c9
1a8e0 61 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f  a77]...        /
1a8f0 2f 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20  /..        lock 
1a900 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20  (syncRoot)..    
1a910 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a920 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1a930 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65     // NOTE: Save
1a940 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
1a950 65 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73 20  e logging class 
1a960 61 6e 64 20 74 68 65 6e 20 72 65 73 74 6f 72 65  and then restore
1a970 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20   it..           
1a980 20 2f 2f 20 20 20 20 20 20 20 61 66 74 65 72 20   //       after 
1a990 77 65 20 61 72 65 20 64 6f 6e 65 20 74 6f 20 61  we are done to a
1a9a0 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f  void logging too
1a9b0 20 6d 61 6e 79 20 66 61 6c 73 65 20 65 72 72 6f   many false erro
1a9c0 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs...           
1a9d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1a9e0 20 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c   bool savedEnabl
1a9f0 65 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45  ed = SQLiteLog.E
1aa00 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20  nabled;..       
1aa10 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45       SQLiteLog.E
1aa20 6e 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d  nabled = false;.
1aa30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
1aa40 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1aa50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1aa60 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1aa70 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1aa80 54 68 69 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d  This method [ab]
1aa90 75 73 65 73 20 74 68 65 20 66 61 63 74 20 74 68  uses the fact th
1aaa0 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61  at SQLite will a
1aab0 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20  lways..         
1aac0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1aad0 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
1aae0 52 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e  ROR for any unkn
1aaf0 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  own configuratio
1ab00 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20  n option..      
1ab10 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1ab20 20 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20     *unless* the 
1ab30 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 68  SQLite library h
1ab40 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
1ab50 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20  initialized...  
1ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ab70 20 20 20 20 20 20 20 49 6e 20 74 68 61 74 20 63         In that c
1ab80 61 73 65 20 69 74 20 77 69 6c 6c 20 61 6c 77 61  ase it will alwa
1ab90 79 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ys return SQLITE
1aba0 5f 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20 20 20  _MISUSE...      
1abb0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1abd0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
1abe0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
1abf0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
1ac00 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20  onfig_none(..   
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73   SQLiteConfigOps
1ac30 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46  Enum.SQLITE_CONF
1ac40 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20  IG_NONE);....   
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1ac60 75 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69 74  urn (rc == SQLit
1ac70 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73  eErrorCode.Misus
1ac80 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
1ac90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1aca0 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
1acb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1acc0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
1acd0 67 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61 76 65  g.Enabled = save
1ace0 64 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20  dEnabled;..     
1acf0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1ad00 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
1ad10 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1ad20 0a 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20  .    /// Helper 
1ad30 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72  function to retr
1ad40 69 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66  ieve a column of
1ad50 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63   data from an ac
1ad60 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d  tive statement..
1ad70 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1ad80 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
1ad90 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e  ram name="stmt">
1ada0 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  The statement be
1adb0 69 6e 67 20 73 74 65 70 28 29 27 64 20 74 68 72  ing step()'d thr
1adc0 6f 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ough</param>..  
1add0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1ade0 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c  e="flags">The fl
1adf0 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
1ae00 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ith the connecti
1ae10 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  on.</param>..   
1ae20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1ae30 3d 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c  ="index">The col
1ae40 75 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74  umn index to ret
1ae50 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  rieve</param>.. 
1ae60 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1ae70 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70  me="typ">The typ
1ae80 65 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69  e of data contai
1ae90 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ned in the colum
1aea0 6e 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c  n.  If Uninitial
1aeb0 69 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74  ized, this funct
1aec0 69 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76  ion will retriev
1aed0 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20 69  e the datatype i
1aee0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72  nformation.</par
1aef0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
1af00 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68  turns>Returns th
1af10 65 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f  e data in the co
1af20 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  lumn</returns>..
1af30 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1af40 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74  rride object Get
1af50 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74  Value(SQLiteStat
1af60 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
1af70 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
1af80 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
1af90 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74  ex, SQLiteType t
1afa0 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  yp)..    {..    
1afb0 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61    TypeAffinity a
1afc0 66 66 20 3d 20 74 79 70 2e 41 66 66 69 6e 69 74  ff = typ.Affinit
1afd0 79 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 61 66  y;..      if (af
1afe0 66 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74  f == TypeAffinit
1aff0 79 2e 4e 75 6c 6c 29 20 72 65 74 75 72 6e 20 44  y.Null) return D
1b000 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20  BNull.Value;..  
1b010 20 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c      Type t = nul
1b020 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  l;....      if (
1b030 74 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79  typ.Type != DbTy
1b040 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20  pe.Object)..    
1b050 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d    {..        t =
1b060 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53   SQLiteConvert.S
1b070 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28  QLiteTypeToType(
1b080 74 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61  typ);..        a
1b090 66 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e  ff = TypeToAffin
1b0a0 69 74 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d  ity(t);..      }
1b0b0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66  ....      if ((f
1b0c0 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
1b0d0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74  nectionFlags.Get
1b0e0 41 6c 6c 41 73 54 65 78 74 29 20 3d 3d 20 53 51  AllAsText) == SQ
1b0f0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
1b100 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74  ags.GetAllAsText
1b110 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  )..          ret
1b120 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74  urn GetText(stmt
1b130 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
1b140 20 20 20 73 77 69 74 63 68 20 28 61 66 66 29 0d     switch (aff).
1b150 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1b160 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
1b170 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
1b180 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70       if (typ.Typ
1b190 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64  e == DbType.Guid
1b1a0 20 26 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79   && typ.Affinity
1b1b0 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
1b1c0 2e 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20  .Text)..        
1b1d0 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
1b1e0 75 69 64 28 47 65 74 54 65 78 74 28 73 74 6d 74  uid(GetText(stmt
1b1f0 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20  , index));....  
1b200 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
1b210 28 69 6e 74 29 47 65 74 42 79 74 65 73 28 73 74  (int)GetBytes(st
1b220 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75  mt, index, 0, nu
1b230 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20  ll, 0, 0);..    
1b240 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
1b250 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20   new byte[n];.. 
1b260 20 20 20 20 20 20 20 20 20 47 65 74 42 79 74 65           GetByte
1b270 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
1b280 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20  , b, 0, n);.... 
1b290 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
1b2a0 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
1b2b0 47 75 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29  Guid && n == 16)
1b2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1b2d0 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29  turn new Guid(b)
1b2e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ;....          r
1b2f0 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20  eturn b;..      
1b300 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
1b310 69 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20  ity.DateTime:.. 
1b320 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b330 47 65 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74  GetDateTime(stmt
1b340 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
1b350 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
1b360 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20  nity.Double:..  
1b370 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
1b380 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65   null) return Ge
1b390 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e  tDouble(stmt, in
1b3a0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
1b3b0 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
1b3c0 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f  ChangeType(GetDo
1b3d0 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  uble(stmt, index
1b3e0 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  ), t, null);..  
1b3f0 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
1b400 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a  ffinity.Int64:..
1b410 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
1b420 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
1b430 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
1b440 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
1b450 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
1b460 66 28 42 6f 6f 6c 65 61 6e 29 29 20 72 65 74 75  f(Boolean)) retu
1b470 72 6e 20 47 65 74 42 6f 6f 6c 65 61 6e 28 73 74  rn GetBoolean(st
1b480 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
1b490 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
1b4a0 74 79 70 65 6f 66 28 53 42 79 74 65 29 29 20 72  typeof(SByte)) r
1b4b0 65 74 75 72 6e 20 47 65 74 53 42 79 74 65 28 73  eturn GetSByte(s
1b4c0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
1b4d0 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
1b4e0 20 74 79 70 65 6f 66 28 42 79 74 65 29 29 20 72   typeof(Byte)) r
1b4f0 65 74 75 72 6e 20 47 65 74 42 79 74 65 28 73 74  eturn GetByte(st
1b500 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
1b510 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
1b520 74 79 70 65 6f 66 28 49 6e 74 31 36 29 29 20 72  typeof(Int16)) r
1b530 65 74 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73  eturn GetInt16(s
1b540 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
1b550 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
1b560 20 74 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29   typeof(UInt16))
1b570 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31   return GetUInt1
1b580 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  6(stmt, index);.
1b590 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
1b5a0 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32   == typeof(Int32
1b5b0 29 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74  )) return GetInt
1b5c0 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  32(stmt, index);
1b5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
1b5e0 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74  t == typeof(UInt
1b5f0 33 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 55  32)) return GetU
1b600 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
1b610 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  x);..          i
1b620 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49  f (t == typeof(I
1b630 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65  nt64)) return Ge
1b640 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
1b650 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
1b660 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
1b670 55 49 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20  UInt64)) return 
1b680 47 65 74 55 49 6e 74 36 34 28 73 74 6d 74 2c 20  GetUInt64(stmt, 
1b690 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
1b6a0 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72     return Conver
1b6b0 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65 74  t.ChangeType(Get
1b6c0 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
1b6d0 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20  x), t, null);.. 
1b6e0 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d         default:.
1b6f0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
1b700 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  n GetText(stmt, 
1b710 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d  index);..      }
1b720 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1b730 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1b740 20 69 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f   int GetCursorFo
1b750 72 54 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61  rTable(SQLiteSta
1b760 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
1b770 20 64 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67   db, int rootPag
1b780 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
1b790 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
1b7a0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
1b7b0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1b7c0 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  s.sqlite3_table_
1b7d0 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73  cursor_interop(s
1b7e0 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
1b7f0 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b  , db, rootPage);
1b800 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
1b810 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69  eturn -1;..#endi
1b820 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
1b830 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1b840 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46  e long GetRowIdF
1b850 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53  orCursor(SQLiteS
1b860 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
1b870 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20  nt cursor)..    
1b880 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
1b890 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c  TANDARD..      l
1b8a0 6f 6e 67 20 72 6f 77 69 64 20 3d 20 30 3b 0d 0a  ong rowid = 0;..
1b8b0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1b8c0 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
1b8d0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1b8e0 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f  qlite3_cursor_ro
1b8f0 77 69 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  wid_interop(stmt
1b900 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63  ._sqlite_stmt, c
1b910 75 72 73 6f 72 2c 20 72 65 66 20 72 6f 77 69 64  ursor, ref rowid
1b920 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63  );..      if (rc
1b930 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
1b940 6f 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72  ode.Ok) return r
1b950 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  owid;....      r
1b960 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d  eturn 0;..#else.
1b970 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
1b980 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
1b990 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1b9a0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 47 65  override void Ge
1b9b0 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65  tIndexColumnExte
1b9c0 6e 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20  ndedInfo(string 
1b9d0 64 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67  database, string
1b9e0 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63   index, string c
1b9f0 6f 6c 75 6d 6e 2c 20 72 65 66 20 69 6e 74 20 73  olumn, ref int s
1ba00 6f 72 74 4d 6f 64 65 2c 20 72 65 66 20 69 6e 74  ortMode, ref int
1ba10 20 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20 73 74   onError, ref st
1ba20 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65  ring collationSe
1ba30 71 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a  quence)..    {..
1ba40 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
1ba50 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50  DARD..      IntP
1ba60 74 72 20 63 6f 6c 6c 20 3d 20 49 6e 74 50 74 72  tr coll = IntPtr
1ba70 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e  .Zero;..      in
1ba80 74 20 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d 0a  t colllen = 0;..
1ba90 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1baa0 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20  rCode rc;....   
1bab0 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61     rc = UnsafeNa
1bac0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1bad0 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e  te3_index_column
1bae0 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73  _info_interop(_s
1baf0 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62  ql, ToUTF8(datab
1bb00 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64  ase), ToUTF8(ind
1bb10 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  ex), ToUTF8(colu
1bb20 6d 6e 29 2c 20 72 65 66 20 73 6f 72 74 4d 6f 64  mn), ref sortMod
1bb30 65 2c 20 72 65 66 20 6f 6e 45 72 72 6f 72 2c 20  e, ref onError, 
1bb40 72 65 66 20 63 6f 6c 6c 2c 20 72 65 66 20 63 6f  ref coll, ref co
1bb50 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69  lllen);..      i
1bb60 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45  f (rc != SQLiteE
1bb70 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
1bb80 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
1bb90 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29  eption(rc, null)
1bba0 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61  ;....      colla
1bbb0 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55  tionSequence = U
1bbc0 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c  TF8ToString(coll
1bbd0 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c  , colllen);..#el
1bbe0 73 65 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f  se..      sortMo
1bbf0 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f  de = 0;..      o
1bc00 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20  nError = 2;..   
1bc10 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     collationSequ
1bc20 65 6e 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b  ence = "BINARY";
1bc30 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
1bc40 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1bc50 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
1bc60 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e  rrorCode FileCon
1bc70 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e  trol(string zDbN
1bc80 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74  ame, int op, Int
1bc90 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b  Ptr pArg)..    {
1bca0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
1bcb0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1bcc0 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f  ds.sqlite3_file_
1bcd0 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a  control(_sql, (z
1bce0 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20  DbName != null) 
1bcf0 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65  ? ToUTF8(zDbName
1bd00 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41  ) : null, op, pA
1bd10 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  rg);..    }..  }
1bd20 0d 0a 7d 0d 0a                                   ..}..