System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 322b3f5c257af9b79501a4ffbe2d7a097b6b9c8d:


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 38 2e 30 22 3b 0d 0a 23   "1.0.108.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 69 76 61 74 65  gs;..    private
0a20: 20 62 6f 6f 6c 20 5f 73 65 74 4c 6f 67 43 61 6c   bool _setLogCal
0a30: 6c 62 61 63 6b 3b 0d 0a 20 20 20 20 70 72 6f 74  lback;..    prot
0a40: 65 63 74 65 64 20 62 6f 6f 6c 20 5f 75 73 65 50  ected bool _useP
0a50: 6f 6f 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63  ool;..    protec
0a60: 74 65 64 20 69 6e 74 20 5f 70 6f 6f 6c 56 65 72  ted int _poolVer
0a70: 73 69 6f 6e 3b 0d 0a 20 20 20 20 70 72 69 76 61  sion;..    priva
0a80: 74 65 20 69 6e 74 20 5f 63 61 6e 63 65 6c 43 6f  te int _cancelCo
0a90: 75 6e 74 3b 0d 0a 0d 0a 23 69 66 20 28 4e 45 54  unt;....#if (NET
0aa0: 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c  _35 || NET_40 ||
0ab0: 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34   NET_45 || NET_4
0ac0: 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c  51 || NET_452 ||
0ad0: 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34   NET_46 || NET_4
0ae0: 36 31 20 7c 7c 20 4e 45 54 5f 34 36 32 20 7c 7c  61 || NET_462 ||
0af0: 20 4e 45 54 5f 34 37 20 7c 7c 20 4e 45 54 5f 34   NET_47 || NET_4
0b00: 37 31 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d  71) && !PLATFORM
0b10: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
0b20: 4b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  K..    private b
0b30: 6f 6f 6c 20 5f 62 75 69 6c 64 69 6e 67 53 63 68  ool _buildingSch
0b40: 65 6d 61 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  ema;..#endif....
0b50: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0b60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 75  >..    /// The u
0b70: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
0b80: 74 69 6f 6e 73 20 72 65 67 69 73 74 65 72 65 64  tions registered
0b90: 20 6f 6e 20 74 68 69 73 20 63 6f 6e 6e 65 63 74   on this connect
0ba0: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ion..    /// </s
0bb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0bc0: 74 65 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72  tected Dictionar
0bd0: 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  y<SQLiteFunction
0be0: 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74  Attribute, SQLit
0bf0: 65 46 75 6e 63 74 69 6f 6e 3e 20 5f 66 75 6e 63  eFunction> _func
0c00: 74 69 6f 6e 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e  tions;....#if IN
0c10: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
0c20: 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
0c30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0c40: 54 68 69 73 20 69 73 20 74 68 65 20 6e 61 6d 65  This is the name
0c50: 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 6c   of the native l
0c60: 69 62 72 61 72 79 20 66 69 6c 65 20 74 68 61 74  ibrary file that
0c70: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20   contains the.. 
0c80: 20 20 20 2f 2f 2f 20 22 76 74 73 68 69 6d 22 20     /// "vtshim" 
0c90: 65 78 74 65 6e 73 69 6f 6e 20 5b 77 72 61 70 70  extension [wrapp
0ca0: 65 72 5d 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  er]...    /// </
0cb0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0cc0: 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67 20 5f  otected string _
0cd0: 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c  shimExtensionFil
0ce0: 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  eName = null;...
0cf0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0d00: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
0d10: 20 69 73 20 74 68 65 20 66 6c 61 67 20 69 6e 64   is the flag ind
0d20: 69 63 61 74 65 20 77 68 65 74 68 65 72 20 74 68  icate whether th
0d30: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
0d40: 20 66 69 6c 65 20 74 68 61 74 0d 0a 20 20 20 20   file that..    
0d50: 2f 2f 2f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  /// contains the
0d60: 20 22 76 74 73 68 69 6d 22 20 65 78 74 65 6e 73   "vtshim" extens
0d70: 69 6f 6e 20 6d 75 73 74 20 62 65 20 64 79 6e 61  ion must be dyna
0d80: 6d 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20 62  mically loaded b
0d90: 79 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69 73 20  y..    /// this 
0da0: 63 6c 61 73 73 20 70 72 69 6f 72 20 74 6f 20 75  class prior to u
0db0: 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  se...    /// </s
0dc0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0dd0: 74 65 63 74 65 64 20 62 6f 6f 6c 3f 20 5f 73 68  tected bool? _sh
0de0: 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d  imIsLoadNeeded =
0df0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f   null;....    //
0e00: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0e10: 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65   /// This is the
0e20: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 61 74   name of the nat
0e30: 69 76 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20  ive entry point 
0e40: 66 6f 72 20 74 68 65 20 22 76 74 73 68 69 6d 22  for the "vtshim"
0e50: 0d 0a 20 20 20 20 2f 2f 2f 20 65 78 74 65 6e 73  ..    /// extens
0e60: 69 6f 6e 20 5b 77 72 61 70 70 65 72 5d 2e 0d 0a  ion [wrapper]...
0e70: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0e80: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0e90: 64 20 73 74 72 69 6e 67 20 5f 73 68 69 6d 45 78  d string _shimEx
0ea0: 74 65 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 20  tensionProcName 
0eb0: 3d 20 22 73 71 6c 69 74 65 33 5f 76 74 73 68 69  = "sqlite3_vtshi
0ec0: 6d 5f 69 6e 69 74 22 3b 0d 0a 0d 0a 20 20 20 20  m_init";....    
0ed0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0ee0: 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c     /// The modul
0ef0: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
0f00: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
0f10: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
0f20: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0f30: 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c  cted Dictionary<
0f40: 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f  string, SQLiteMo
0f50: 64 75 6c 65 3e 20 5f 6d 6f 64 75 6c 65 73 3b 0d  dule> _modules;.
0f60: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0fe0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
0ff0: 73 74 72 75 63 74 73 20 74 68 65 20 6f 62 6a 65  structs the obje
1000: 63 74 20 75 73 65 64 20 74 6f 20 69 6e 74 65 72  ct used to inter
1010: 61 63 74 20 77 69 74 68 20 74 68 65 20 53 51 4c  act with the SQL
1020: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
1030: 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20  ..    /// using 
1040: 74 68 65 20 55 54 46 2d 38 20 74 65 78 74 20 65  the UTF-8 text e
1050: 6e 63 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f  ncoding...    //
1060: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1070: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1080: 65 3d 22 66 6d 74 22 3e 0d 0a 20 20 20 20 2f 2f  e="fmt">..    //
1090: 2f 20 54 68 65 20 44 61 74 65 54 69 6d 65 20 66  / The DateTime f
10a0: 6f 72 6d 61 74 20 74 6f 20 62 65 20 75 73 65 64  ormat to be used
10b0: 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67   when converting
10c0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 73 20 74   string values t
10d0: 6f 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 44 61 74  o a..    /// Dat
10e0: 65 54 69 6d 65 20 61 6e 64 20 62 69 6e 64 69 6e  eTime and bindin
10f0: 67 20 44 61 74 65 54 69 6d 65 20 70 61 72 61 6d  g DateTime param
1100: 65 74 65 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eters...    /// 
1110: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1120: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b  / <param name="k
1130: 69 6e 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ind">..    /// T
1140: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 61  he <see cref="Da
1150: 74 65 54 69 6d 65 4b 69 6e 64 22 20 2f 3e 20 74  teTimeKind" /> t
1160: 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  o be used when c
1170: 72 65 61 74 69 6e 67 20 44 61 74 65 54 69 6d 65  reating DateTime
1180: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
1190: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
11a0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
11b0: 72 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 53 74 72  ram name="fmtStr
11c0: 69 6e 67 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ing">..    /// T
11d0: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
11e0: 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
11f0: 20 70 61 72 73 69 6e 67 20 61 6e 64 20 66 6f 72   parsing and for
1200: 6d 61 74 74 69 6e 67 20 44 61 74 65 54 69 6d 65  matting DateTime
1210: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
1220: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
1230: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
1240: 72 61 6d 20 6e 61 6d 65 3d 22 64 62 22 3e 0d 0a  ram name="db">..
1250: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
1260: 76 65 20 68 61 6e 64 6c 65 20 74 6f 20 62 65 20  ve handle to be 
1270: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1280: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
1290: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
12a0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
12b0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
12c0: 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
12d0: 20 2f 2f 2f 20 54 68 65 20 66 75 6c 6c 79 20 71   /// The fully q
12e0: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61  ualified file na
12f0: 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  me associated wi
1300: 74 68 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  th <paramref nam
1310: 65 3d 22 64 62 20 22 2f 3e 2e 0d 0a 20 20 20 20  e="db "/>...    
1320: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1330: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1340: 65 3d 22 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d 0a  e="ownHandle">..
1350: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
1360: 20 69 66 20 74 68 65 20 6e 65 77 6c 79 20 63 72   if the newly cr
1370: 65 61 74 65 64 20 6f 62 6a 65 63 74 20 69 6e 73  eated object ins
1380: 74 61 6e 63 65 20 77 69 6c 6c 20 6e 65 65 64 20  tance will need 
1390: 74 6f 20 64 69 73 70 6f 73 65 0d 0a 20 20 20 20  to dispose..    
13a0: 2f 2f 2f 20 6f 66 20 3c 70 61 72 61 6d 72 65 66  /// of <paramref
13b0: 20 6e 61 6d 65 3d 22 64 62 22 20 2f 3e 20 77 68   name="db" /> wh
13c0: 65 6e 20 69 74 20 69 73 20 6e 6f 20 6c 6f 6e 67  en it is no long
13d0: 65 72 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  er needed...    
13e0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
13f0: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
1400: 65 33 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  e3(..        SQL
1410: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66  iteDateFormats f
1420: 6d 74 2c 0d 0a 20 20 20 20 20 20 20 20 44 61 74  mt,..        Dat
1430: 65 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d  eTimeKind kind,.
1440: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
1450: 66 6d 74 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  fmtString,..    
1460: 20 20 20 20 49 6e 74 50 74 72 20 64 62 2c 0d 0a      IntPtr db,..
1470: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
1480: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1490: 20 20 62 6f 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65    bool ownHandle
14a0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
14b0: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
14c0: 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 29 0d  ind, fmtString).
14d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
14e0: 69 66 20 28 64 62 20 21 3d 20 49 6e 74 50 74 72  if (db != IntPtr
14f0: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1500: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
1510: 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sql = new SQLite
1520: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
1530: 28 64 62 2c 20 6f 77 6e 48 61 6e 64 6c 65 29 3b  (db, ownHandle);
1540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66  ..            _f
1550: 69 6c 65 4e 61 6d 65 20 3d 20 66 69 6c 65 4e 61  ileName = fileNa
1560: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
1570: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
1580: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
1590: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
15a0: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
15c0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
15d0: 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
15e0: 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
15f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1600: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75    null, null, nu
1610: 6c 6c 2c 20 5f 73 71 6c 2c 20 66 69 6c 65 4e 61  ll, _sql, fileNa
1620: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
1630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1640: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
1650: 65 33 29 2c 20 66 6d 74 2c 20 6b 69 6e 64 2c 20  e3), fmt, kind, 
1660: 66 6d 74 53 74 72 69 6e 67 2c 20 64 62 2c 20 66  fmtString, db, f
1670: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1680: 20 20 20 20 20 20 20 20 20 20 6f 77 6e 48 61 6e            ownHan
1690: 64 6c 65 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20  dle }));..      
16a0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
16b0: 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
1720: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
1730: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
1740: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1750: 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20   disposed;..    
1760: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
1770: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
1780: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d  throw */..    {.
1790: 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
17a0: 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
17b0: 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20  if (disposed).. 
17c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
17d0: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
17e0: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70  sedException(typ
17f0: 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d  eof(SQLite3).Nam
1800: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
1810: 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1880: 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
1890: 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ide void Dispose
18a0: 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
18b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
18c0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
18d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
18e0: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
18f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
1910: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1930: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1940: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1980: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1990: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
19a0: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
19b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
19c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
19f0: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a30: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
1a40: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
1a50: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
1a60: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa0: 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45  ////....#if INTE
1ab0: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
1ac0: 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E..             
1ad0: 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65     DisposeModule
1ae0: 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  s();..#endif....
1af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b00: 43 6c 6f 73 65 28 74 72 75 65 29 3b 20 2f 2a 20  Close(true); /* 
1b10: 44 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f  Disposing, canno
1b20: 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 20 20 20  t throw. */..   
1b30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1b40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
1b50: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
1b60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
1b70: 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70  ase.Dispose(disp
1b80: 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20  osing);....     
1b90: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1ba0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1bb0: 45 76 65 72 79 74 68 69 6e 67 20 73 68 6f 75 6c  Everything shoul
1bc0: 64 20 62 65 20 66 75 6c 6c 79 20 64 69 73 70 6f  d be fully dispo
1bd0: 73 65 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e  sed at this poin
1be0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
1bf0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1c00: 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
1c10: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1c20: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
1c30: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
1ca0: 20 44 45 42 55 47 0d 0a 20 20 20 20 70 75 62 6c   DEBUG..    publ
1cb0: 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  ic override stri
1cc0: 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20  ng ToString().. 
1cd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
1ce0: 74 75 72 6e 20 48 65 6c 70 65 72 4d 65 74 68 6f  turn HelperMetho
1cf0: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
1d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 75  ..            Cu
1d10: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
1d20: 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 66 69 6c  antCulture, "fil
1d30: 65 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 6c 61  eName = {0}, fla
1d40: 67 73 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  gs = {1}",..    
1d50: 20 20 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d          _fileNam
1d60: 65 2c 20 5f 66 6c 61 67 73 29 3b 0d 0a 20 20 20  e, _flags);..   
1d70: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
1d80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de0: 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  /....#if INTEROP
1df0: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a  _VIRTUAL_TABLE..
1e00: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1e10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
1e20: 6d 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20  method attempts 
1e30: 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 61 6c  to dispose of al
1e40: 6c 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  l the <see cref=
1e50: 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f  "SQLiteModule" /
1e60: 3e 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20 2f  > derived..    /
1e70: 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  // object instan
1e80: 63 65 73 20 63 75 72 72 65 6e 74 6c 79 20 61 73  ces currently as
1e90: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1ea0: 65 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73  e native databas
1eb0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
1ec0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1ed0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  >..    private v
1ee0: 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c  oid DisposeModul
1ef0: 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  es()..    {..   
1f00: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1f10: 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61 6e 79   // NOTE: If any
1f20: 20 6d 6f 64 75 6c 65 73 20 77 65 72 65 20 63 72   modules were cr
1f30: 65 61 74 65 64 2c 20 61 74 74 65 6d 70 74 20 74  eated, attempt t
1f40: 6f 20 64 69 73 70 6f 73 65 20 6f 66 0d 0a 20 20  o dispose of..  
1f50: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
1f60: 68 65 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63  hem now.  This c
1f70: 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 20  ode is designed 
1f80: 74 6f 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e  to avoid throwin
1f90: 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  g..        //   
1fa0: 20 20 20 20 65 78 63 65 70 74 69 6f 6e 73 20 75      exceptions u
1fb0: 6e 6c 65 73 73 20 74 68 65 20 44 69 73 70 6f 73  nless the Dispos
1fc0: 65 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  e method of the 
1fd0: 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20  module..        
1fe0: 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20  //       itself 
1ff0: 74 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74  throws an except
2000: 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
2010: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d  ..        if (_m
2020: 6f 64 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d  odules != null).
2030: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2040: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
2050: 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74  (KeyValuePair<st
2060: 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75  ring, SQLiteModu
2070: 6c 65 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64  le> pair in _mod
2080: 75 6c 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ules)..         
2090: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20a0: 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75        SQLiteModu
20b0: 6c 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72  le module = pair
20c0: 2e 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  .Value;....     
20d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
20e0: 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2100: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
2110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2120: 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28   module.Dispose(
2130: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2140: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2150: 20 5f 6d 6f 64 75 6c 65 73 2e 43 6c 65 61 72 28   _modules.Clear(
2160: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
2170: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
2180: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74  ///....    // It
21f0: 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79   isn't necessary
2200: 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20   to cleanup any 
2210: 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20  functions we've 
2220: 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66 20  registered.  If 
2230: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
2240: 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74      // goes to t
2250: 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72  he pool and is r
2260: 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65 72  esurrected later
2270: 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64 20  , re-registered 
2280: 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f  functions will o
2290: 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20  verwrite the..  
22a0: 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75    // previous fu
22b0: 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51  nctions.  The SQ
22c0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b  LiteFunctionCook
22d0: 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61  ieHandle will ta
22e0: 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65 69  ke care of freei
22f0: 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20  ng unmanaged..  
2300: 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62    // resources b
2310: 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20  elonging to the 
2320: 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73  previously-regis
2330: 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e  tered functions.
2340: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
2350: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f  verride void Clo
2360: 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e  se(bool disposin
2370: 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  g)..    {..     
2380: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
2390: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
23a0: 20 20 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c         if (!_sql
23b0: 2e 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20  .OwnHandle)..   
23c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23d0: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
23e0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
23f0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20      return;..   
2400: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2410: 20 20 20 20 20 20 62 6f 6f 6c 20 75 6e 62 69 6e        bool unbin
2420: 64 46 75 6e 63 74 69 6f 6e 73 20 3d 20 28 28 5f  dFunctions = ((_
2430: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
2440: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e  nnectionFlags.Un
2450: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43  bindFunctionsOnC
2460: 6c 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lose)..         
2470: 20 20 20 20 20 20 20 3d 3d 20 53 51 4c 69 74 65         == SQLite
2480: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
2490: 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 4f  UnbindFunctionsO
24a0: 6e 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  nClose);....    
24b0: 20 20 72 65 74 72 79 3a 0d 0a 0d 0a 20 20 20 20    retry:....    
24c0: 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f        if (_usePo
24d0: 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ol)..          {
24e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24f0: 69 66 20 28 53 51 4c 69 74 65 42 61 73 65 2e 52  if (SQLiteBase.R
2500: 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f  esetConnection(_
2510: 73 71 6c 2c 20 5f 73 71 6c 2c 20 21 64 69 73 70  sql, _sql, !disp
2520: 6f 73 69 6e 67 29 20 26 26 0d 0a 20 20 20 20 20  osing) &&..     
2530: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 68               Unh
2540: 6f 6f 6b 4e 61 74 69 76 65 43 61 6c 6c 62 61 63  ookNativeCallbac
2550: 6b 73 28 74 72 75 65 2c 20 21 64 69 73 70 6f 73  ks(true, !dispos
2560: 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ing))..         
2570: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2580: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 6e            if (un
2590: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a  bindFunctions)..
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
25d0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e  QLiteFunction.Un
25e0: 62 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f 6e 73  bindAllFunctions
25f0: 28 74 68 69 73 2c 20 5f 66 6c 61 67 73 2c 20 66  (this, _flags, f
2600: 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  alse))..        
2610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2620: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
2630: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
2640: 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2660: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
2670: 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
2680: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
2690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
26b0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
26c0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e0: 20 20 20 20 20 20 20 20 20 20 22 55 6e 62 69 6e            "Unbin
26f0: 64 46 75 6e 63 74 69 6f 6e 73 20 28 50 6f 6f 6c  dFunctions (Pool
2700: 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c  ) Success: {0}",
2710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2730: 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29  HandleToString()
2740: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
2750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2760: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2770: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2790: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
27a0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
27b0: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
27c0: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
27d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
27e0: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
27f0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
2800: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2820: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
2830: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
2840: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
2850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2860: 20 20 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74      "UnbindFunct
2870: 69 6f 6e 73 20 28 50 6f 6f 6c 29 20 46 61 69 6c  ions (Pool) Fail
2880: 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ure: {0}",..    
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
28b0: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
28c0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f0: 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52    }....#if INTER
2900: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
2910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2920: 20 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c      DisposeModul
2930: 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  es();..#endif...
2940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2950: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
2960: 69 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c  ionPool.Add(_fil
2970: 65 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f  eName, _sql, _po
2980: 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20  olVersion);.... 
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
29b0: 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c  n.OnChanged(null
29c0: 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e  , new Connection
29d0: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
2a00: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
2a10: 65 64 54 6f 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20  edToPool, null, 
2a20: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
2a40: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 5f  l, null, _sql, _
2a50: 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62  fileName, new ob
2a60: 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ject[] {..      
2a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a80: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c  typeof(SQLite3),
2a90: 20 21 64 69 73 70 6f 73 69 6e 67 2c 20 5f 66 69   !disposing, _fi
2aa0: 6c 65 4e 61 6d 65 2c 20 5f 70 6f 6f 6c 56 65 72  leName, _poolVer
2ab0: 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23 69 66  sion }));....#if
2ac0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
2ad0: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
2ae0: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
2af0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2b00: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
2b10: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
2b20: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2b30: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
2b40: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
2b50: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
2b70: 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75 63 63  lose (Pool) Succ
2b80: 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ess: {0}",..    
2b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba0: 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
2bb0: 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
2bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
2be0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2bf0: 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
2c00: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2c10: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c30: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
2c40: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
2c50: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c70: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
2c80: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca0: 20 20 20 20 20 20 22 43 6c 6f 73 65 20 28 50 6f        "Close (Po
2cb0: 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b 30 7d  ol) Failure: {0}
2cc0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2cd0: 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
2ce0: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
2cf0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
2d00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d20: 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 63   // NOTE: This c
2d30: 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 6e 6e 6f 74  onnection cannot
2d40: 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
2d50: 20 70 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 20 20   pool;..        
2d60: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2d70: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75     therefore, ju
2d80: 73 74 20 75 73 65 20 74 68 65 20 6e 6f 72 6d 61  st use the norma
2d90: 6c 20 64 69 73 70 6f 73 61 6c 0d 0a 20 20 20 20  l disposal..    
2da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2db0: 20 20 20 20 20 20 20 70 72 6f 63 65 64 75 72 65         procedure
2dc0: 20 6f 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20 20   on it...       
2dd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df0: 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73   _usePool = fals
2e00: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e10: 20 20 20 20 20 20 67 6f 74 6f 20 72 65 74 72 79        goto retry
2e20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2e30: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
2e40: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d  .          else.
2e50: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
2e70: 47 4e 4f 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20  GNORED */..     
2e80: 20 20 20 20 20 20 20 20 20 55 6e 68 6f 6f 6b 4e           UnhookN
2e90: 61 74 69 76 65 43 61 6c 6c 62 61 63 6b 73 28 64  ativeCallbacks(d
2ea0: 69 73 70 6f 73 69 6e 67 2c 20 21 64 69 73 70 6f  isposing, !dispo
2eb0: 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sing);....      
2ec0: 20 20 20 20 20 20 20 20 69 66 20 28 75 6e 62 69          if (unbi
2ed0: 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20  ndFunctions)..  
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f00: 20 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74   if (SQLiteFunct
2f10: 69 6f 6e 2e 55 6e 62 69 6e 64 41 6c 6c 46 75 6e  ion.UnbindAllFun
2f20: 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 5f 66 6c  ctions(this, _fl
2f30: 61 67 73 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20  ags, false))..  
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f50: 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  {..#if !NET_COMP
2f60: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
2f70: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
2f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f90: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
2fa0: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
2fb0: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
2fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
2fe0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
2ff0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
3000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3010: 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73  "UnbindFunctions
3020: 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c 0d   Success: {0}",.
3030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3040: 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c             Handl
3050: 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a  eToString()));..
3060: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
3070: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
3090: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
30a0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e         {..#if !N
30b0: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
30c0: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
30d0: 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N..             
30e0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
30f0: 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
3100: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
3110: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
3120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3130: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
3140: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
3150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3160: 20 20 20 20 20 20 20 22 55 6e 62 69 6e 64 46 75         "UnbindFu
3170: 6e 63 74 69 6f 6e 73 20 46 61 69 6c 75 72 65 3a  nctions Failure:
3180: 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a0: 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
31b0: 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
31e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
31f0: 20 20 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73       _sql.Dispos
3200: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
3210: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71  }..          _sq
3220: 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  l = null;..     
3230: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
3240: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32a0: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
32b0: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
32c0: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
32d0: 20 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e   protected strin
32e0: 67 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67  g HandleToString
32f0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
3300: 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
3310: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3320: 20 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e    return "<null>
3330: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  ";....        re
3340: 74 75 72 6e 20 5f 73 71 6c 2e 54 6f 53 74 72 69  turn _sql.ToStri
3350: 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65  ng();..    }..#e
3360: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  ndif....    ////
3370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
33d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
33e0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
33f0: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
3400: 74 69 6d 65 73 20 74 68 65 20 3c 73 65 65 20 63  times the <see c
3410: 72 65 66 3d 22 43 61 6e 63 65 6c 22 20 2f 3e 20  ref="Cancel" /> 
3420: 6d 65 74 68 6f 64 20 68 61 73 20 62 65 65 6e 0d  method has been.
3430: 0a 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 2e  .    /// called.
3440: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3450: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
3460: 65 20 69 6e 74 20 47 65 74 43 61 6e 63 65 6c 43  e int GetCancelC
3470: 6f 75 6e 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ount()..    {.. 
3480: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
3490: 74 65 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70 61 72  terlocked.Compar
34a0: 65 45 78 63 68 61 6e 67 65 28 72 65 66 20 5f 63  eExchange(ref _c
34b0: 61 6e 63 65 6c 43 6f 75 6e 74 2c 20 30 2c 20 30  ancelCount, 0, 0
34c0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
34d0: 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3530: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
3540: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
3550: 68 69 73 20 6d 65 74 68 6f 64 20 64 65 74 65 72  his method deter
3560: 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
3570: 20 6e 6f 74 20 61 20 3c 73 65 65 20 63 72 65 66   not a <see cref
3580: 3d 22 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  ="SQLiteExceptio
3590: 6e 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 77  n" />..    /// w
35a0: 69 74 68 20 61 20 72 65 74 75 72 6e 20 63 6f 64  ith a return cod
35b0: 65 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22  e of <see cref="
35c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
35d0: 49 6e 74 65 72 72 75 70 74 22 20 2f 3e 20 73 68  Interrupt" /> sh
35e0: 6f 75 6c 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  ould..    /// be
35f0: 20 74 68 72 6f 77 6e 20 61 66 74 65 72 20 6d 61   thrown after ma
3600: 6b 69 6e 67 20 61 20 63 61 6c 6c 20 69 6e 74 6f  king a call into
3610: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
3620: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f   library...    /
3630: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
3640: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
3650: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
3660: 72 6f 20 69 66 20 61 20 3c 73 65 65 20 63 72 65  ro if a <see cre
3670: 66 3d 22 53 51 4c 69 74 65 45 78 63 65 70 74 69  f="SQLiteExcepti
3680: 6f 6e 22 20 2f 3e 20 74 6f 20 62 65 20 74 68 72  on" /> to be thr
3690: 6f 77 6e 2e 20 20 54 68 69 73 20 6d 65 74 68 6f  own.  This metho
36a0: 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20  d..    /// will 
36b0: 6f 6e 6c 79 20 72 65 74 75 72 6e 20 6e 6f 6e 2d  only return non-
36c0: 7a 65 72 6f 20 69 66 20 74 68 65 20 3c 73 65 65  zero if the <see
36d0: 20 63 72 65 66 3d 22 43 61 6e 63 65 6c 22 20 2f   cref="Cancel" /
36e0: 3e 20 6d 65 74 68 6f 64 20 77 61 73 20 63 61 6c  > method was cal
36f0: 6c 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f 6e 65  led..    /// one
3700: 20 6f 72 20 6d 6f 72 65 20 74 69 6d 65 73 20 64   or more times d
3710: 75 72 69 6e 67 20 61 20 63 61 6c 6c 20 69 6e 74  uring a call int
3720: 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  o the SQLite cor
3730: 65 20 6c 69 62 72 61 72 79 20 28 65 2e 67 2e 20  e library (e.g. 
3740: 77 68 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 74 68  when..    /// th
3750: 65 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  e sqlite3_prepar
3760: 65 2a 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f  e*() or sqlite3_
3770: 73 74 65 70 28 29 20 41 50 49 73 20 61 72 65 20  step() APIs are 
3780: 75 73 65 64 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20  used)...    /// 
3790: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
37a0: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 53 68 6f  private bool Sho
37b0: 75 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65  uldThrowForCance
37c0: 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  l()..    {..    
37d0: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 43 61      return GetCa
37e0: 6e 63 65 6c 43 6f 75 6e 74 28 29 20 3e 20 30 3b  ncelCount() > 0;
37f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
3800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
3860: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3870: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 73  ry>..    /// Res
3880: 65 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ets the value of
3890: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
38a0: 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 22 20 2f 3e  _cancelCount" />
38b0: 20 66 69 65 6c 64 2e 0d 0a 20 20 20 20 2f 2f 2f   field...    ///
38c0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
38d0: 20 70 72 69 76 61 74 65 20 69 6e 74 20 52 65 73   private int Res
38e0: 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d  etCancelCount().
38f0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
3900: 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b  return Interlock
3910: 65 64 2e 43 6f 6d 70 61 72 65 45 78 63 68 61 6e  ed.CompareExchan
3920: 67 65 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f  ge(ref _cancelCo
3930: 75 6e 74 2c 20 30 2c 20 5f 63 61 6e 63 65 6c 43  unt, 0, _cancelC
3940: 6f 75 6e 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ount);..    }...
3950: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
3960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
39c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
39d0: 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 69  // Attempts to i
39e0: 6e 74 65 72 72 75 70 74 20 74 68 65 20 71 75 65  nterrupt the que
39f0: 72 79 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  ry currently exe
3a00: 63 75 74 69 6e 67 20 6f 6e 20 74 68 65 20 61 73  cuting on the as
3a10: 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f  sociated..    //
3a20: 2f 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73  / native databas
3a30: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
3a40: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3a50: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
3a60: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 61  override void Ca
3a70: 6e 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ncel()..    {.. 
3a80: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
3a90: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  {..        // do
3aa0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
3ab0: 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c   }..      finall
3ac0: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
3ad0: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
3ae0: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
3af0: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 65 72  {..        Inter
3b00: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
3b10: 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e  (ref _cancelCoun
3b20: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  t);..        Uns
3b30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
3b40: 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75  .sqlite3_interru
3b50: 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20  pt(_sql);..     
3b60: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
3b70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3b80: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e      /// This fun
3b90: 63 74 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73  ction binds a us
3ba0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
3bb0: 69 6f 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65  ion to the conne
3bc0: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
3bd0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3be0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
3bf0: 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  "functionAttribu
3c00: 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  te">..    /// Th
3c10: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
3c20: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
3c30: 62 75 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69  bute"/> object i
3c40: 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69  nstance containi
3c50: 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20  ng..    /// the 
3c60: 6d 65 74 61 64 61 74 61 20 66 6f 72 20 74 68 65  metadata for the
3c70: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
3c80: 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bound...    /// 
3c90: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
3ca0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
3cb0: 75 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f  unction">..    /
3cc0: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
3cd0: 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  ="SQLiteFunction
3ce0: 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  "/> object insta
3cf0: 6e 63 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  nce that impleme
3d00: 6e 74 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  nts the..    ///
3d10: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
3d20: 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bound...    /// 
3d30: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
3d40: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
3d50: 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
3d60: 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
3d70: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61  ated with the pa
3d80: 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  rent connection 
3d90: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
3da0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
3db0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
3dc0: 20 76 6f 69 64 20 42 69 6e 64 46 75 6e 63 74 69   void BindFuncti
3dd0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  on(..        SQL
3de0: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
3df0: 62 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74  bute functionAtt
3e00: 72 69 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20  ribute,..       
3e10: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20   SQLiteFunction 
3e20: 66 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  function,..     
3e30: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
3e40: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a  ionFlags flags..
3e50: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
3e60: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 75  ..        if (fu
3e70: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
3e80: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
3e90: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
3ea0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
3eb0: 70 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 41  ption("functionA
3ec0: 74 74 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a 20  ttribute");.... 
3ed0: 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63 74         if (funct
3ee0: 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
3ef0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
3f00: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
3f10: 45 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63 74  Exception("funct
3f20: 69 6f 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion");....      
3f30: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
3f40: 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 74 68  .BindFunction(th
3f50: 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  is, functionAttr
3f60: 69 62 75 74 65 2c 20 66 75 6e 63 74 69 6f 6e 2c  ibute, function,
3f70: 20 66 6c 61 67 73 29 3b 0d 0a 0d 0a 20 20 20 20   flags);....    
3f80: 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f      if (_functio
3f90: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
3fa0: 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69           _functi
3fb0: 6f 6e 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  ons = new Dictio
3fc0: 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74  nary<SQLiteFunct
3fd0: 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51  ionAttribute, SQ
3fe0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29 3b  LiteFunction>();
3ff0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 66 75 6e  ....        _fun
4000: 63 74 69 6f 6e 73 5b 66 75 6e 63 74 69 6f 6e 41  ctions[functionA
4010: 74 74 72 69 62 75 74 65 5d 20 3d 20 66 75 6e 63  ttribute] = func
4020: 74 69 6f 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tion;..    }....
4030: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4040: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
4050: 66 75 6e 63 74 69 6f 6e 20 62 69 6e 64 73 20 61  function binds a
4060: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75   user-defined fu
4070: 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 63 6f  nction to the co
4080: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
4090: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
40a0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
40b0: 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 41 74 74 72  me="functionAttr
40c0: 69 62 75 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ibute">..    ///
40d0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
40e0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
40f0: 74 72 69 62 75 74 65 22 2f 3e 20 6f 62 6a 65 63  tribute"/> objec
4100: 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61  t instance conta
4110: 69 6e 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74  ining..    /// t
4120: 68 65 20 6d 65 74 61 64 61 74 61 20 66 6f 72 20  he metadata for 
4130: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
4140: 62 65 20 75 6e 62 6f 75 6e 64 2e 0d 0a 20 20 20  be unbound...   
4150: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
4160: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4170: 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20  me="flags">..   
4180: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 61   /// The flags a
4190: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
41a0: 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63  he parent connec
41b0: 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  tion object...  
41c0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
41d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
41e0: 3e 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65  >Non-zero if the
41f0: 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 75 6e   function was un
4200: 62 6f 75 6e 64 20 61 6e 64 20 72 65 6d 6f 76 65  bound and remove
4210: 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
4220: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
4230: 69 64 65 20 62 6f 6f 6c 20 55 6e 62 69 6e 64 46  ide bool UnbindF
4240: 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
4250: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
4260: 41 74 74 72 69 62 75 74 65 20 66 75 6e 63 74 69  Attribute functi
4270: 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d 0a 20 20  onAttribute,..  
4280: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
4290: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
42a0: 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  s..        )..  
42b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
42c0: 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  (functionAttribu
42d0: 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  te == null)..   
42e0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
42f0: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
4300: 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63 74 69  xception("functi
4310: 6f 6e 41 74 74 72 69 62 75 74 65 22 29 3b 0d 0a  onAttribute");..
4320: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 66  ..        if (_f
4330: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
4340: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
4350: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
4360: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
4370: 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 3b  nction function;
4380: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
4390: 5f 66 75 6e 63 74 69 6f 6e 73 2e 54 72 79 47 65  _functions.TryGe
43a0: 74 56 61 6c 75 65 28 66 75 6e 63 74 69 6f 6e 41  tValue(functionA
43b0: 74 74 72 69 62 75 74 65 2c 20 6f 75 74 20 66 75  ttribute, out fu
43c0: 6e 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  nction))..      
43d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
43e0: 20 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74   if (SQLiteFunct
43f0: 69 6f 6e 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69  ion.UnbindFuncti
4400: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
4410: 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 66           this, f
4420: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
4430: 2c 20 66 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67  , function, flag
4440: 73 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  s) &&..         
4450: 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e         _function
4460: 73 2e 52 65 6d 6f 76 65 28 66 75 6e 63 74 69 6f  s.Remove(functio
4470: 6e 41 74 74 72 69 62 75 74 65 29 29 0d 0a 20 20  nAttribute))..  
4480: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
44a0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
44b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
44c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
44d0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
44e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
44f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
4500: 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20  ing Version..   
4510: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
4520: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4530: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72  return SQLiteVer
4540: 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  sion;..      }..
4550: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4560: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
4570: 6e 74 20 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72  nt VersionNumber
4580: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
4590: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
45a0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
45b0: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b  teVersionNumber;
45c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
45d0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
45e0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
45f0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a  efineConstants..
4600: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
4610: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
4620: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
4630: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
4640: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
4650: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
4660: 20 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67      IList<string
4670: 3e 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44  > list = SQLiteD
4680: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f  efineConstants.O
4690: 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20  ptionList;....  
46a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69            if (li
46b0: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
46c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
46e0: 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d  ach (string elem
46f0: 65 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20  ent in list)..  
4700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4720: 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
4730: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4750: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
4760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4770: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
4780: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
4790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47a0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
47b0: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
47d0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65  esult.Append(ele
47e0: 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
47f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4800: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4810: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
4820: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
4830: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
4840: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4850: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
4860: 67 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d  g SQLiteVersion.
4870: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
4880: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
4890: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
48a0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
48b0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
48c0: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  te3_libversion()
48d0: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  , -1);..      }.
48e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
48f0: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e  ternal static in
4900: 74 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  t SQLiteVersionN
4910: 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  umber..    {..  
4920: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
4930: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4940: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4950: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
4960: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
4970: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
4980: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4990: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
49a0: 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a  SQLiteSourceId..
49b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
49c0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
49d0: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
49e0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
49f0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
4a00: 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d  e3_sourceid(), -
4a10: 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  1);..      }..  
4a20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4a30: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
4a40: 67 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f  g SQLiteCompileO
4a50: 70 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20  ptions..    {.. 
4a60: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
4a70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4a80: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
4a90: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
4aa0: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a  ringBuilder();..
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
4ac0: 69 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20 20  index = 0;..    
4ad0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a          IntPtr z
4ae0: 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  Value = UnsafeNa
4af0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4b00: 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
4b10: 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b 0d  n_get(index++);.
4b20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ...            w
4b30: 68 69 6c 65 20 28 7a 56 61 6c 75 65 20 21 3d 20  hile (zValue != 
4b40: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
4b50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4b70: 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e  (result.Length >
4b80: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
4b90: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
4ba0: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a  Append(' ');....
4bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bc0: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 55 54  result.Append(UT
4bd0: 46 38 54 6f 53 74 72 69 6e 67 28 7a 56 61 6c 75  F8ToString(zValu
4be0: 65 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  e, -1));..      
4bf0: 20 20 20 20 20 20 20 20 20 20 7a 56 61 6c 75 65            zValue
4c00: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4c10: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
4c20: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
4c30: 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 20 20 20 20  (index++);..    
4c40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4c50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4c60: 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28  result.ToString(
4c70: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
4c80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4c90: 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69  rnal static stri
4ca0: 6e 67 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f  ng InteropVersio
4cb0: 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  n..    {..      
4cc0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
4cd0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
4ce0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
4cf0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
4d00: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
4d10: 74 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65  tiveMethods.inte
4d20: 72 6f 70 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  rop_libversion()
4d30: 2c 20 2d 31 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  , -1);..#else.. 
4d40: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4d50: 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d  n null;..#endif.
4d60: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
4d70: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4d80: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
4d90: 49 6e 74 65 72 6f 70 53 6f 75 72 63 65 49 64 0d  InteropSourceId.
4da0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4db0: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
4dc0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
4dd0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
4de0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
4df0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
4e00: 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f  veMethods.intero
4e10: 70 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d 31  p_sourceid(), -1
4e20: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
4e30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
4e40: 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ll;..#endif..   
4e50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4e60: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
4e70: 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65  atic string Inte
4e80: 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  ropCompileOption
4e90: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
4ea0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
4eb0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
4ec0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
4ed0: 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
4ee0: 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  r result = new S
4ef0: 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d  tringBuilder();.
4f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
4f10: 20 69 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20   index = 0;..   
4f20: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
4f30: 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e  zValue = UnsafeN
4f40: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74  ativeMethods.int
4f50: 65 72 6f 70 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  erop_compileopti
4f60: 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b  on_get(index++);
4f70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4f80: 77 68 69 6c 65 20 28 7a 56 61 6c 75 65 20 21 3d  while (zValue !=
4f90: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
4fa0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4fc0: 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20   (result.Length 
4fd0: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
4fe0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
4ff0: 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d  .Append(' ');...
5000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5010: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 55   result.Append(U
5020: 54 46 38 54 6f 53 74 72 69 6e 67 28 7a 56 61 6c  TF8ToString(zVal
5030: 75 65 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20  ue, -1));..     
5040: 20 20 20 20 20 20 20 20 20 20 20 7a 56 61 6c 75             zValu
5050: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
5060: 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f  Methods.interop_
5070: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
5080: 74 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 20 20 20  t(index++);..   
5090: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
50a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
50b0: 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67   result.ToString
50c0: 28 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ();..#else..    
50d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
50e0: 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ull;..#endif..  
50f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
5100: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
5110: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74  verride bool Aut
5120: 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a  oCommit..    {..
5130: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
5140: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
5150: 72 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28  rn IsAutocommit(
5160: 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20  _sql, _sql);..  
5170: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
5180: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
5190: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 52 65 61  rride bool IsRea
51a0: 64 4f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  dOnly(..        
51b0: 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20  string name..   
51c0: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
51d0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44         IntPtr pD
51e0: 62 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a  bName = IntPtr.Z
51f0: 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
5200: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
5210: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5220: 6e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  name != null).. 
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
5240: 44 62 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53  DbName = SQLiteS
5250: 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
5260: 46 72 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29  FromString(name)
5270: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5280: 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 55 6e   int result = Un
5290: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
52a0: 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 61  s.sqlite3_db_rea
52b0: 64 6f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  donly(..        
52c0: 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 44          _sql, pD
52d0: 62 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  bName);....     
52e0: 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
52f0: 74 20 3d 3d 20 2d 31 29 20 2f 2a 20 64 61 74 61  t == -1) /* data
5300: 62 61 73 65 20 6e 6f 74 20 66 6f 75 6e 64 20 2a  base not found *
5310: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
5320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5330: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
5340: 74 65 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70  teException(Help
5350: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
5360: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
5370: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
5380: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
5390: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64                "d
53b0: 61 74 61 62 61 73 65 20 5c 22 7b 30 7d 5c 22 20  atabase \"{0}\" 
53c0: 6e 6f 74 20 66 6f 75 6e 64 22 2c 20 6e 61 6d 65  not found", name
53d0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
53e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
53f0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 20    return result 
5400: 3d 3d 20 30 20 3f 20 66 61 6c 73 65 20 3a 20 74  == 0 ? false : t
5410: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
5420: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
5430: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5440: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 44 62           if (pDb
5450: 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  Name != IntPtr.Z
5460: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
5470: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5480: 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72       SQLiteMemor
5490: 79 2e 46 72 65 65 28 70 44 62 4e 61 6d 65 29 3b  y.Free(pDbName);
54a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
54b0: 20 20 70 44 62 4e 61 6d 65 20 3d 20 49 6e 74 50    pDbName = IntP
54c0: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
54d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
54e0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
54f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5500: 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e 73 65  de long LastInse
5510: 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b 0d 0a  rtRowId..    {..
5520: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
5530: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
5540: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5550: 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  RK..        retu
5560: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
5570: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
5580: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
5590: 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 69 66 20 21  (_sql);..#elif !
55a0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
55b0: 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f  .        long ro
55c0: 77 49 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  wId = 0;..      
55d0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
55e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61  thods.sqlite3_la
55f0: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 5f  st_insert_rowid_
5600: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 72 65  interop(_sql, re
5610: 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20  f rowId);..     
5620: 20 20 20 72 65 74 75 72 6e 20 72 6f 77 49 64 3b     return rowId;
5630: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
5640: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
5650: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
5660: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
5670: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
5680: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
5690: 65 72 72 69 64 65 20 69 6e 74 20 43 68 61 6e 67  erride int Chang
56a0: 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  es..    {..     
56b0: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23   get..      {..#
56c0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
56d0: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ARD..        ret
56e0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
56f0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5700: 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28  changes_interop(
5710: 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  _sql);..#else.. 
5720: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
5730: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5740: 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  s.sqlite3_change
5750: 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64 69 66  s(_sql);..#endif
5760: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
5770: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5780: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d   override long M
5790: 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20 20 7b  emoryUsed..    {
57a0: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
57b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
57c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61        return Sta
57d0: 74 69 63 4d 65 6d 6f 72 79 55 73 65 64 3b 0d 0a  ticMemoryUsed;..
57e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
57f0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5800: 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 53 74 61   static long Sta
5810: 74 69 63 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20  ticMemoryUsed.. 
5820: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
5830: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  t..        {..#i
5840: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
5850: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
5860: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5870: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5880: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d  hods.sqlite3_mem
5890: 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a 23 65 6c  ory_used();..#el
58a0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
58b0: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
58c0: 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b   long bytes = 0;
58d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e  ..            Un
58e0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
58f0: 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79  s.sqlite3_memory
5900: 5f 75 73 65 64 5f 69 6e 74 65 72 6f 70 28 72 65  _used_interop(re
5910: 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20  f bytes);..     
5920: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79         return by
5930: 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tes;..#else..   
5940: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
5950: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
5960: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
5970: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
5980: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
5990: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
59a0: 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68   long MemoryHigh
59b0: 77 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  water..    {..  
59c0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
59d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
59e0: 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 4d    return StaticM
59f0: 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 3b 0d  emoryHighwater;.
5a00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5a10: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
5a20: 6c 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 53 74  l static long St
5a30: 61 74 69 63 4d 65 6d 6f 72 79 48 69 67 68 77 61  aticMemoryHighwa
5a40: 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ter..    {..    
5a50: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
5a60: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
5a70: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5a80: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
5a90: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
5aa0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5ab0: 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61  e3_memory_highwa
5ac0: 74 65 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21  ter(0);..#elif !
5ad0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
5ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e  .            lon
5af0: 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20  g bytes = 0;..  
5b00: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
5b10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5b20: 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67  lite3_memory_hig
5b30: 68 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 30  hwater_interop(0
5b40: 2c 20 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20  , ref bytes);.. 
5b50: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5b60: 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d  n bytes;..#else.
5b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
5b80: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
5b90: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
5ba0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
5bb0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
5bc0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5bd0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
5be0: 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  s non-zero if th
5bf0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61 74  e underlying nat
5c00: 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ive connection h
5c10: 61 6e 64 6c 65 20 69 73 20 6f 77 6e 65 64 0d 0a  andle is owned..
5c20: 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 69 73 20      /// by this 
5c30: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f  instance...    /
5c40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
5c50: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
5c60: 72 69 64 65 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e  ride bool OwnHan
5c70: 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  dle..    {..    
5c80: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
5c90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5ca0: 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
5cb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5cc0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
5cd0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f  iteException("no
5ce0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
5cf0: 6c 65 20 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d  le available");.
5d00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
5d10: 65 74 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48 61  eturn _sql.OwnHa
5d20: 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ndle;..        }
5d30: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
5d40: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
5d50: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
5d60: 65 20 6c 6f 67 69 63 61 6c 20 6c 69 73 74 20 6f  e logical list o
5d70: 66 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 73 6f  f functions asso
5d80: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
5d90: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
5da0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5db0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
5dc0: 76 65 72 72 69 64 65 20 49 44 69 63 74 69 6f 6e  verride IDiction
5dd0: 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69  ary<SQLiteFuncti
5de0: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c  onAttribute, SQL
5df0: 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20 46 75 6e  iteFunction> Fun
5e00: 63 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20  ctions..    {.. 
5e10: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
5e20: 75 72 6e 20 5f 66 75 6e 63 74 69 6f 6e 73 3b 20  urn _functions; 
5e30: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
5e40: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5e50: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
5e60: 65 20 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75  e SetMemoryStatu
5e70: 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20  s(bool value).. 
5e80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
5e90: 74 75 72 6e 20 53 74 61 74 69 63 53 65 74 4d 65  turn StaticSetMe
5ea0: 6d 6f 72 79 53 74 61 74 75 73 28 76 61 6c 75 65  moryStatus(value
5eb0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5ec0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
5ed0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5ee0: 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79   StaticSetMemory
5ef0: 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75  Status(bool valu
5f00: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
5f10: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
5f20: 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
5f30: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5f40: 74 65 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d  te3_config_int(.
5f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
5f60: 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d  iteConfigOpsEnum
5f70: 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  .SQLITE_CONFIG_M
5f80: 45 4d 53 54 41 54 55 53 2c 20 76 61 6c 75 65 20  EMSTATUS, value 
5f90: 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20  ? 1 : 0);....   
5fa0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d       return rc;.
5fb0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
5fc0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5fd0: 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f   /// Attempts to
5fe0: 20 66 72 65 65 20 61 73 20 6d 75 63 68 20 68 65   free as much he
5ff0: 61 70 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73  ap memory as pos
6000: 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 64 61  sible for the da
6010: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
6020: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
6030: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
6040: 3c 72 65 74 75 72 6e 73 3e 41 20 73 74 61 6e 64  <returns>A stand
6050: 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
6060: 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72  n code (i.e. zer
6070: 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e  o for success an
6080: 64 20 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 66  d non-zero for f
6090: 61 69 6c 75 72 65 29 2e 3c 2f 72 65 74 75 72 6e  ailure).</return
60a0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
60b0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
60c0: 45 72 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73  ErrorCode Releas
60d0: 65 4d 65 6d 6f 72 79 28 29 0d 0a 20 20 20 20 7b  eMemory()..    {
60e0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
60f0: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
6100: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6110: 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 72 65  ds.sqlite3_db_re
6120: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 5f 73 71  lease_memory(_sq
6130: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  l);..        ret
6140: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
6150: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
6160: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74  ry>..    /// Att
6170: 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 4e 20  empts to free N 
6180: 62 79 74 65 73 20 6f 66 20 68 65 61 70 20 6d 65  bytes of heap me
6190: 6d 6f 72 79 20 62 79 20 64 65 61 6c 6c 6f 63 61  mory by dealloca
61a0: 74 69 6e 67 20 6e 6f 6e 2d 65 73 73 65 6e 74 69  ting non-essenti
61b0: 61 6c 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 2f  al memory..    /
61c0: 2f 2f 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 68  // allocations h
61d0: 65 6c 64 20 62 79 20 74 68 65 20 64 61 74 61 62  eld by the datab
61e0: 61 73 65 20 6c 69 62 72 61 72 79 2e 20 4d 65 6d  ase library. Mem
61f0: 6f 72 79 20 75 73 65 64 20 74 6f 20 63 61 63 68  ory used to cach
6200: 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 73  e database pages
6210: 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 69 6d 70  ..    /// to imp
6220: 72 6f 76 65 20 70 65 72 66 6f 72 6d 61 6e 63 65  rove performance
6230: 20 69 73 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f   is an example o
6240: 66 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20  f non-essential 
6250: 6d 65 6d 6f 72 79 2e 20 20 54 68 69 73 20 69 73  memory.  This is
6260: 20 61 20 6e 6f 2d 6f 70 0d 0a 20 20 20 20 2f 2f   a no-op..    //
6270: 2f 20 72 65 74 75 72 6e 69 6e 67 20 7a 65 72 6f  / returning zero
6280: 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
6290: 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 73 20  ore library was 
62a0: 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  not compiled wit
62b0: 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  h the compile-ti
62c0: 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 70 74 69  me..    /// opti
62d0: 6f 6e 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  on SQLITE_ENABLE
62e0: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
62f0: 4e 54 2e 20 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c  NT.  Optionally,
6300: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 72 65 73   attempts to res
6310: 65 74 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 2f  et and/or..    /
6320: 2f 2f 20 63 6f 6d 70 61 63 74 20 74 68 65 20 57  // compact the W
6330: 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70  in32 native heap
6340: 2c 20 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e  , if applicable.
6350: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6360: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
6370: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 42 79 74 65  aram name="nByte
6380: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
6390: 20 72 65 71 75 65 73 74 65 64 20 6e 75 6d 62 65   requested numbe
63a0: 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 66 72  r of bytes to fr
63b0: 65 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ee...    /// </p
63c0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
63d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65  param name="rese
63e0: 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  t">..    /// Non
63f0: 2d 7a 65 72 6f 20 74 6f 20 61 74 74 65 6d 70 74  -zero to attempt
6400: 20 61 20 68 65 61 70 20 72 65 73 65 74 2e 0d 0a   a heap reset...
6410: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
6420: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
6430: 20 6e 61 6d 65 3d 22 63 6f 6d 70 61 63 74 22 3e   name="compact">
6440: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
6450: 72 6f 20 74 6f 20 61 74 74 65 6d 70 74 20 68 65  ro to attempt he
6460: 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 2e 0d 0a  ap compaction...
6470: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
6480: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
6490: 20 6e 61 6d 65 3d 22 6e 46 72 65 65 22 3e 0d 0a   name="nFree">..
64a0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
64b0: 65 72 20 6f 66 20 62 79 74 65 73 20 61 63 74 75  er of bytes actu
64c0: 61 6c 6c 79 20 66 72 65 65 64 2e 20 20 54 68 69  ally freed.  Thi
64d0: 73 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 7a  s value may be z
64e0: 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ero...    /// </
64f0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
6500: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73  <param name="res
6510: 65 74 4f 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  etOk">..    /// 
6520: 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20  This value will 
6530: 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  be non-zero if t
6540: 68 65 20 68 65 61 70 20 72 65 73 65 74 20 77 61  he heap reset wa
6550: 73 20 73 75 63 63 65 73 73 66 75 6c 2e 0d 0a 20  s successful... 
6560: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6570: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6580: 6e 61 6d 65 3d 22 6e 4c 61 72 67 65 73 74 22 3e  name="nLargest">
6590: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 69  ..    /// The si
65a0: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
65b0: 74 20 63 6f 6d 6d 69 74 74 65 64 20 66 72 65 65  t committed free
65c0: 20 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 68 65   block in the he
65d0: 61 70 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20  ap, in bytes... 
65e0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75     /// This valu
65f0: 65 20 77 69 6c 6c 20 62 65 20 7a 65 72 6f 20 75  e will be zero u
6600: 6e 6c 65 73 73 20 68 65 61 70 20 63 6f 6d 70 61  nless heap compa
6610: 63 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64  ction is enabled
6620: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
6630: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
6640: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
6650: 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
6660: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 28 69  e return code (i
6670: 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75 63  .e. zero for suc
6680: 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  cess and non-zer
6690: 6f 0d 0a 20 20 20 20 2f 2f 2f 20 66 6f 72 20 66  o..    /// for f
66a0: 61 69 6c 75 72 65 29 2e 0d 0a 20 20 20 20 2f 2f  ailure)...    //
66b0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
66c0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
66d0: 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
66e0: 65 20 53 74 61 74 69 63 52 65 6c 65 61 73 65 4d  e StaticReleaseM
66f0: 65 6d 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  emory(..        
6700: 69 6e 74 20 6e 42 79 74 65 73 2c 0d 0a 20 20 20  int nBytes,..   
6710: 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 2c       bool reset,
6720: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63  ..        bool c
6730: 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20  ompact,..       
6740: 20 72 65 66 20 69 6e 74 20 6e 46 72 65 65 2c 0d   ref int nFree,.
6750: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
6760: 6c 20 72 65 73 65 74 4f 6b 2c 0d 0a 20 20 20 20  l resetOk,..    
6770: 20 20 20 20 72 65 66 20 75 69 6e 74 20 6e 4c 61      ref uint nLa
6780: 72 67 65 73 74 0d 0a 20 20 20 20 20 20 20 20 29  rgest..        )
6790: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
67a0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
67b0: 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
67c0: 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20  rCode.Ok;....   
67d0: 20 20 20 20 20 69 6e 74 20 6e 46 72 65 65 4c 6f       int nFreeLo
67e0: 63 61 6c 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  cal = UnsafeNati
67f0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6800: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
6810: 28 6e 42 79 74 65 73 29 3b 0d 0a 20 20 20 20 20  (nBytes);..     
6820: 20 20 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74     uint nLargest
6830: 4c 6f 63 61 6c 20 3d 20 30 3b 0d 0a 20 20 20 20  Local = 0;..    
6840: 20 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 4f 6b      bool resetOk
6850: 4c 6f 63 61 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a  Local = false;..
6860: 0d 0a 23 69 66 20 21 44 45 42 55 47 20 26 26 20  ..#if !DEBUG && 
6870: 57 49 4e 44 4f 57 53 20 2f 2f 20 4e 4f 54 45 3a  WINDOWS // NOTE:
6880: 20 53 68 6f 75 6c 64 20 62 65 20 22 57 49 4e 33   Should be "WIN3
6890: 32 48 45 41 50 20 26 26 20 21 4d 45 4d 44 45 42  2HEAP && !MEMDEB
68a0: 55 47 20 26 26 20 57 49 4e 44 4f 57 53 22 0d 0a  UG && WINDOWS"..
68b0: 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70          if (Help
68c0: 65 72 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e 64  erMethods.IsWind
68d0: 6f 77 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ows())..        
68e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
68f0: 66 20 28 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  f ((rc == SQLite
6900: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26  ErrorCode.Ok) &&
6910: 20 72 65 73 65 74 29 0d 0a 20 20 20 20 20 20 20   reset)..       
6920: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6930: 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73          rc = Uns
6940: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6950: 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 72  .sqlite3_win32_r
6960: 65 73 65 74 5f 68 65 61 70 28 29 3b 0d 0a 0d 0a  eset_heap();....
6970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6980: 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
6990: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
69a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69b0: 20 20 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 20     resetOkLocal 
69c0: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
69d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
69e0: 20 20 20 20 20 20 69 66 20 28 28 72 63 20 3d 3d        if ((rc ==
69f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6a00: 2e 4f 6b 29 20 26 26 20 63 6f 6d 70 61 63 74 29  .Ok) && compact)
6a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6a20: 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74    rc = UnsafeNat
6a30: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
6a40: 65 33 5f 77 69 6e 33 32 5f 63 6f 6d 70 61 63 74  e3_win32_compact
6a50: 5f 68 65 61 70 28 72 65 66 20 6e 4c 61 72 67 65  _heap(ref nLarge
6a60: 73 74 4c 6f 63 61 6c 29 3b 0d 0a 20 20 20 20 20  stLocal);..     
6a70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
6a80: 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  se..#endif..    
6a90: 20 20 20 20 69 66 20 28 72 65 73 65 74 20 7c 7c      if (reset ||
6aa0: 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20   compact)..     
6ab0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6ac0: 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72    rc = SQLiteErr
6ad0: 6f 72 43 6f 64 65 2e 4e 6f 74 46 6f 75 6e 64 3b  orCode.NotFound;
6ae0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
6af0: 20 20 20 20 20 20 20 6e 46 72 65 65 20 3d 20 6e         nFree = n
6b00: 46 72 65 65 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20  FreeLocal;..    
6b10: 20 20 20 20 6e 4c 61 72 67 65 73 74 20 3d 20 6e      nLargest = n
6b20: 4c 61 72 67 65 73 74 4c 6f 63 61 6c 3b 0d 0a 20  LargestLocal;.. 
6b30: 20 20 20 20 20 20 20 72 65 73 65 74 4f 6b 20 3d         resetOk =
6b40: 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 3b 0d 0a   resetOkLocal;..
6b50: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
6b60: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
6b70: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6b80: 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f  ..    /// Shutdo
6b90: 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e  wn the SQLite en
6ba0: 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20  gine so that it 
6bb0: 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64  can be restarted
6bc0: 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d   with different.
6bd0: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75  .    /// configu
6be0: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20  ration options. 
6bf0: 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75   We depend on au
6c00: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  to initializatio
6c10: 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20  n to recover... 
6c20: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
6c30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
6c40: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 73 74  rns>Returns a st
6c50: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
6c60: 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75  sult code.</retu
6c70: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
6c80: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
6c90: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 68 75 74  teErrorCode Shut
6ca0: 64 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  down()..    {.. 
6cb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
6cc0: 61 74 69 63 53 68 75 74 64 6f 77 6e 28 66 61 6c  aticShutdown(fal
6cd0: 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  se);..    }.... 
6ce0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6cf0: 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f  ..    /// Shutdo
6d00: 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e  wn the SQLite en
6d10: 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20  gine so that it 
6d20: 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64  can be restarted
6d30: 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d   with different.
6d40: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75  .    /// configu
6d50: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20  ration options. 
6d60: 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75   We depend on au
6d70: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  to initializatio
6d80: 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20  n to recover... 
6d90: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
6da0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
6db0: 6d 20 6e 61 6d 65 3d 22 64 69 72 65 63 74 6f 72  m name="director
6dc0: 69 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  ies">..    /// N
6dd0: 6f 6e 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65 74  on-zero to reset
6de0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
6df0: 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  d temporary dire
6e00: 63 74 6f 72 69 65 73 20 74 6f 20 74 68 65 69 72  ctories to their
6e10: 0d 0a 20 20 20 20 2f 2f 2f 20 64 65 66 61 75 6c  ..    /// defaul
6e20: 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20  t values, which 
6e30: 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66  should be null f
6e40: 6f 72 20 62 6f 74 68 2e 20 20 54 68 69 73 20 70  or both.  This p
6e50: 61 72 61 6d 65 74 65 72 20 68 61 73 20 6e 6f 0d  arameter has no.
6e60: 0a 20 20 20 20 2f 2f 2f 20 65 66 66 65 63 74 20  .    /// effect 
6e70: 6f 6e 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73 20 6f  on non-Windows o
6e80: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 73  perating systems
6e90: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
6ea0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
6eb0: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
6ec0: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
6ed0: 72 65 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65  result code.</re
6ee0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
6ef0: 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
6f00: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74  teErrorCode Stat
6f10: 69 63 53 68 75 74 64 6f 77 6e 28 0d 0a 20 20 20  icShutdown(..   
6f20: 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 65 63 74       bool direct
6f30: 6f 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20 29  ories..        )
6f40: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6f50: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6f60: 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
6f70: 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20  rCode.Ok;....   
6f80: 20 20 20 20 20 69 66 20 28 64 69 72 65 63 74 6f       if (directo
6f90: 72 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  ries)..        {
6fa0: 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20  ..#if WINDOWS.. 
6fb0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 48             if (H
6fc0: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 49 73 57  elperMethods.IsW
6fd0: 69 6e 64 6f 77 73 28 29 29 0d 0a 20 20 20 20 20  indows())..     
6fe0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6ff0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
7000: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
7010: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
7020: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
7030: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7040: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69  thods.sqlite3_wi
7050: 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
7060: 79 28 31 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20  y(1, null);.... 
7070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7080: 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
7090: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70b0: 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74    rc = UnsafeNat
70c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
70d0: 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
70e0: 65 63 74 6f 72 79 28 32 2c 20 6e 75 6c 6c 29 3b  ectory(2, null);
70f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
7110: 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  e..#endif..     
7120: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e         {..#if !N
7130: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
7140: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
7150: 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N..             
7160: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
7170: 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
7180: 20 20 20 20 20 20 20 20 20 22 53 68 75 74 64 6f           "Shutdo
7190: 77 6e 3a 20 43 61 6e 6e 6f 74 20 72 65 73 65 74  wn: Cannot reset
71a0: 20 64 69 72 65 63 74 6f 72 69 65 73 20 6f 6e 20   directories on 
71b0: 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e 22 29  this platform.")
71c0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
71d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
71e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
71f0: 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
7200: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
7210: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55            rc = U
7220: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
7230: 64 73 2e 73 71 6c 69 74 65 33 5f 73 68 75 74 64  ds.sqlite3_shutd
7240: 6f 77 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  own();....      
7250: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
7260: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
7270: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
7280: 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
7290: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 6e  the associated n
72a0: 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ative connection
72b0: 20 68 61 6e 64 6c 65 20 69 73 20 6f 70 65 6e 2e   handle is open.
72c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
72d0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
72e0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
72f0: 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   Non-zero if the
7300: 20 61 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69   associated nati
7310: 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ve connection ha
7320: 6e 64 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20  ndle is open... 
7330: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
7340: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
7350: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
7360: 4f 70 65 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Open()..    {.. 
7370: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f         return (_
7380: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20  sql != null) && 
7390: 21 5f 73 71 6c 2e 49 73 49 6e 76 61 6c 69 64 20  !_sql.IsInvalid 
73a0: 26 26 20 21 5f 73 71 6c 2e 49 73 43 6c 6f 73 65  && !_sql.IsClose
73b0: 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  d;..    }....   
73c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
73d0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
73e0: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66  the fully qualif
73f0: 69 65 64 20 70 61 74 68 20 61 6e 64 20 66 69 6c  ied path and fil
7400: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63  e name for the c
7410: 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 0d 0a 20  urrently open.. 
7420: 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 2c     /// database,
7430: 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 2f 2f   if any...    //
7440: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
7450: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
7460: 65 3d 22 64 62 4e 61 6d 65 22 3e 0d 0a 20 20 20  e="dbName">..   
7470: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
7480: 20 74 68 65 20 61 74 74 61 63 68 65 64 20 64 61   the attached da
7490: 74 61 62 61 73 65 20 74 6f 20 71 75 65 72 79 2e  tabase to query.
74a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
74b0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
74c0: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  urns>..    /// T
74d0: 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69  he fully qualifi
74e0: 65 64 20 70 61 74 68 20 61 6e 64 20 66 69 6c 65  ed path and file
74f0: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 75   name for the cu
7500: 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74  rrently open dat
7510: 61 62 61 73 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20  abase,..    /// 
7520: 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 2f 2f 2f  if any...    ///
7530: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
7540: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
7550: 64 65 20 73 74 72 69 6e 67 20 47 65 74 46 69 6c  de string GetFil
7560: 65 4e 61 6d 65 28 73 74 72 69 6e 67 20 64 62 4e  eName(string dbN
7570: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
7580: 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d       if (_sql ==
7590: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
75a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
75b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
75c0: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
75d0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
75e0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 66  ods.sqlite3_db_f
75f0: 69 6c 65 6e 61 6d 65 5f 62 79 74 65 73 28 0d 0a  ilename_bytes(..
7600: 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
7610: 2c 20 54 6f 55 54 46 38 28 64 62 4e 61 6d 65 29  , ToUTF8(dbName)
7620: 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ), -1);..    }..
7630: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
7640: 76 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70 65  verride void Ope
7650: 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65  n(string strFile
7660: 6e 61 6d 65 2c 20 73 74 72 69 6e 67 20 76 66 73  name, string vfs
7670: 4e 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  Name, SQLiteConn
7680: 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e  ectionFlags conn
7690: 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c  ectionFlags, SQL
76a0: 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d  iteOpenFlagsEnum
76b0: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20   openFlags, int 
76c0: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f  maxPoolSize, boo
76d0: 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20  l usePool)..    
76e0: 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  {..      //..   
76f0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
7700: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
7710: 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e  ection is curren
7720: 74 6c 79 20 6f 70 65 6e 2c 20 61 74 74 65 6d 70  tly open, attemp
7730: 74 20 74 6f 0d 0a 20 20 20 20 20 20 2f 2f 20 20  t to..      //  
7740: 20 20 20 20 20 63 6c 6f 73 65 20 69 74 20 6e 6f       close it no
7750: 77 2e 20 20 54 68 69 73 20 6d 75 73 74 20 62 65  w.  This must be
7760: 20 64 6f 6e 65 20 62 65 63 61 75 73 65 20 74 68   done because th
7770: 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 0d 0a  e file name or..
7780: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
7790: 74 68 65 72 20 70 61 72 61 6d 65 74 65 72 73 20  ther parameters 
77a0: 74 68 61 74 20 6d 61 79 20 69 6d 70 61 63 74 20  that may impact 
77b0: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
77c0: 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 2f  atabase..      /
77d0: 2f 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69  /       connecti
77e0: 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 68 61 6e  on may have chan
77f0: 67 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  ged...      //..
7800: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21        if (_sql !
7810: 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73 65 28 66 61  = null) Close(fa
7820: 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  lse);....      /
7830: 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  /..      // NOTE
7840: 3a 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63 74  : If the connect
7850: 69 6f 6e 20 77 61 73 20 6e 6f 74 20 63 6c 6f 73  ion was not clos
7860: 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2c  ed successfully,
7870: 20 74 68 72 6f 77 20 61 6e 0d 0a 20 20 20 20 20   throw an..     
7880: 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70 74   //       except
7890: 69 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ion now...      
78a0: 2f 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73  //..      if (_s
78b0: 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql != null)..   
78c0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
78d0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
78e0: 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  ("connection han
78f0: 64 6c 65 20 69 73 20 73 74 69 6c 6c 20 61 63 74  dle is still act
7900: 69 76 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ive");....      
7910: 5f 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65 50 6f  _usePool = usePo
7920: 6f 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65  ol;..      _file
7930: 4e 61 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e 61  Name = strFilena
7940: 6d 65 3b 0d 0a 20 20 20 20 20 20 5f 66 6c 61 67  me;..      _flag
7950: 73 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  s = connectionFl
7960: 61 67 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ags;....      if
7970: 20 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20   (usePool)..    
7980: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71    {..        _sq
7990: 6c 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  l = SQLiteConnec
79a0: 74 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28  tionPool.Remove(
79b0: 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78  strFilename, max
79c0: 50 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70  PoolSize, out _p
79d0: 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a  oolVersion);....
79e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
79f0: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
7a00: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
7a10: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
7a20: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
7a30: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45  QLiteConnectionE
7a40: 76 65 6e 74 54 79 70 65 2e 4f 70 65 6e 65 64 46  ventType.OpenedF
7a50: 72 6f 6d 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e  romPool, null, n
7a60: 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
7a70: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73    null, null, _s
7a80: 71 6c 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c  ql, strFilename,
7a90: 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d   new object[] {.
7aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70  .            typ
7ab0: 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 73 74  eof(SQLite3), st
7ac0: 72 46 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61  rFilename, vfsNa
7ad0: 6d 65 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  me, connectionFl
7ae0: 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ags,..          
7af0: 20 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6d 61 78    openFlags, max
7b00: 50 6f 6f 6c 53 69 7a 65 2c 20 75 73 65 50 6f 6f  PoolSize, usePoo
7b10: 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 20  l, _poolVersion 
7b20: 7d 29 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54  }));....#if !NET
7b30: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
7b40: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
7b50: 0a 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57  .        Trace.W
7b60: 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
7b70: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
7b80: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
7b90: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
7ba0: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
7bb0: 20 20 20 20 20 20 20 20 20 20 20 22 4f 70 65 6e             "Open
7bc0: 20 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 48   (Pool): {0}", H
7bd0: 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29  andleToString())
7be0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
7bf0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if 
7c00: 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
7c10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7c20: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
7c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
7c40: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
7c50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7c60: 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
7c70: 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
7c80: 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
7c90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7ca0: 20 20 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d       IntPtr db =
7cb0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
7cc0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
7cd0: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23  rrorCode n;....#
7ce0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
7cf0: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ARD..          i
7d00: 6e 74 20 65 78 74 46 75 6e 63 73 20 3d 20 28 28  nt extFuncs = ((
7d10: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  connectionFlags 
7d20: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
7d30: 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73  onFlags.NoExtens
7d40: 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d  ionFunctions) !=
7d50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7d60: 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69  nFlags.NoExtensi
7d70: 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20 3f 20 31  onFunctions) ? 1
7d80: 20 3a 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   : 0;....       
7d90: 20 20 20 69 66 20 28 65 78 74 46 75 6e 63 73 20     if (extFuncs 
7da0: 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  != 0)..         
7db0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7dc0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
7dd0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7de0: 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55  open_interop(ToU
7df0: 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29  TF8(strFilename)
7e00: 2c 20 54 6f 55 54 46 38 28 76 66 73 4e 61 6d 65  , ToUTF8(vfsName
7e10: 29 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 65 78  ), openFlags, ex
7e20: 74 46 75 6e 63 73 2c 20 72 65 66 20 64 62 29 3b  tFuncs, ref db);
7e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
7e40: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23           else..#
7e50: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
7e60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7e70: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
7e80: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7e90: 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73  open_v2(ToUTF8(s
7ea0: 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 72 65 66  trFilename), ref
7eb0: 20 64 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20   db, openFlags, 
7ec0: 54 6f 55 54 46 38 28 76 66 73 4e 61 6d 65 29 29  ToUTF8(vfsName))
7ed0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
7ee0: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
7ef0: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
7f00: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
7f10: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
7f20: 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  Line(HelperMetho
7f30: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
7f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7f50: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
7f60: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
7f70: 20 20 20 20 20 20 20 20 20 20 20 22 4f 70 65 6e             "Open
7f80: 3a 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23  : {0}", db));..#
7f90: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
7fa0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
7fb0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
7fc0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
7fd0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c  Exception(n, nul
7fe0: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  l);..          _
7ff0: 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sql = new SQLite
8000: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
8010: 28 64 62 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20  (db, true);..   
8020: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8030: 6c 6f 63 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a  lock (_sql) { /*
8040: 20 48 41 43 4b 3a 20 46 6f 72 63 65 20 74 68 65   HACK: Force the
8050: 20 53 79 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65   SyncBlock to be
8060: 20 22 63 72 65 61 74 65 64 22 20 6e 6f 77 2e 20   "created" now. 
8070: 2a 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  */ }....        
8080: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8090: 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
80a0: 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
80b0: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
80c0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
80d0: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65  nectionEventType
80e0: 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64  .NewCriticalHand
80f0: 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  le, null,..     
8100: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c         null, nul
8110: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73  l, null, _sql, s
8120: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20  trFilename, new 
8130: 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20  object[] {..    
8140: 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53          typeof(S
8150: 51 4c 69 74 65 33 29 2c 20 73 74 72 46 69 6c 65  QLite3), strFile
8160: 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 63  name, vfsName, c
8170: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 0d  onnectionFlags,.
8180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 65  .            ope
8190: 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53  nFlags, maxPoolS
81a0: 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 20 7d 29 29  ize, usePool }))
81b0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
81c0: 20 20 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63      // Bind func
81d0: 74 69 6f 6e 73 20 74 6f 20 74 68 69 73 20 63 6f  tions to this co
81e0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e  nnection.  If an
81f0: 79 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74  y previous funct
8200: 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65  ions of the same
8210: 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20   name..      // 
8220: 77 65 72 65 20 61 6c 72 65 61 64 79 20 62 6f 75  were already bou
8230: 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 65 77  nd, then the new
8240: 20 62 69 6e 64 69 6e 67 73 20 72 65 70 6c 61 63   bindings replac
8250: 65 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20  e the old...    
8260: 20 20 69 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f    if ((connectio
8270: 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  nFlags & SQLiteC
8280: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
8290: 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 20  oBindFunctions) 
82a0: 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  != SQLiteConnect
82b0: 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46  ionFlags.NoBindF
82c0: 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20  unctions)..     
82d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
82e0: 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20   (_functions == 
82f0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8300: 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20       _functions 
8310: 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
8320: 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41  <SQLiteFunctionA
8330: 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65  ttribute, SQLite
8340: 46 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a  Function>();....
8350: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
8360: 68 20 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c  h (KeyValuePair<
8370: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
8380: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
8390: 75 6e 63 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20  unction> pair.. 
83a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83b0: 20 69 6e 20 53 51 4c 69 74 65 46 75 6e 63 74 69   in SQLiteFuncti
83c0: 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  on.BindFunctions
83d0: 28 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f  (this, connectio
83e0: 6e 46 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  nFlags))..      
83f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8400: 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b       _functions[
8410: 70 61 69 72 2e 4b 65 79 5d 20 3d 20 70 61 69 72  pair.Key] = pair
8420: 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  .Value;..       
8430: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
8440: 0a 20 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75  .      SetTimeou
8450: 74 28 30 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e  t(0);..      GC.
8460: 4b 65 65 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b  KeepAlive(_sql);
8470: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8480: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8490: 20 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28   void ClearPool(
84a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
84b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
84c0: 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f  Pool.ClearPool(_
84d0: 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  fileName);..    
84e0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
84f0: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
8500: 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20  ountPool()..    
8510: 7b 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69  {..        Dicti
8520: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e  onary<string, in
8530: 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c  t> counts = null
8540: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f  ;..        int o
8550: 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20  penCount = 0;.. 
8560: 20 20 20 20 20 20 20 69 6e 74 20 63 6c 6f 73 65         int close
8570: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20  Count = 0;..    
8580: 20 20 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75      int totalCou
8590: 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  nt = 0;....     
85a0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
85b0: 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74  ionPool.GetCount
85c0: 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  s(_fileName,..  
85d0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 63 6f            ref co
85e0: 75 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f  unts, ref openCo
85f0: 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f  unt, ref closeCo
8600: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
8610: 20 20 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74    ref totalCount
8620: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
8630: 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b  turn totalCount;
8640: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8650: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8660: 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74   void SetTimeout
8670: 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29  (int nTimeoutMS)
8680: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49  ..    {..      I
8690: 6e 74 50 74 72 20 64 62 20 3d 20 5f 73 71 6c 3b  ntPtr db = _sql;
86a0: 0d 0a 20 20 20 20 20 20 69 66 20 28 64 62 20 3d  ..      if (db =
86b0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 74  = IntPtr.Zero) t
86c0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
86d0: 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e  xception("no con
86e0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61  nection handle a
86f0: 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 20 20 20  vailable");..   
8700: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
8710: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
8720: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8730: 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
8740: 64 62 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b  db, nTimeoutMS);
8750: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
8760: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8770: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
8780: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
8790: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
87a0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
87b0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
87c0: 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c  de bool Step(SQL
87d0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
87e0: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
87f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8800: 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f   n;..      Rando
8810: 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  m rnd = null;.. 
8820: 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74       uint startt
8830: 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69  ick = (uint)Envi
8840: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
8850: 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 74  t;..      uint t
8860: 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29 28  imeout = (uint)(
8870: 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63  stmt._command._c
8880: 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20  ommandTimeout * 
8890: 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  1000);....      
88a0: 52 65 73 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74  ResetCancelCount
88b0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69  ();....      whi
88c0: 6c 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20  le (true)..     
88d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d   {..        try.
88e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
88f0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8900: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8910: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
8920: 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
8930: 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
8940: 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
8950: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8960: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
8970: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8980: 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  step(stmt._sqlit
8990: 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20  e_stmt);..      
89a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
89b0: 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f  f (ShouldThrowFo
89c0: 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20  rCancel())..    
89d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
89e0: 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c     if ((n == SQL
89f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
8a00: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
8a10: 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74       (n == SQLit
8a20: 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20  eErrorCode.Row) 
8a30: 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
8a40: 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65      (n == SQLite
8a50: 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29  ErrorCode.Done))
8a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8a80: 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72   n = SQLiteError
8a90: 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d  Code.Interrupt;.
8aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
8ac0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8ad0: 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29  ception(n, null)
8ae0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
8af0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
8b00: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8b10: 2e 49 6e 74 65 72 72 75 70 74 29 20 72 65 74 75  .Interrupt) retu
8b20: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
8b30: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
8b40: 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29  teErrorCode.Row)
8b50: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
8b60: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
8b70: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
8b80: 44 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61 6c  Done) return fal
8b90: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  se;....        i
8ba0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
8bb0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
8bc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8bd0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
8be0: 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e r;....        
8bf0: 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63    // An error oc
8c00: 63 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74 20  curred, attempt 
8c10: 74 6f 20 72 65 73 65 74 20 74 68 65 20 73 74 61  to reset the sta
8c20: 74 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20  tement.  If the 
8c30: 72 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65 63  reset worked bec
8c40: 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20  ause the..      
8c50: 20 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68 61      // schema ha
8c60: 73 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74 72  s changed, re-tr
8c70: 79 20 74 68 65 20 73 74 65 70 20 61 67 61 69 6e  y the step again
8c80: 2e 20 20 49 66 20 69 74 20 65 72 72 6f 72 65 64  .  If it errored
8c90: 20 6f 75 72 20 62 65 63 61 75 73 65 20 74 68 65   our because the
8ca0: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..     
8cb0: 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65       // is locke
8cc0: 64 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65 74  d, then keep ret
8cd0: 72 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65 20  rying until the 
8ce0: 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20  command timeout 
8cf0: 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20  occurs...       
8d00: 20 20 20 72 20 3d 20 52 65 73 65 74 28 73 74 6d     r = Reset(stm
8d10: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
8d20: 20 69 66 20 28 72 20 3d 3d 20 53 51 4c 69 74 65   if (r == SQLite
8d30: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
8d40: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
8d50: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8d60: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
8d70: 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
8d80: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28        else if ((
8d90: 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  r == SQLiteError
8da0: 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72  Code.Locked || r
8db0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
8dc0: 6f 64 65 2e 42 75 73 79 29 20 26 26 20 73 74 6d  ode.Busy) && stm
8dd0: 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75  t._command != nu
8de0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ll)..          {
8df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8e00: 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20   Keep trying..  
8e10: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e            if (rn
8e20: 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69  d == null) // Fi
8e30: 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65  rst time we've e
8e40: 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c  ncountered the l
8e50: 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ock..           
8e60: 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e     rnd = new Ran
8e70: 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dom();....      
8e80: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76        // If we'v
8e90: 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63  e exceeded the c
8ea0: 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74  ommand's timeout
8eb0: 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68  , give up and th
8ec0: 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20  row an error..  
8ed0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75            if ((u
8ee0: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
8ef0: 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72  TickCount - star
8f00: 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29  ttick > timeout)
8f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
8f30: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
8f40: 78 63 65 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c  xception(r, GetL
8f50: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
8f60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8f70: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
8f80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
8fa0: 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66  therwise sleep f
8fb0: 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75  or a random amou
8fc0: 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f  nt of time up to
8fd0: 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20   150ms..        
8fe0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72        System.Thr
8ff0: 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c  eading.Thread.Sl
9000: 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20  eep(rnd.Next(1, 
9010: 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  150));..        
9020: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
9030: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
9040: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
9050: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
9060: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20  y>..    /// Has 
9070: 74 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73  the sqlite3_errs
9080: 74 72 28 29 20 63 6f 72 65 20 6c 69 62 72 61 72  tr() core librar
9090: 79 20 41 50 49 20 62 65 65 6e 20 63 68 65 63 6b  y API been check
90a0: 65 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20  ed for yet?..   
90b0: 20 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20 69   /// If so, is i
90c0: 74 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20  t present?..    
90d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
90e0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
90f0: 69 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 65 72  ic bool? have_er
9100: 72 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rstr = null;....
9110: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9120: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
9130: 6e 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  ns the error mes
9140: 73 61 67 65 20 66 6f 72 20 74 68 65 20 73 70 65  sage for the spe
9150: 63 69 66 69 65 64 20 53 51 4c 69 74 65 20 72 65  cified SQLite re
9160: 74 75 72 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d  turn code using.
9170: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c  .    /// the sql
9180: 69 74 65 33 5f 65 72 72 73 74 72 28 29 20 66 75  ite3_errstr() fu
9190: 6e 63 74 69 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20  nction, falling 
91a0: 62 61 63 6b 20 74 6f 20 74 68 65 20 69 6e 74 65  back to the inte
91b0: 72 6e 61 6c 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20  rnal lookup..   
91c0: 20 2f 2f 2f 20 74 61 62 6c 65 20 69 66 20 6e 65   /// table if ne
91d0: 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f  cessary...    //
91e0: 2f 0d 0a 20 20 20 20 2f 2f 2f 20 57 41 52 4e 49  /..    /// WARNI
91f0: 4e 47 3a 20 44 6f 20 6e 6f 74 20 72 65 6d 6f 76  NG: Do not remov
9200: 65 20 74 68 69 73 20 6d 65 74 68 6f 64 2c 20 69  e this method, i
9210: 74 20 69 73 20 75 73 65 64 20 76 69 61 20 72 65  t is used via re
9220: 66 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  flection...    /
9230: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
9240: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
9250: 6d 65 3d 22 72 63 22 3e 54 68 65 20 53 51 4c 69  me="rc">The SQLi
9260: 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 3c  te return code.<
9270: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
9280: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 65 72   <returns>The er
9290: 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 72 20 6e  ror message or n
92a0: 75 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74  ull if it cannot
92b0: 20 62 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74 75   be found.</retu
92c0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
92d0: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
92e0: 20 47 65 74 45 72 72 6f 72 53 74 72 69 6e 67 28   GetErrorString(
92f0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
9300: 72 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  rc)..    {..    
9310: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
9320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9330: 69 66 20 28 68 61 76 65 5f 65 72 72 73 74 72 20  if (have_errstr 
9340: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
9350: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9360: 20 20 20 20 20 20 20 20 20 69 6e 74 20 76 65 72           int ver
9370: 73 69 6f 6e 4e 75 6d 62 65 72 20 3d 20 53 51 4c  sionNumber = SQL
9380: 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72  iteVersionNumber
9390: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
93a0: 20 20 20 68 61 76 65 5f 65 72 72 73 74 72 20 3d     have_errstr =
93b0: 20 28 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20   (versionNumber 
93c0: 3e 3d 20 33 30 30 37 30 31 35 29 3b 0d 0a 20 20  >= 3007015);..  
93d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
93e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
93f0: 62 6f 6f 6c 29 68 61 76 65 5f 65 72 72 73 74 72  bool)have_errstr
9400: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9420: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55    IntPtr ptr = U
9430: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9440: 64 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 73 74  ds.sqlite3_errst
9450: 72 28 72 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  r(rc);....      
9460: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 74            if (pt
9470: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
9480: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9490: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
94a0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
94b0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
94c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
94d0: 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74   Marshal.PtrToSt
94e0: 72 69 6e 67 41 6e 73 69 28 70 74 72 29 3b 0d 0a  ringAnsi(ptr);..
94f0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
9500: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9510: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  n UTF8ToString(p
9520: 74 72 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  tr, -1);..#endif
9530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9540: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
9550: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
9560: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 6e         catch (En
9570: 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64  tryPointNotFound
9580: 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20  Exception)..    
9590: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
95a0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
95b0: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ...        }....
95c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 46          return F
95d0: 61 6c 6c 62 61 63 6b 47 65 74 45 72 72 6f 72 53  allbackGetErrorS
95e0: 74 72 69 6e 67 28 72 63 29 3b 0d 0a 20 20 20 20  tring(rc);..    
95f0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
9600: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9610: 48 61 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  Has the sqlite3_
9620: 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 29 20  stmt_readonly() 
9630: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 41 50 49  core library API
9640: 20 62 65 65 6e 20 63 68 65 63 6b 65 64 20 66 6f   been checked fo
9650: 72 20 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20  r yet?..    /// 
9660: 49 66 20 73 6f 2c 20 69 73 20 69 74 20 70 72 65  If so, is it pre
9670: 73 65 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sent?..    /// <
9680: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
9690: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
96a0: 6f 6c 3f 20 68 61 76 65 5f 73 74 6d 74 5f 72 65  ol? have_stmt_re
96b0: 61 64 6f 6e 6c 79 20 3d 20 6e 75 6c 6c 3b 0d 0a  adonly = null;..
96c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
96d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
96e0: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  urns non-zero if
96f0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73   the specified s
9700: 74 61 74 65 6d 65 6e 74 20 69 73 20 72 65 61 64  tatement is read
9710: 2d 6f 6e 6c 79 20 69 6e 20 6e 61 74 75 72 65 2e  -only in nature.
9720: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
9730: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
9740: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22  aram name="stmt"
9750: 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74  >The statement t
9760: 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e  o check.</param>
9770: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
9780: 6e 73 3e 54 72 75 65 20 69 66 20 74 68 65 20 6f  ns>True if the o
9790: 75 74 65 72 20 71 75 65 72 79 20 69 73 20 72 65  uter query is re
97a0: 61 64 2d 6f 6e 6c 79 2e 3c 2f 72 65 74 75 72 6e  ad-only.</return
97b0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
97c0: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49   override bool I
97d0: 73 52 65 61 64 4f 6e 6c 79 28 0d 0a 20 20 20 20  sReadOnly(..    
97e0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
97f0: 65 6e 74 20 73 74 6d 74 0d 0a 20 20 20 20 20 20  ent stmt..      
9800: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
9810: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
9820: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9830: 69 66 20 28 68 61 76 65 5f 73 74 6d 74 5f 72 65  if (have_stmt_re
9840: 61 64 6f 6e 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d  adonly == null).
9850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9870: 69 6e 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65  int versionNumbe
9880: 72 20 3d 20 53 51 4c 69 74 65 56 65 72 73 69 6f  r = SQLiteVersio
9890: 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20  nNumber;..      
98a0: 20 20 20 20 20 20 20 20 20 20 68 61 76 65 5f 73            have_s
98b0: 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 28  tmt_readonly = (
98c0: 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d  versionNumber >=
98d0: 20 33 30 30 37 30 30 34 29 3b 0d 0a 20 20 20 20   3007004);..    
98e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
98f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 62 6f           if ((bo
9900: 6f 6c 29 68 61 76 65 5f 73 74 6d 74 5f 72 65 61  ol)have_stmt_rea
9910: 64 6f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  donly)..        
9920: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9930: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
9940: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9950: 73 2e 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 72  s.sqlite3_stmt_r
9960: 65 61 64 6f 6e 6c 79 28 0d 0a 20 20 20 20 20 20  eadonly(..      
9970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
9980: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
9990: 20 21 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20   != 0;..        
99a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
99b0: 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
99c0: 28 45 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f  (EntryPointNotFo
99d0: 75 6e 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20  undException).. 
99e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
99f0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
9a00: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
9a10: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
9a20: 6e 20 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 45  n false; /* NOTE
9a30: 3a 20 55 6e 6b 6e 6f 77 6e 2c 20 61 73 73 75 6d  : Unknown, assum
9a40: 65 20 66 61 6c 73 65 2e 20 2a 2f 0d 0a 20 20 20  e false. */..   
9a50: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9a60: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
9a70: 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65  teErrorCode Rese
9a80: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
9a90: 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a  t stmt)..    {..
9aa0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
9ab0: 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20  rCode n;....#if 
9ac0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
9ad0: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
9ae0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9af0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e  sqlite3_reset_in
9b00: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
9b10: 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65  te_stmt);..#else
9b20: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
9b30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9b40: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74  sqlite3_reset(st
9b50: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
9b60: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
9b70: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68     // If the sch
9b80: 65 6d 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79  ema changed, try
9b90: 20 61 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20   and re-prepare 
9ba0: 69 74 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  it..      if (n 
9bb0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
9bc0: 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20  de.Schema)..    
9bd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20    {..        // 
9be0: 52 65 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79  Recreate a dummy
9bf0: 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
9c00: 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d      string str =
9c10: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
9c20: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61  using (SQLiteSta
9c30: 74 65 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65  tement tmp = Pre
9c40: 70 61 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e  pare(null, stmt.
9c50: 5f 73 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e  _sqlStatement, n
9c60: 75 6c 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74  ull, (uint)(stmt
9c70: 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61  ._command._comma
9c80: 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30  ndTimeout * 1000
9c90: 29 2c 20 72 65 66 20 73 74 72 29 29 0d 0a 20 20  ), ref str))..  
9ca0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9cb0: 20 20 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74     // Finalize t
9cc0: 68 65 20 65 78 69 73 74 69 6e 67 20 73 74 61 74  he existing stat
9cd0: 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  ement..         
9ce0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
9cf0: 6d 74 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20  mt.Dispose();.. 
9d00: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73           // Reas
9d10: 73 69 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65  sign a new state
9d20: 6d 65 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20  ment pointer to 
9d30: 74 68 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e  the old statemen
9d40: 74 20 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20  t and clear the 
9d50: 74 65 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20  temporary one.. 
9d60: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 6d 70           if (tmp
9d70: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
9d80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9d90: 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65      stmt._sqlite
9da0: 5f 73 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c  _stmt = tmp._sql
9db0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
9dc0: 20 20 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69         tmp._sqli
9dd0: 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d  te_stmt = null;.
9de0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
9df0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61            // Rea
9e00: 70 70 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d  pply parameters.
9e10: 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e  .          stmt.
9e20: 42 69 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29  BindParameters()
9e30: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
9e40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
9e50: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b  iteErrorCode.Unk
9e60: 6e 6f 77 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77  nown; // Reset w
9e70: 61 73 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65  as OK, with sche
9e80: 6d 61 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20  ma change..     
9e90: 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69   }..      else i
9ea0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
9eb0: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c  rorCode.Locked |
9ec0: 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | n == SQLiteErr
9ed0: 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20  orCode.Busy)..  
9ee0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
9ef0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ...      if (n !
9f00: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
9f10: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 74  e.Ok)..        t
9f20: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
9f30: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
9f40: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a  astError());....
9f50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 20        return n; 
9f60: 2f 2f 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20  // We reset OK, 
9f70: 6e 6f 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  no schema change
9f80: 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  s..    }....    
9f90: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
9fa0: 65 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74  e string GetLast
9fb0: 45 72 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a  Error()..    {..
9fc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
9fd0: 65 74 4c 61 73 74 45 72 72 6f 72 28 6e 75 6c 6c  etLastError(null
9fe0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
9ff0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a000: 64 65 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73  de string GetLas
a010: 74 45 72 72 6f 72 28 73 74 72 69 6e 67 20 64 65  tError(string de
a020: 66 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a  fValue)..    {..
a030: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72          string r
a040: 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65 42 61  esult = SQLiteBa
a050: 73 65 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28  se.GetLastError(
a060: 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20  _sql, _sql);..  
a070: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
a080: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72  .IsNullOrEmpty(r
a090: 65 73 75 6c 74 29 29 20 72 65 73 75 6c 74 20 3d  esult)) result =
a0a0: 20 64 65 66 56 61 6c 75 65 3b 0d 0a 20 20 20 20   defValue;..    
a0b0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
a0c0: 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
a0d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a130: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
a140: 51 75 65 72 79 20 44 69 61 67 6e 6f 73 74 69 63  Query Diagnostic
a150: 73 20 53 75 70 70 6f 72 74 0d 0a 23 69 66 20 21  s Support..#if !
a160: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
a170: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 2f  FRAMEWORK..    /
a180: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
a190: 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64    /// This field
a1a0: 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70   is used to keep
a1b0: 20 74 72 61 63 6b 20 6f 66 20 77 68 65 74 68 65   track of whethe
a1c0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 20  r or not the..  
a1d0: 20 20 2f 2f 2f 20 22 53 51 4c 69 74 65 5f 46 6f    /// "SQLite_Fo
a1e0: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 22 20 65  rceLogPrepare" e
a1f0: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
a200: 62 6c 65 20 68 61 73 20 62 65 65 6e 20 71 75 65  ble has been que
a210: 72 69 65 64 2e 20 20 49 66 20 73 6f 2c 0d 0a 20  ried.  If so,.. 
a220: 20 20 20 2f 2f 2f 20 69 74 20 77 69 6c 6c 20 6f     /// it will o
a230: 6e 6c 79 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20  nly be non-zero 
a240: 69 66 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65  if the environme
a250: 6e 74 20 76 61 72 69 61 62 6c 65 20 77 61 73 20  nt variable was 
a260: 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f  present...    //
a270: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
a280: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
a290: 20 62 6f 6f 6c 3f 20 66 6f 72 63 65 4c 6f 67 50   bool? forceLogP
a2a0: 72 65 70 61 72 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  repare = null;..
a2b0: 0d 0a 20 20 20 20 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 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
a320: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
a330: 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
a340: 66 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70  f all calls to p
a350: 72 65 70 61 72 65 20 61 20 53 51 4c 20 71 75 65  repare a SQL que
a360: 72 79 20 77 69 6c 6c 20 62 65 20 6c 6f 67 67 65  ry will be logge
a370: 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 67 61  d,..    /// rega
a380: 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 66 6c  rdless of the fl
a390: 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f  ags for the asso
a3a0: 63 69 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f  ciated connectio
a3b0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
a3c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
a3d0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
a3e0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6c  // Non-zero to l
a3f0: 6f 67 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20  og all calls to 
a400: 70 72 65 70 61 72 65 20 61 20 53 51 4c 20 71 75  prepare a SQL qu
a410: 65 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ery...    /// </
a420: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
a430: 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
a440: 6c 20 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72  l ForceLogPrepar
a450: 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  e()..    {..    
a460: 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f      lock (syncRo
a470: 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ot)..        {..
a480: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a490: 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20  forceLogPrepare 
a4a0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
a4b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a4c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 55 6e 73           if (Uns
a4d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a4e0: 2e 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65  .GetSettingValue
a4f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
a500: 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 69             "SQLi
a510: 74 65 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70 61  te_ForceLogPrepa
a520: 72 65 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e 75  re", null) != nu
a530: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
a540: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a550: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 63              forc
a560: 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 20 74 72  eLogPrepare = tr
a570: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
a580: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a590: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
a5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
a5b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a5c0: 20 20 20 20 20 66 6f 72 63 65 4c 6f 67 50 72 65       forceLogPre
a5d0: 70 61 72 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  pare = false;.. 
a5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
a5f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a600: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
a610: 65 74 75 72 6e 20 28 62 6f 6f 6c 29 66 6f 72 63  eturn (bool)forc
a620: 65 4c 6f 67 50 72 65 70 61 72 65 3b 0d 0a 20 20  eLogPrepare;..  
a630: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
a640: 23 65 6e 64 69 66 0d 0a 20 20 20 20 23 65 6e 64  #endif..    #end
a650: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
a660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a6c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
a6d0: 65 72 72 69 64 65 20 53 51 4c 69 74 65 53 74 61  erride SQLiteSta
a6e0: 74 65 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53  tement Prepare(S
a6f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
a700: 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53  cnn, string strS
a710: 71 6c 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d  ql, SQLiteStatem
a720: 65 6e 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69  ent previous, ui
a730: 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65  nt timeoutMS, re
a740: 66 20 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61  f string strRema
a750: 69 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  in)..    {..    
a760: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
a770: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53  NullOrEmpty(strS
a780: 71 6c 29 29 20 73 74 72 53 71 6c 20 3d 20 73 74  ql)) strSql = st
a790: 72 53 71 6c 2e 54 72 69 6d 28 29 3b 0d 0a 20 20  rSql.Trim();..  
a7a0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
a7b0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74  IsNullOrEmpty(st
a7c0: 72 53 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b 0d  rSql))..      {.
a7d0: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
a7e0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 51       // NOTE: SQ
a7f0: 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75  Lite does not su
a800: 70 70 6f 72 74 20 74 68 65 20 63 6f 6e 63 65 70  pport the concep
a810: 74 20 6f 66 20 73 65 70 61 72 61 74 65 20 73 63  t of separate sc
a820: 68 65 6d 61 73 0d 0a 20 20 20 20 20 20 20 20 2f  hemas..        /
a830: 2f 20 20 20 20 20 20 20 69 6e 20 6f 6e 65 20 64  /       in one d
a840: 61 74 61 62 61 73 65 3b 20 74 68 65 72 65 66 6f  atabase; therefo
a850: 72 65 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 62  re, remove the b
a860: 61 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 0d  ase schema name.
a870: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
a880: 20 20 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74 68    used to smooth
a890: 20 69 6e 74 65 67 72 61 74 69 6f 6e 20 77 69 74   integration wit
a8a0: 68 20 74 68 65 20 62 61 73 65 20 2e 4e 45 54 20  h the base .NET 
a8b0: 46 72 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20 20  Framework..     
a8c0: 20 20 20 2f 2f 20 20 20 20 20 20 20 64 61 74 61     //       data
a8d0: 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20 20   classes...     
a8e0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 73     //..        s
a8f0: 74 72 69 6e 67 20 62 61 73 65 53 63 68 65 6d 61  tring baseSchema
a900: 4e 61 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20 6e  Name = (cnn != n
a910: 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73 65  ull) ? cnn._base
a920: 53 63 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c  SchemaName : nul
a930: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  l;....        if
a940: 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
a950: 4f 72 45 6d 70 74 79 28 62 61 73 65 53 63 68 65  OrEmpty(baseSche
a960: 6d 61 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  maName))..      
a970: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73    {..          s
a980: 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52  trSql = strSql.R
a990: 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20  eplace(..       
a9a0: 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74         HelperMet
a9b0: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
a9c0: 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
a9d0: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d  variantCulture,.
a9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
a9f0: 5b 7b 30 7d 5d 2e 22 2c 20 62 61 73 65 53 63 68  [{0}].", baseSch
aa00: 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67  emaName), String
aa10: 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20  .Empty);....    
aa20: 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73        strSql = s
aa30: 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a  trSql.Replace(..
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48 65                He
aa50: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
aa60: 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65  ngFormat(Culture
aa70: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
aa80: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
aa90: 20 20 20 20 20 20 22 7b 30 7d 2e 22 2c 20 62 61        "{0}.", ba
aaa0: 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53  seSchemaName), S
aab0: 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20  tring.Empty);.. 
aac0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
aad0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  }....      SQLit
aae0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
aaf0: 20 66 6c 61 67 73 20 3d 0d 0a 20 20 20 20 20 20   flags =..      
ab00: 20 20 20 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c      (cnn != null
ab10: 29 20 3f 20 63 6e 6e 2e 46 6c 61 67 73 20 3a 20  ) ? cnn.Flags : 
ab20: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ab30: 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 3b 0d 0a  Flags.Default;..
ab40: 0d 0a 20 20 20 20 20 20 69 66 20 28 0d 0a 23 69  ..      if (..#i
ab50: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
ab60: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
ab70: 20 20 20 20 20 20 20 20 46 6f 72 63 65 4c 6f 67          ForceLog
ab80: 50 72 65 70 61 72 65 28 29 20 7c 7c 0d 0a 23 65  Prepare() ||..#e
ab90: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
aba0: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
abb0: 67 50 72 65 70 61 72 65 28 66 6c 61 67 73 29 29  gPrepare(flags))
abc0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
abd0: 20 20 20 20 20 69 66 20 28 28 73 74 72 53 71 6c       if ((strSql
abe0: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74   == null) || (st
abf0: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  rSql.Length == 0
ac00: 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 54 72 69  ) || (strSql.Tri
ac10: 6d 28 29 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29  m().Length == 0)
ac20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ac30: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
ac40: 73 73 61 67 65 28 22 50 72 65 70 61 72 69 6e 67  ssage("Preparing
ac50: 20 7b 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22   {<nothing>}..."
ac60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  );..          el
ac70: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
ac80: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
ac90: 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74  essage(HelperMet
aca0: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
acb0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
acc0: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
acd0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
ace0: 2c 20 22 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b  , "Preparing {{{
acf0: 30 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c  0}}}...", strSql
ad00: 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ));..      }....
ad10: 20 20 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d        IntPtr stm
ad20: 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  t = IntPtr.Zero;
ad30: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
ad40: 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  tr = IntPtr.Zero
ad50: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  ;..      int len
ad60: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c   = 0;..      SQL
ad70: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
ad80: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ad90: 2e 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20  .Schema;..      
ada0: 69 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30 3b  int retries = 0;
adb0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 78 69  ..      int maxi
adc0: 6d 75 6d 52 65 74 72 69 65 73 20 3d 20 28 63 6e  mumRetries = (cn
add0: 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e  n != null) ? cnn
ade0: 2e 5f 70 72 65 70 61 72 65 52 65 74 72 69 65 73  ._prepareRetries
adf0: 20 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   : SQLiteConnect
ae00: 69 6f 6e 2e 44 65 66 61 75 6c 74 50 72 65 70 61  ion.DefaultPrepa
ae10: 72 65 52 65 74 72 69 65 73 3b 0d 0a 20 20 20 20  reRetries;..    
ae20: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
ae30: 54 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20  TF8(strSql);..  
ae40: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 64      string typed
ae50: 65 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  efs = null;..   
ae60: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
ae70: 6e 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a  nt cmd = null;..
ae80: 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64        Random rnd
ae90: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
aea0: 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d  uint starttick =
aeb0: 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65   (uint)Environme
aec0: 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d  nt.TickCount;...
aed0: 0a 20 20 20 20 20 20 52 65 73 65 74 43 61 6e 63  .      ResetCanc
aee0: 65 6c 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20  elCount();....  
aef0: 20 20 20 20 47 43 48 61 6e 64 6c 65 20 68 61 6e      GCHandle han
af00: 64 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41  dle = GCHandle.A
af10: 6c 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c 65  lloc(b, GCHandle
af20: 54 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20  Type.Pinned);.. 
af30: 20 20 20 20 20 49 6e 74 50 74 72 20 70 73 71 6c       IntPtr psql
af40: 20 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66   = handle.AddrOf
af50: 50 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d  PinnedObject();.
af60: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61  .      SQLiteSta
af70: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 73 74 61  tementHandle sta
af80: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e  tementHandle = n
af90: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d  ull;..      try.
afa0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
afb0: 20 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 53    while ((n == S
afc0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
afd0: 63 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53 51  chema || n == SQ
afe0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
aff0: 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c  cked || n == SQL
b000: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
b010: 79 29 20 26 26 20 72 65 74 72 69 65 73 20 3c 20  y) && retries < 
b020: 6d 61 78 69 6d 75 6d 52 65 74 72 69 65 73 29 0d  maximumRetries).
b030: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
b040: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
b050: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b060: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
b070: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  g...          }.
b080: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c  .          final
b090: 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
b0a0: 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
b0b0: 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
b0c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b0d0: 20 20 20 20 73 74 6d 74 20 3d 20 49 6e 74 50 74      stmt = IntPt
b0e0: 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
b0f0: 20 20 20 20 20 70 74 72 20 3d 20 49 6e 74 50 74       ptr = IntPt
b100: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 23 69 66 20 21  r.Zero;....#if !
b110: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
b120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e  .            len
b130: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
b140: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
b150: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
b160: 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72  e3_prepare_inter
b170: 6f 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62  op(_sql, psql, b
b180: 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66  .Length - 1, ref
b190: 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72 2c 20   stmt, ref ptr, 
b1a0: 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  ref len);..#else
b1b0: 0d 0a 23 69 66 20 55 53 45 5f 50 52 45 50 41 52  ..#if USE_PREPAR
b1c0: 45 5f 56 32 0d 0a 20 20 20 20 20 20 20 20 20 20  E_V2..          
b1d0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
b1e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
b1f0: 33 5f 70 72 65 70 61 72 65 5f 76 32 28 5f 73 71  3_prepare_v2(_sq
b200: 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74  l, psql, b.Lengt
b210: 68 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c  h - 1, ref stmt,
b220: 20 72 65 66 20 70 74 72 29 3b 0d 0a 23 65 6c 73   ref ptr);..#els
b230: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  e..            n
b240: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
b250: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70  ethods.sqlite3_p
b260: 72 65 70 61 72 65 28 5f 73 71 6c 2c 20 70 73 71  repare(_sql, psq
b270: 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  l, b.Length - 1,
b280: 20 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20 70   ref stmt, ref p
b290: 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  tr);..#endif..  
b2a0: 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20            len = 
b2b0: 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  -1;..#endif....#
b2c0: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
b2d0: 32 30 20 26 26 20 54 52 41 43 45 5f 53 54 41 54  20 && TRACE_STAT
b2e0: 45 4d 45 4e 54 0d 0a 20 20 20 20 20 20 20 20 20  EMENT..         
b2f0: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
b300: 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
b310: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
b320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b330: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
b340: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
b350: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72               "Pr
b360: 65 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b 31 7d  epare ({0}): {1}
b370: 22 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a 23  ", n, stmt));..#
b380: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
b390: 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53       if ((n == S
b3a0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
b3b0: 6b 29 20 26 26 20 28 73 74 6d 74 20 21 3d 20 49  k) && (stmt != I
b3c0: 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20  ntPtr.Zero))..  
b3d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b3e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
b3f0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21  tatementHandle !
b400: 3d 20 6e 75 6c 6c 29 20 73 74 61 74 65 6d 65 6e  = null) statemen
b410: 74 48 61 6e 64 6c 65 2e 44 69 73 70 6f 73 65 28  tHandle.Dispose(
b420: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b430: 20 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c    statementHandl
b440: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74  e = new SQLiteSt
b450: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 28 5f 73  atementHandle(_s
b460: 71 6c 2c 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20  ql, stmt);..    
b470: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b480: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b490: 20 20 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e      if (statemen
b4a0: 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29  tHandle != null)
b4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
b4c0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
b4d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68  eConnection.OnCh
b4e0: 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20  anged(null, new 
b4f0: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
b500: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
b510: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
b520: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65  tionEventType.Ne
b530: 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c  wCriticalHandle,
b540: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20   null, null,..  
b550: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
b560: 2c 20 6e 75 6c 6c 2c 20 73 74 61 74 65 6d 65 6e  , null, statemen
b570: 74 48 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2c  tHandle, strSql,
b580: 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d   new object[] {.
b590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
b5a0: 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20  ypeof(SQLite3), 
b5b0: 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65  cnn, strSql, pre
b5c0: 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53  vious, timeoutMS
b5d0: 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   }));..         
b5e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
b5f0: 69 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46  if (ShouldThrowF
b600: 6f 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20  orCancel())..   
b610: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b620: 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d          if ((n =
b630: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b640: 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20 20  e.Ok) ||..      
b650: 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d              (n =
b660: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b670: 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20  e.Row) ||..     
b680: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20               (n 
b690: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
b6a0: 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20  de.Done))..     
b6b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 20                n 
b6d0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b6e0: 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20  e.Interrupt;..  
b6f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
b710: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
b720: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c  xception(n, null
b730: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
b740: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
b750: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
b760: 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 29  rCode.Interrupt)
b770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ..            br
b780: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
b790: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
b7a0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63  LiteErrorCode.Sc
b7b0: 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 20 20 20  hema)..         
b7c0: 20 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a 20     retries++;.. 
b7d0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
b7e0: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
b7f0: 6f 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d 0a 20  orCode.Error).. 
b800: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b810: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
b820: 6e 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61  ng.Compare(GetLa
b830: 73 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61 72  stError(), "near
b840: 20 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e 74   \"TYPES\": synt
b850: 61 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69 6e  ax error", Strin
b860: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
b870: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
b880: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
b890: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b8a0: 20 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74 72     int pos = str
b8b0: 53 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29  Sql.IndexOf(';')
b8c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b8d0: 20 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20   if (pos == -1) 
b8e0: 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e  pos = strSql.Len
b8f0: 67 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20  gth - 1;....    
b900: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 64 65            typede
b910: 66 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73  fs = strSql.Subs
b920: 74 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31  tring(0, pos + 1
b930: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b940: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
b950: 6c 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73 20  l.Substring(pos 
b960: 2b 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  + 1);....       
b970: 20 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e         strRemain
b980: 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b   = String.Empty;
b990: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b9a0: 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20    while (cmd == 
b9b0: 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c  null && strSql.L
b9c0: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
b9d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
b9f0: 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20   = Prepare(cnn, 
ba00: 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73  strSql, previous
ba10: 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66  , timeoutMS, ref
ba20: 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20   strRemain);..  
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
ba40: 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e  rSql = strRemain
ba50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
ba60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ba70: 20 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20 6e      if (cmd != n
ba80: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
ba90: 20 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79 70        cmd.SetTyp
baa0: 65 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d  es(typedefs);...
bab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
bac0: 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20  eturn cmd;..    
bad0: 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 28          }..#if (
bae0: 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30  NET_35 || NET_40
baf0: 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45   || NET_45 || NE
bb00: 54 5f 34 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32  T_451 || NET_452
bb10: 20 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45   || NET_46 || NE
bb20: 54 5f 34 36 31 20 7c 7c 20 4e 45 54 5f 34 36 32  T_461 || NET_462
bb30: 20 7c 7c 20 4e 45 54 5f 34 37 20 7c 7c 20 4e 45   || NET_47 || NE
bb40: 54 5f 34 37 31 29 20 26 26 20 21 50 4c 41 54 46  T_471) && !PLATF
bb50: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
bb60: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
bb70: 20 20 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c    else if (_buil
bb80: 64 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61  dingSchema == fa
bb90: 6c 73 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f  lse && String.Co
bba0: 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72  mpare(GetLastErr
bbb0: 6f 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63  or(), 0, "no suc
bbc0: 68 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43  h table: TEMP.SC
bbd0: 48 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74  HEMA", 0, 26, St
bbe0: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
bbf0: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
bc00: 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) == 0)..       
bc10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
bc20: 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20        strRemain 
bc30: 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  = String.Empty;.
bc40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
bc50: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
bc60: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
bc70: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
bc80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c              ISQL
bca0: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
bcb0: 6f 6e 73 20 65 78 74 20 3d 20 28 28 49 53 65 72  ons ext = ((ISer
bcc0: 76 69 63 65 50 72 6f 76 69 64 65 72 29 53 51 4c  viceProvider)SQL
bcd0: 69 74 65 46 61 63 74 6f 72 79 2e 49 6e 73 74 61  iteFactory.Insta
bce0: 6e 63 65 29 2e 47 65 74 53 65 72 76 69 63 65 28  nce).GetService(
bcf0: 74 79 70 65 6f 66 28 49 53 51 4c 69 74 65 53 63  typeof(ISQLiteSc
bd00: 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29 29  hemaExtensions))
bd10: 20 61 73 20 49 53 51 4c 69 74 65 53 63 68 65 6d   as ISQLiteSchem
bd20: 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a  aExtensions;....
bd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd40: 69 66 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29  if (ext != null)
bd50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd60: 20 20 20 20 65 78 74 2e 42 75 69 6c 64 54 65 6d      ext.BuildTem
bd70: 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d  pSchema(cnn);...
bd80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bd90: 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e   while (cmd == n
bda0: 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65  ull && strSql.Le
bdb0: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
bdc0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
bdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bde0: 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e  cmd = Prepare(cn
bdf0: 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69  n, strSql, previ
be00: 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20  ous, timeoutMS, 
be10: 72 65 66 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d  ref strRemain);.
be20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
be30: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52     strSql = strR
be40: 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20  emain;..        
be50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
be60: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
be70: 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20  urn cmd;..      
be80: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
be90: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
bea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
beb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bec0: 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65     _buildingSche
bed0: 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ma = false;..   
bee0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
bef0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
bf00: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  dif..          }
bf10: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
bf20: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
bf30: 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
bf40: 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45   || n == SQLiteE
bf50: 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 2f  rrorCode.Busy) /
bf60: 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61  / Locked -- dela
bf70: 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74  y a small amount
bf80: 20 62 65 66 6f 72 65 20 72 65 74 72 79 69 6e 67   before retrying
bf90: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
bfa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65             // Ke
bfb0: 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20  ep trying..     
bfc0: 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d         if (rnd =
bfd0: 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74  = null) // First
bfe0: 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f   time we've enco
bff0: 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b  untered the lock
c000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c010: 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d  rnd = new Random
c020: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
c030: 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65     // If we've e
c040: 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d  xceeded the comm
c050: 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67  and's timeout, g
c060: 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77  ive up and throw
c070: 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
c080: 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74         if ((uint
c090: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
c0a0: 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69  kCount - startti
c0b0: 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d  ck > timeoutMS).
c0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
c0e0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
c0f0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
c100: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
c110: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c120: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
c130: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c140: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74             // Ot
c150: 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f  herwise sleep fo
c160: 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e  r a random amoun
c170: 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20  t of time up to 
c180: 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20  150ms..         
c190: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65       System.Thre
c1a0: 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65  ading.Thread.Sle
c1b0: 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31  ep(rnd.Next(1, 1
c1c0: 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  50));..         
c1d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
c1e0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
c1f0: 20 20 20 20 20 20 20 20 69 66 20 28 53 68 6f 75          if (Shou
c200: 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c  ldThrowForCancel
c210: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ())..        {..
c220: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c230: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
c240: 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20  rCode.Ok) ||..  
c250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e                (n
c260: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
c270: 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20  ode.Row) ||..   
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20               (n 
c290: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
c2a0: 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20  de.Done))..     
c2b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c2c0: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 53 51            n = SQ
c2d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e  LiteErrorCode.In
c2e0: 74 65 72 72 75 70 74 3b 0d 0a 20 20 20 20 20 20  terrupt;..      
c2f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c300: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
c310: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
c320: 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  (n, null);..    
c330: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c340: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
c350: 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72  ErrorCode.Interr
c360: 75 70 74 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c  upt) return null
c370: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
c380: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
c390: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
c3a0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
c3b0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
c3c0: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r());....       
c3d0: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46   strRemain = UTF
c3e0: 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c  8ToString(ptr, l
c3f0: 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  en);....        
c400: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e  if (statementHan
c410: 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64  dle != null) cmd
c420: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61   = new SQLiteSta
c430: 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c 61  tement(this, fla
c440: 67 73 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e  gs, statementHan
c450: 64 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75 62 73  dle, strSql.Subs
c460: 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e  tring(0, strSql.
c470: 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65 6d 61  Length - strRema
c480: 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72 65 76  in.Length), prev
c490: 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ious);....      
c4a0: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
c4b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 66 69       }..      fi
c4c0: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a  nally..      {..
c4d0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 46          handle.F
c4e0: 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ree();..      }.
c4f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
c500: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
c510: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
c520: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
c530: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
c540: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
c550: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
c560: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
c570: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
c580: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
c590: 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
c5a0: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
c5c0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
c5d0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
c5e0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
c5f0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
c600: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c  mter #{1} as NUL
c610: 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  L...",..        
c620: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
c630: 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20  , index));..    
c640: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
c650: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
c660: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
c670: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
c680: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
c690: 56 61 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29  ValueType value)
c6a0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
c6b0: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
c6c0: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
c6d0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
c6e0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48  Log.LogMessage(H
c6f0: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
c700: 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
c710: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
c720: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
c730: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
c740: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
c750: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
c760: 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32   #{1} as type {2
c770: 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b  } with value {{{
c780: 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  3}}}...",..     
c790: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
c7a0: 50 74 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  Ptr, index, valu
c7b0: 65 2e 47 65 74 54 79 70 65 28 29 2c 20 76 61 6c  e.GetType(), val
c7c0: 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
c7d0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
c7e0: 69 63 20 73 74 72 69 6e 67 20 46 6f 72 6d 61 74  ic string Format
c7f0: 44 61 74 65 54 69 6d 65 28 44 61 74 65 54 69 6d  DateTime(DateTim
c800: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
c810: 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42  .        StringB
c820: 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20  uilder result = 
c830: 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65  new StringBuilde
c840: 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
c850: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61  result.Append(va
c860: 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 22 79 79  lue.ToString("yy
c870: 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73  yy-MM-ddTHH:mm:s
c880: 73 2e 46 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a  s.FFFFFFFK"));..
c890: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
c8a0: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20  ppend(' ');..   
c8b0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
c8c0: 6e 64 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d  nd(value.Kind);.
c8d0: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
c8e0: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20  Append(' ');..  
c8f0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
c900: 65 6e 64 28 76 61 6c 75 65 2e 54 69 63 6b 73 29  end(value.Ticks)
c910: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
c920: 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72  urn result.ToStr
c930: 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ing();..    }...
c940: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
c950: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
c960: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
c970: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
c980: 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65   int index, Date
c990: 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Time value)..   
c9a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
c9b0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
c9c0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
c9d0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
c9e0: 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72  ogMessage(Helper
c9f0: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
ca00: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
ca10: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
ca20: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
ca40: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
ca50: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
ca60: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
ca70: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
ca80: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
ca90: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
caa0: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61  index, typeof(Da
cab0: 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44  teTime), FormatD
cac0: 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29  ateTime(value)))
cad0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
cae0: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
caf0: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
cb00: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
cb10: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
cb20: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
cb30: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
cb40: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
cb50: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
cb60: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
cb70: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
cb80: 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
cb90: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
cbb0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
cbc0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
cbd0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
cbe0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
cbf0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
cc00: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
cc10: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
cc20: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
cc30: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
cc40: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20  typeof(String), 
cc50: 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20  (value != null) 
cc60: 3f 20 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c  ? value : "<null
cc70: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
cc80: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
cc90: 69 63 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61  ic string ToHexa
cca0: 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a  decimalString(..
ccb0: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61          byte[] a
ccc0: 72 72 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d  rray..        ).
ccd0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
cce0: 69 66 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c  if (array == nul
ccf0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
cd00: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
cd10: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
cd20: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
cd30: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
cd40: 28 61 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20  (array.Length * 
cd50: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  2);....        i
cd60: 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61  nt length = arra
cd70: 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  y.Length;....   
cd80: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
cd90: 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
cda0: 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b   length; index++
cdb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
cdc0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72  esult.Append(arr
cdd0: 61 79 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69  ay[index].ToStri
cde0: 6e 67 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20  ng("x2"));....  
cdf0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
ce00: 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  ult.ToString();.
ce10: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
ce20: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
ce30: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
ce40: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
ce50: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
ce60: 64 65 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  dex, byte[] valu
ce70: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
ce80: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
ce90: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
cea0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
ceb0: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
cec0: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
ced0: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
cee0: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
cef0: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
cf00: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
cf10: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
cf20: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
cf30: 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20  er #{1} as type 
cf40: 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b  {2} with value {
cf50: 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20  {{3}}}...",..   
cf60: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
cf70: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79  ntPtr, index, ty
cf80: 70 65 6f 66 28 42 79 74 65 5b 5d 29 2c 20 28 76  peof(Byte[]), (v
cf90: 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  alue != null) ? 
cfa0: 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53 74 72  ToHexadecimalStr
cfb0: 69 6e 67 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e  ing(value) : "<n
cfc0: 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d  ull>"));..    }.
cfd0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
cfe0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
cff0: 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65  nd_Double(SQLite
d000: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
d010: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d020: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
d030: 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76   index, double v
d040: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
d050: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
d060: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
d070: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
d080: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20  e_stmt;....     
d090: 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74     if (HelperMet
d0a0: 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61  hods.LogBind(fla
d0b0: 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  gs))..        {.
d0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
d0d0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
d0e0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
d0f0: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50       }....#if !P
d100: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
d110: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
d120: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
d130: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
d140: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d150: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61  3_bind_double(ha
d160: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
d170: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ue);..        if
d180: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
d190: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
d1a0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
d1b0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
d1c0: 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69 66 20  rror());..#elif 
d1d0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
d1e0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d1f0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
d200: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d210: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
d220: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61  ouble_interop(ha
d230: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
d240: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
d250: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
d260: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
d270: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
d280: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
d290: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65  astError());..#e
d2a0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72  lse..        thr
d2b0: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
d2c0: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
d2d0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
d2e0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
d2f0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
d300: 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65  ind_Int32(SQLite
d310: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
d320: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d330: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
d340: 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c 75   index, int valu
d350: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
d360: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
d370: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
d380: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
d390: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
d3a0: 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
d3b0: 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29  s.LogBind(flags)
d3c0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
d3d0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
d3e0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
d3f0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
d400: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
d410: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
d420: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
d430: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
d440: 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c 20  ind_int(handle, 
d450: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
d460: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
d470: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d480: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
d490: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
d4a0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
d4b0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
d4c0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
d4d0: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e  de void Bind_UIn
d4e0: 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
d4f0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
d500: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
d510: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
d520: 2c 20 75 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  , uint value).. 
d530: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
d540: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
d550: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
d560: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
d570: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 48  ...        if (H
d580: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67  elperMethods.Log
d590: 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20  Bind(flags))..  
d5a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d5b0: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
d5c0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
d5d0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
d5e0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d5f0: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a  ErrorCode n;....
d600: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
d610: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
d620: 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55  ctionFlags.BindU
d630: 49 6e 74 33 32 41 73 49 6e 74 36 34 29 20 3d 3d  Int32AsInt64) ==
d640: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d650: 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33  nFlags.BindUInt3
d660: 32 41 73 49 6e 74 36 34 29 0d 0a 20 20 20 20 20  2AsInt64)..     
d670: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d680: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 32 20 3d 20    long value2 = 
d690: 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20 21 50  value;....#if !P
d6a0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
d6b0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
d6c0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
d6d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d6e0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
d6f0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
d700: 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 69 66 20  value2);..#elif 
d710: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
d720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
d730: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
d740: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
d750: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
d760: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
d770: 72 65 66 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65  ref value2);..#e
d780: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
d790: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
d7a0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
d7b0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
d7c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d7d0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
d7e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
d7f0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
d800: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
d810: 69 6e 64 5f 75 69 6e 74 28 68 61 6e 64 6c 65 2c  ind_uint(handle,
d820: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
d830: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
d840: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
d850: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
d860: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
d870: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
d880: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
d890: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d8a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
d8b0: 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36 34 28 53  oid Bind_Int64(S
d8c0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
d8d0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
d8e0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
d8f0: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e  , int index, lon
d900: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
d910: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
d920: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
d930: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
d940: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20  lite_stmt;....  
d950: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
d960: 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28  Methods.LogBind(
d970: 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  flags))..       
d980: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d990: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
d9a0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
d9b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66          }....#if
d9c0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
d9d0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
d9e0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
d9f0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
da00: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
da10: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
da20: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
da30: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
da40: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
da50: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
da60: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
da70: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
da80: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69  tError());..#eli
da90: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
daa0: 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RD..        SQLi
dab0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
dac0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
dad0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
dae0: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  _int64_interop(h
daf0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
db00: 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
db10: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
db20: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
db30: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
db40: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
db50: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
db60: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
db70: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
db80: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
db90: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
dba0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
dbb0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
dbc0: 42 69 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c 69  Bind_UInt64(SQLi
dbd0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
dbe0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
dbf0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
dc00: 6e 74 20 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20  nt index, ulong 
dc10: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
dc20: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
dc30: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
dc40: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
dc50: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20  te_stmt;....    
dc60: 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65      if (HelperMe
dc70: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
dc80: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ags))..        {
dc90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
dca0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
dcb0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
dcc0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
dcd0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
dce0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
dcf0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
dd00: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
dd10: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
dd20: 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28 68  e3_bind_uint64(h
dd30: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
dd40: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
dd50: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
dd60: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
dd70: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
dd80: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
dd90: 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69 66  Error());..#elif
dda0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
ddb0: 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  D..        SQLit
ddc0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
ddd0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
dde0: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
ddf0: 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  uint64_interop(h
de00: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
de10: 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
de20: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
de30: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
de40: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
de50: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
de60: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
de70: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
de80: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
de90: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
dea0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
deb0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
dec0: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
ded0: 42 69 6e 64 5f 42 6f 6f 6c 65 61 6e 28 53 51 4c  Bind_Boolean(SQL
dee0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
def0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
df00: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
df10: 69 6e 74 20 69 6e 64 65 78 2c 20 62 6f 6f 6c 20  int index, bool 
df20: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
df30: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
df40: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
df50: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
df60: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20  te_stmt;....    
df70: 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65      if (HelperMe
df80: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
df90: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ags))..        {
dfa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
dfb0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
dfc0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
dfd0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
dfe0: 20 20 20 69 6e 74 20 76 61 6c 75 65 32 20 3d 20     int value2 = 
dff0: 76 61 6c 75 65 20 3f 20 31 20 3a 20 30 3b 0d 0a  value ? 1 : 0;..
e000: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
e010: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
e020: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e030: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
e040: 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nt(handle, index
e050: 2c 20 76 61 6c 75 65 32 29 3b 0d 0a 20 20 20 20  , value2);..    
e060: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
e070: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
e080: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
e090: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
e0a0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
e0b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
e0c0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
e0d0: 6f 69 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51  oid Bind_Text(SQ
e0e0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
e0f0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
e100: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
e110: 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69   int index, stri
e120: 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ng value)..    {
e130: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
e140: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
e150: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
e160: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
e170: 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65         if (Helpe
e180: 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64  rMethods.LogBind
e190: 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  (flags))..      
e1a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e1b0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
e1c0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
e1d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
e1e0: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
e1f0: 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d   ToUTF8(value);.
e200: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 48  ...        if (H
e210: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67  elperMethods.Log
e220: 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20  Bind(flags))..  
e230: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e240: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
e250: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d  dle, index, b);.
e260: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
e270: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
e280: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
e290: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e2a0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
e2b0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
e2c0: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
e2d0: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
e2e0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
e2f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e300: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
e310: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
e320: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
e330: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
e340: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
e350: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74  de void Bind_Dat
e360: 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
e370: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
e380: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e390: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
e3a0: 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29  ex, DateTime dt)
e3b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
e3c0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
e3d0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
e3e0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
e3f0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  t;....        if
e400: 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e   (HelperMethods.
e410: 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d  LogBind(flags)).
e420: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e430: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
e440: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 64  handle, index, d
e450: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  t);..        }..
e460: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
e470: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
e480: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e  nectionFlags.Bin
e490: 64 44 61 74 65 54 69 6d 65 57 69 74 68 4b 69 6e  dDateTimeWithKin
e4a0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
e4b0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64  ectionFlags.Bind
e4c0: 44 61 74 65 54 69 6d 65 57 69 74 68 4b 69 6e 64  DateTimeWithKind
e4d0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
e4e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 5f            if ((_
e4f0: 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 21 3d 20  datetimeKind != 
e500: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73  DateTimeKind.Uns
e510: 70 65 63 69 66 69 65 64 29 20 26 26 0d 0a 20 20  pecified) &&..  
e520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
e530: 74 2e 4b 69 6e 64 20 21 3d 20 44 61 74 65 54 69  t.Kind != DateTi
e540: 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69  meKind.Unspecifi
e550: 65 64 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ed) &&..        
e560: 20 20 20 20 20 20 20 20 28 64 74 2e 4b 69 6e 64          (dt.Kind
e570: 20 21 3d 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e   != _datetimeKin
e580: 64 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d))..           
e590: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e5a0: 20 20 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d      if (_datetim
e5b0: 65 4b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d  eKind == DateTim
e5c0: 65 4b 69 6e 64 2e 55 74 63 29 0d 0a 20 20 20 20  eKind.Utc)..    
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5e0: 64 74 20 3d 20 64 74 2e 54 6f 55 6e 69 76 65 72  dt = dt.ToUniver
e5f0: 73 61 6c 54 69 6d 65 28 29 3b 0d 0a 20 20 20 20  salTime();..    
e600: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
e610: 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 4b 69   if (_datetimeKi
e620: 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69  nd == DateTimeKi
e630: 6e 64 2e 4c 6f 63 61 6c 29 0d 0a 20 20 20 20 20  nd.Local)..     
e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
e650: 74 20 3d 20 64 74 2e 54 6f 4c 6f 63 61 6c 54 69  t = dt.ToLocalTi
e660: 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  me();..         
e670: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
e680: 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63  ...        switc
e690: 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d  h (_datetimeForm
e6a0: 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  at)..        {..
e6b0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
e6c0: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
e6d0: 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20 20  ts.Ticks:..     
e6e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e700: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 64    long value = d
e710: 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20  t.Ticks;....    
e720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e730: 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
e740: 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29  s.LogBind(flags)
e750: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e760: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e780: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
e790: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
e7a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e7b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
e7c0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
e7d0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
e7f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
e800: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
e810: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
e820: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
e830: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
e840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e850: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
e860: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
e870: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
e880: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
e890: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
e8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e8b0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65        break;..#e
e8c0: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
e8d0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
e8e0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
e8f0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
e900: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e910: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
e920: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
e930: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
e940: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
e950: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e960: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
e970: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
e980: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
e990: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
e9a0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
e9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
e9c0: 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ak;..#else..    
e9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9e0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
e9f0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
ea00: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
ea10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
ea20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
ea30: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
ea40: 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a  ats.JulianDay:..
ea50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ea70: 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61         double va
ea80: 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61 6e 44 61  lue = ToJulianDa
ea90: 79 28 64 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  y(dt);....      
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
eab0: 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e   (HelperMethods.
eac0: 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d  LogBind(flags)).
ead0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eae0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb00: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
eb10: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
eb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb30: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c      }....#if !PL
eb40: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
eb50: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
eb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
eb70: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
eb80: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
eb90: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
eba0: 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c  d_double(handle,
ebb0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
ebc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ebd0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
ebe0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
ebf0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
ec00: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
ec10: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
ec20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ec30: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c       break;..#el
ec40: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
ec50: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
ec60: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
ec70: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
ec80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ec90: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  .sqlite3_bind_do
eca0: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e  uble_interop(han
ecb0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
ecc0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ece0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
ecf0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
ed00: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
ed10: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
ed20: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
ed30: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
ed40: 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ak;..#else..    
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed60: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
ed70: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
ed80: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
ed90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
eda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
edb0: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
edc0: 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a 0d 0a  ats.UnixEpoch:..
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ede0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
edf0: 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75         long valu
ee00: 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  e = Convert.ToIn
ee10: 74 36 34 28 64 74 2e 53 75 62 74 72 61 63 74 28  t64(dt.Subtract(
ee20: 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74 61 6c  UnixEpoch).Total
ee30: 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 20 20 20  Seconds);....   
ee40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee50: 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f   if (HelperMetho
ee60: 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73  ds.LogBind(flags
ee70: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
ee80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eea0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
eeb0: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
eec0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
eed0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20         }....#if 
eee0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
eef0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
ef00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef10: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
ef20: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
ef30: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
ef40: 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c  bind_int64(handl
ef50: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
ef60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
ef70: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
ef80: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
ef90: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
efa0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
efb0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
efc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
efd0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23         break;..#
efe0: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
eff0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
f000: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
f010: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
f020: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
f030: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
f040: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61  int64_interop(ha
f050: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
f060: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
f070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
f080: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
f090: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
f0a0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
f0b0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
f0c0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
f0e0: 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  eak;..#else..   
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f100: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
f110: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
f120: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
f130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65  ..            de
f150: 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
f160: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f180: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
f190: 28 64 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  (dt);....       
f1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f1b0: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c  (HelperMethods.L
f1c0: 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a  ogBind(flags))..
f1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
f200: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
f210: 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20  ndex, b);..     
f220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f230: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f240: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
f250: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
f260: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f270: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
f280: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
f290: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
f2a0: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
f2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f2c0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
f2d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
f2e0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
f2f0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
f300: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
f310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f320: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
f340: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
f350: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
f360: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
f370: 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65  Bind_Blob(SQLite
f380: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
f390: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f3a0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
f3b0: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62   index, byte[] b
f3c0: 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d  lobData)..    {.
f3d0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
f3e0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
f3f0: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
f400: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20  lite_stmt;....  
f410: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
f420: 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28  Methods.LogBind(
f430: 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  flags))..       
f440: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f450: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
f460: 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 29  index, blobData)
f470: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
f480: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
f490: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
f4a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f4b0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
f4c0: 62 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  b(handle, index,
f4d0: 20 62 6c 6f 62 44 61 74 61 2c 20 62 6c 6f 62 44   blobData, blobD
f4e0: 61 74 61 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74  ata.Length, (Int
f4f0: 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20  Ptr)(-1));..    
f500: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
f510: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
f520: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
f530: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
f540: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
f550: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f560: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
f570: 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51  oid Bind_Null(SQ
f580: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
f590: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
f5a0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
f5b0: 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
f5c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
f5d0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
f5e0: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
f5f0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
f600: 0a 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c  .        if (Hel
f610: 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69  perMethods.LogBi
f620: 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20  nd(flags))..    
f630: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f640: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
f650: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
f660: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f670: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f680: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
f690: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f6a0: 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c  _bind_null(handl
f6b0: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
f6c0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
f6d0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
f6e0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
f6f0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
f700: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
f710: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f720: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
f730: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75  nt Bind_ParamCou
f740: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
f750: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
f760: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
f770: 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lags)..    {..  
f780: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
f790: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
f7a0: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
f7b0: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
f7c0: 20 69 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73   int value = Uns
f7d0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f7e0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
f7f0: 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61  rameter_count(ha
f800: 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndle);....      
f810: 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68    if (HelperMeth
f820: 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67  ods.LogBind(flag
f830: 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s))..        {..
f840: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
f850: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
f860: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
f870: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
f880: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65  og.LogMessage(He
f890: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
f8a0: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
f8b0: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
f8c0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
f8d0: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
f8e0: 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65          "Stateme
f8f0: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
f900: 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d  count is {1}.",.
f910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f920: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76   handleIntPtr, v
f930: 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 20 20 20  alue));..       
f940: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
f950: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
f960: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
f970: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
f980: 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d  ng Bind_ParamNam
f990: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
f9a0: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
f9b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
f9c0: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  ags, int index).
f9d0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
f9e0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
f9f0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
fa00: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
fa10: 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ;..        strin
fa20: 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21  g name;....#if !
fa30: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
fa40: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  .        int len
fa50: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 6e   = 0;..        n
fa60: 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
fa70: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
fa80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
fa90: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
faa0: 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  me_interop(handl
fab0: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  e, index, ref le
fac0: 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
fad0: 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d  ..        name =
fae0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
faf0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
fb00: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  s.sqlite3_bind_p
fb10: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61  arameter_name(ha
fb20: 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31  ndle, index), -1
fb30: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
fb40: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
fb50: 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28  Methods.LogBind(
fb60: 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  flags))..       
fb70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
fb80: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
fb90: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
fba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
fbb0: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
fbc0: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
fbd0: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
fbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
fbf0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
fc00: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
fc20: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
fc30: 74 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73  ter #{1} name is
fc40: 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20   {{{2}}}.",..   
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
fc60: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
fc70: 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20  , name));..     
fc80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
fc90: 72 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20  return name;..  
fca0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
fcb0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
fcc0: 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78   Bind_ParamIndex
fcd0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
fce0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
fcf0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
fd00: 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d  gs, string param
fd10: 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
fd20: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
fd30: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
fd40: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
fd50: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
fd60: 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 55 6e 73   int index = Uns
fd70: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
fd80: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
fd90: 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 68 61  rameter_index(ha
fda0: 6e 64 6c 65 2c 20 54 6f 55 54 46 38 28 70 61 72  ndle, ToUTF8(par
fdb0: 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20  amName));....   
fdc0: 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d       if (HelperM
fdd0: 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66  ethods.LogBind(f
fde0: 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  lags))..        
fdf0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  {..            I
fe00: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
fe10: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
fe20: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
fe30: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
fe40: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
fe50: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
fe60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
fe70: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
fe80: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
fe90: 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74             "Stat
fea0: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
feb0: 65 72 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d 65  er index of name
fec0: 20 7b 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32 7d   {{{1}}} is #{2}
fed0: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
fee0: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
fef0: 72 2c 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69 6e  r, paramName, in
ff00: 64 65 78 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  dex));..        
ff10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
ff20: 75 72 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20 20  urn index;..    
ff30: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
ff40: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
ff50: 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69 74  olumnCount(SQLit
ff60: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29  eStatement stmt)
ff70: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
ff80: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
ff90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ffa0: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73  3_column_count(s
ffb0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
ffc0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
ffd0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
ffe0: 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  de string Column
fff0: 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
10000 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
10010 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
10020 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
10030 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
10040 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e  n = 0;..      In
10050 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
10060 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10070 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
10080 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
10090 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
100a0 78 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65  x, ref len);..#e
100b0 6c 73 65 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  lse..      IntPt
100c0 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
100d0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
100e0 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74  3_column_name(st
100f0 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
10100 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66   index);..#endif
10110 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20 3d 3d  ..      if (p ==
10120 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
10130 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
10140 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
10150 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
10160 2e 4e 6f 4d 65 6d 2c 20 47 65 74 4c 61 73 74 45  .NoMem, GetLastE
10170 72 72 6f 72 28 29 29 3b 0d 0a 23 69 66 20 21 53  rror());..#if !S
10180 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
10190 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
101a0 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e  8ToString(p, len
101b0 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
101c0 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
101d0 72 69 6e 67 28 70 2c 20 2d 31 29 3b 0d 0a 23 65  ring(p, -1);..#e
101e0 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
101f0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10200 72 69 64 65 20 54 79 70 65 41 66 66 69 6e 69 74  ride TypeAffinit
10210 79 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  y ColumnAffinity
10220 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
10230 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
10240 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
10250 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
10260 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10270 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73  e3_column_type(s
10280 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
10290 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d  , index);..    }
102a0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
102b0 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
102c0 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69   ColumnType(SQLi
102d0 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
102e0 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 72 65 66  , int index, ref
102f0 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 6e 41   TypeAffinity nA
10300 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d  ffinity)..    {.
10310 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  .        int len
10320 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ;..#if !SQLITE_S
10330 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
10340 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
10350 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
10360 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10370 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
10380 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f  _decltype_intero
10390 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
103a0 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
103b0 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
103c0 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d        len = -1;.
103d0 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
103e0 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
103f0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10400 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28  column_decltype(
10410 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
10420 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64  t, index);..#end
10430 69 66 0d 0a 20 20 20 20 20 20 20 20 6e 41 66 66  if..        nAff
10440 69 6e 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66  inity = ColumnAf
10450 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
10460 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ex);....        
10470 69 66 20 28 28 70 20 21 3d 20 49 6e 74 50 74 72  if ((p != IntPtr
10480 2e 5a 65 72 6f 29 20 26 26 20 28 28 6c 65 6e 20  .Zero) && ((len 
10490 3e 20 30 29 20 7c 7c 20 28 6c 65 6e 20 3d 3d 20  > 0) || (len == 
104a0 2d 31 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  -1)))..        {
104b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
104c0 72 69 6e 67 20 64 65 63 6c 54 79 70 65 20 3d 20  ring declType = 
104d0 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20  UTF8ToString(p, 
104e0 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  len);....       
104f0 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
10500 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
10510 65 63 6c 54 79 70 65 29 29 0d 0a 20 20 20 20 20  eclType))..     
10520 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10530 6e 20 64 65 63 6c 54 79 70 65 3b 0d 0a 20 20 20  n declType;..   
10540 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10550 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20    string[] ar = 
10560 73 74 6d 74 2e 54 79 70 65 44 65 66 69 6e 69 74  stmt.TypeDefinit
10570 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ions;....       
10580 20 69 66 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29   if (ar != null)
10590 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
105a0 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64           if (ind
105b0 65 78 20 3c 20 61 72 2e 4c 65 6e 67 74 68 20 26  ex < ar.Length &
105c0 26 20 61 72 5b 69 6e 64 65 78 5d 20 21 3d 20 6e  & ar[index] != n
105d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
105e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 5b        return ar[
105f0 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20  index];..       
10600 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
10610 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74  turn String.Empt
10620 79 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  y;..    }....   
10630 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
10640 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64  de int ColumnInd
10650 65 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ex(SQLiteStateme
10660 6e 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20  nt stmt, string 
10670 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20  columnName)..   
10680 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 78 20   {..      int x 
10690 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74  = ColumnCount(st
106a0 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  mt);....      fo
106b0 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
106c0 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20  < x; n++)..     
106d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
106e0 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63  String.Compare(c
106f0 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d  olumnName, Colum
10700 6e 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 2c 20  nName(stmt, n), 
10710 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
10720 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
10730 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  se) == 0)..     
10740 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a       return n;..
10750 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72        }..      r
10760 65 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d  eturn -1;..    }
10770 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10780 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
10790 20 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e   ColumnOriginalN
107a0 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
107b0 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
107c0 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
107d0 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
107e0 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
107f0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
10800 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
10810 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
10820 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
10830 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f  umn_origin_name_
10840 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
10850 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
10860 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29  , ref len), len)
10870 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
10880 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
10890 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
108a0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
108b0 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
108c0 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
108d0 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
108e0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
108f0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
10900 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
10910 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65  g ColumnDatabase
10920 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
10930 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
10940 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
10950 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
10960 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
10970 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65  n = 0;..      re
10980 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
10990 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
109a0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
109b0 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
109c0 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  me_interop(stmt.
109d0 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
109e0 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c  dex, ref len), l
109f0 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
10a00 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
10a10 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
10a20 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10a30 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
10a40 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71  se_name(stmt._sq
10a50 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
10a60 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
10a70 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10a80 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10a90 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62  string ColumnTab
10aa0 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  leName(SQLiteSta
10ab0 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
10ac0 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
10ad0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
10ae0 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
10af0 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
10b00 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
10b10 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
10b20 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10b30 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
10b40 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
10b50 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
10b60 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65  ex, ref len), le
10b70 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
10b80 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
10b90 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
10ba0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10bb0 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
10bc0 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
10bd0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
10be0 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
10bf0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
10c00 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
10c10 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28   ColumnMetaData(
10c20 73 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c  string dataBase,
10c30 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73   string table, s
10c40 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65  tring column, re
10c50 66 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70  f string dataTyp
10c60 65 2c 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f  e, ref string co
10c70 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 72  llateSequence, r
10c80 65 66 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c  ef bool notNull,
10c90 20 72 65 66 20 62 6f 6f 6c 20 70 72 69 6d 61 72   ref bool primar
10ca0 79 4b 65 79 2c 20 72 65 66 20 62 6f 6f 6c 20 61  yKey, ref bool a
10cb0 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20  utoIncrement).. 
10cc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50     {..      IntP
10cd0 74 72 20 64 61 74 61 54 79 70 65 50 74 72 20 3d  tr dataTypePtr =
10ce0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
10cf0 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c       IntPtr coll
10d00 53 65 71 50 74 72 20 3d 20 49 6e 74 50 74 72 2e  SeqPtr = IntPtr.
10d10 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74  Zero;..      int
10d20 20 6e 6e 6f 74 4e 75 6c 6c 20 3d 20 30 3b 0d 0a   nnotNull = 0;..
10d30 20 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61        int nprima
10d40 72 79 4b 65 79 20 3d 20 30 3b 0d 0a 20 20 20 20  ryKey = 0;..    
10d50 20 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63 20 3d    int nautoInc =
10d60 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74   0;..      SQLit
10d70 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20  eErrorCode n;.. 
10d80 20 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d       int dtLen;.
10d90 0a 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e  .      int csLen
10da0 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
10db0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
10dc0 20 64 74 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20   dtLen = 0;..   
10dd0 20 20 20 63 73 4c 65 6e 20 3d 20 30 3b 0d 0a 20     csLen = 0;.. 
10de0 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
10df0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10e00 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  ite3_table_colum
10e10 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65 72  n_metadata_inter
10e20 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
10e30 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46  dataBase), ToUTF
10e40 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38  8(table), ToUTF8
10e50 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61  (column), ref da
10e60 74 61 54 79 70 65 50 74 72 2c 20 72 65 66 20 63  taTypePtr, ref c
10e70 6f 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e  ollSeqPtr, ref n
10e80 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72  notNull, ref npr
10e90 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61  imaryKey, ref na
10ea0 75 74 6f 49 6e 63 2c 20 72 65 66 20 64 74 4c 65  utoInc, ref dtLe
10eb0 6e 2c 20 72 65 66 20 63 73 4c 65 6e 29 3b 0d 0a  n, ref csLen);..
10ec0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74 4c  #else..      dtL
10ed0 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20  en = -1;..      
10ee0 63 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20  csLen = -1;.... 
10ef0 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
10f00 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
10f10 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  ite3_table_colum
10f20 6e 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c 2c  n_metadata(_sql,
10f30 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65   ToUTF8(dataBase
10f40 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29  ), ToUTF8(table)
10f50 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29  , ToUTF8(column)
10f60 2c 20 72 65 66 20 64 61 74 61 54 79 70 65 50 74  , ref dataTypePt
10f70 72 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74  r, ref collSeqPt
10f80 72 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c  r, ref nnotNull,
10f90 20 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79   ref nprimaryKey
10fa0 2c 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 29 3b  , ref nautoInc);
10fb0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
10fc0 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
10fd0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
10fe0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
10ff0 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
11000 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
11010 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 55      dataType = U
11020 54 46 38 54 6f 53 74 72 69 6e 67 28 64 61 74 61  TF8ToString(data
11030 54 79 70 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b  TypePtr, dtLen);
11040 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 65 53  ..      collateS
11050 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f  equence = UTF8To
11060 53 74 72 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74  String(collSeqPt
11070 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20  r, csLen);....  
11080 20 20 20 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e      notNull = (n
11090 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a  notNull == 1);..
110a0 20 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65 79        primaryKey
110b0 20 3d 20 28 6e 70 72 69 6d 61 72 79 4b 65 79 20   = (nprimaryKey 
110c0 3d 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 61 75  == 1);..      au
110d0 74 6f 49 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e  toIncrement = (n
110e0 61 75 74 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a  autoInc == 1);..
110f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11100 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f  ernal override o
11110 62 6a 65 63 74 20 47 65 74 4f 62 6a 65 63 74 28  bject GetObject(
11120 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
11130 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
11140 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
11150 20 73 77 69 74 63 68 20 28 43 6f 6c 75 6d 6e 41   switch (ColumnA
11160 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e  ffinity(stmt, in
11170 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  dex))..        {
11180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
11190 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
111a0 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20  Int64:..        
111b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
111c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
111d0 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73  eturn GetInt64(s
111e0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
111f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11200 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
11210 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44  e TypeAffinity.D
11220 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20  ouble:..        
11230 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11250 65 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28  eturn GetDouble(
11260 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
11280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
11290 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
112a0 54 65 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  Text:..         
112b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
112d0 74 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d  turn GetText(stm
112e0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
112f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
11300 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
11310 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f  TypeAffinity.Blo
11320 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b:..            
11330 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11340 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
11350 73 69 7a 65 20 3d 20 47 65 74 42 79 74 65 73 28  size = GetBytes(
11360 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20  stmt, index, 0, 
11370 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 0d 0a  null, 0, 0);....
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11390 20 20 20 20 69 66 20 28 28 73 69 7a 65 20 3e 20      if ((size > 
113a0 30 29 20 26 26 20 28 73 69 7a 65 20 3c 3d 20 69  0) && (size <= i
113b0 6e 74 2e 4d 61 78 56 61 6c 75 65 29 29 0d 0a 20  nt.MaxValue)).. 
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79                by
113f0 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e 65 77  te[] bytes = new
11400 20 62 79 74 65 5b 28 69 6e 74 29 73 69 7a 65 5d   byte[(int)size]
11410 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11420 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
11430 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65  Bytes(stmt, inde
11440 78 2c 20 30 2c 20 62 79 74 65 73 2c 20 30 2c 20  x, 0, bytes, 0, 
11450 28 69 6e 74 29 73 69 7a 65 29 3b 0d 0a 0d 0a 20  (int)size);.... 
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11470 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79         return by
11480 74 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tes;..          
11490 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
114a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114b0 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
114c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
114d0 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
114e0 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 3a 0d  eAffinity.Null:.
114f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11500 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11510 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
11520 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20  BNull.Value;..  
11530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11540 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
11550 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
11560 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
11570 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20  ception();..    
11580 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
11590 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c  l override doubl
115a0 65 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69  e GetDouble(SQLi
115b0 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
115c0 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
115d0 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
115e0 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
115f0 4f 52 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ORK..      retur
11600 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
11610 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
11620 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74  lumn_double(stmt
11630 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
11640 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53  ndex);..#elif !S
11650 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
11660 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c        double val
11670 75 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20  ue = 0.0;..     
11680 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11690 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
116a0 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  umn_double_inter
116b0 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
116c0 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
116d0 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
116e0 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23  return value;..#
116f0 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
11700 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
11710 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
11720 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
11730 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11740 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 47 65  override bool Ge
11750 74 42 6f 6f 6c 65 61 6e 28 53 51 4c 69 74 65 53  tBoolean(SQLiteS
11760 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
11770 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
11780 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ..      return T
11790 6f 42 6f 6f 6c 65 61 6e 28 47 65 74 4f 62 6a 65  oBoolean(GetObje
117a0 63 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  ct(stmt, index),
117b0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76   CultureInfo.Inv
117c0 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 66  ariantCulture, f
117d0 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  alse);..    }...
117e0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
117f0 65 72 72 69 64 65 20 73 62 79 74 65 20 47 65 74  erride sbyte Get
11800 53 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74  SByte(SQLiteStat
11810 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
11820 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
11830 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
11840 65 63 6b 65 64 28 28 73 62 79 74 65 29 28 47 65  ecked((sbyte)(Ge
11850 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64  tInt32(stmt, ind
11860 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61  ex) & byte.MaxVa
11870 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  lue));..    }...
11880 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11890 65 72 72 69 64 65 20 62 79 74 65 20 47 65 74 42  erride byte GetB
118a0 79 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  yte(SQLiteStatem
118b0 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
118c0 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
118d0 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
118e0 6b 65 64 28 28 62 79 74 65 29 28 47 65 74 49 6e  ked((byte)(GetIn
118f0 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
11900 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65   & byte.MaxValue
11910 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
11920 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11930 69 64 65 20 73 68 6f 72 74 20 47 65 74 49 6e 74  ide short GetInt
11940 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  16(SQLiteStateme
11950 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
11960 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
11970 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
11980 65 64 28 28 73 68 6f 72 74 29 28 47 65 74 49 6e  ed((short)(GetIn
11990 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
119a0 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c   & ushort.MaxVal
119b0 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
119c0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
119d0 72 72 69 64 65 20 75 73 68 6f 72 74 20 47 65 74  rride ushort Get
119e0 55 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61  UInt16(SQLiteSta
119f0 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
11a00 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
11a10 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
11a20 68 65 63 6b 65 64 28 28 75 73 68 6f 72 74 29 28  hecked((ushort)(
11a30 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
11a40 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d  ndex) & ushort.M
11a50 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  axValue));..    
11a60 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
11a70 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
11a80 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  etInt32(SQLiteSt
11a90 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
11aa0 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
11ab0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
11ac0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11ad0 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
11ae0 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  _int(stmt._sqlit
11af0 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
11b00 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
11b10 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
11b20 75 69 6e 74 20 47 65 74 55 49 6e 74 33 32 28 53  uint GetUInt32(S
11b30 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
11b40 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
11b50 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
11b60 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
11b70 75 69 6e 74 29 47 65 74 49 6e 74 33 32 28 73 74  uint)GetInt32(st
11b80 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20  mt, index));..  
11b90 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
11ba0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
11bb0 67 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74  g GetInt64(SQLit
11bc0 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
11bd0 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
11be0 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
11bf0 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
11c00 52 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  RK..      return
11c10 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11c20 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
11c30 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f  umn_int64(stmt._
11c40 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
11c50 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ex);..#elif !SQL
11c60 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
11c70 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d      long value =
11c80 20 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66   0;..      Unsaf
11c90 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11ca0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
11cb0 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  t64_interop(stmt
11cc0 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
11cd0 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
11ce0 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
11cf0 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20  value;..#else.. 
11d00 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
11d10 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
11d20 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
11d30 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
11d40 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
11d50 65 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36  e ulong GetUInt6
11d60 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  4(SQLiteStatemen
11d70 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
11d80 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
11d90 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
11da0 64 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36  d((ulong)GetInt6
11db0 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  4(stmt, index));
11dc0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
11dd0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
11de0 20 73 74 72 69 6e 67 20 47 65 74 54 65 78 74 28   string GetText(
11df0 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
11e00 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
11e10 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
11e20 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
11e30 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
11e40 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
11e50 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
11e60 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11e70 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
11e80 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d  text_interop(stm
11e90 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
11ea0 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c  index, ref len),
11eb0 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
11ec0 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
11ed0 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
11ee0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11ef0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
11f00 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
11f10 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20  mt, index),..   
11f20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
11f30 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11f40 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74  _column_bytes(st
11f50 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
11f60 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69   index));..#endi
11f70 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
11f80 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
11f90 65 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61  e DateTime GetDa
11fa0 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61  teTime(SQLiteSta
11fb0 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
11fc0 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
11fd0 20 20 20 20 20 20 69 66 20 28 5f 64 61 74 65 74        if (_datet
11fe0 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c  imeFormat == SQL
11ff0 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54  iteDateFormats.T
12000 69 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 72  icks)..        r
12010 65 74 75 72 6e 20 54 69 63 6b 73 54 6f 44 61 74  eturn TicksToDat
12020 65 54 69 6d 65 28 47 65 74 49 6e 74 36 34 28 73  eTime(GetInt64(s
12030 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61  tmt, index), _da
12040 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20  tetimeKind);..  
12050 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61      else if (_da
12060 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20  tetimeFormat == 
12070 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
12080 73 2e 4a 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20  s.JulianDay)..  
12090 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
120a0 61 74 65 54 69 6d 65 28 47 65 74 44 6f 75 62 6c  ateTime(GetDoubl
120b0 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e(stmt, index), 
120c0 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d  _datetimeKind);.
120d0 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28  .      else if (
120e0 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20  _datetimeFormat 
120f0 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  == SQLiteDateFor
12100 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 29 0d  mats.UnixEpoch).
12110 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
12120 55 6e 69 78 45 70 6f 63 68 54 6f 44 61 74 65 54  UnixEpochToDateT
12130 69 6d 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d  ime(GetInt64(stm
12140 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65  t, index), _date
12150 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69  timeKind);....#i
12160 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
12170 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
12180 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65  n = 0;..      re
12190 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
121a0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
121b0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
121c0 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  mn_text_interop(
121d0 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
121e0 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  t, index, ref le
121f0 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  n), len);..#else
12200 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ..      return T
12210 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65  oDateTime(Unsafe
12220 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12230 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
12240 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
12250 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20  tmt, index),..  
12260 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
12270 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
12280 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73  3_column_bytes(s
12290 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
122a0 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64  , index));..#end
122b0 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
122c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
122d0 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73  de long GetBytes
122e0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
122f0 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
12300 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65  , int nDataOffse
12310 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c  t, byte[] bDest,
12320 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74   int nStart, int
12330 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b   nLength)..    {
12340 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e  ..      int nlen
12350 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
12360 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
12370 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74  olumn_bytes(stmt
12380 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
12390 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
123a0 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61  // If no destina
123b0 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74  tion buffer, ret
123c0 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65  urn the size nee
123d0 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28  ded...      if (
123e0 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  bDest == null) r
123f0 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20  eturn nlen;.... 
12400 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64       int nCopied
12410 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20   = nLength;.... 
12420 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
12430 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73   + nStart > bDes
12440 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65  t.Length) nCopie
12450 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  d = bDest.Length
12460 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20   - nStart;..    
12470 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
12480 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c  nDataOffset > nl
12490 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c  en) nCopied = nl
124a0 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74  en - nDataOffset
124b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
124c0 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20  Copied > 0)..   
124d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
124e0 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66  tPtr ptr = Unsaf
124f0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12500 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
12510 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  ob(stmt._sqlite_
12520 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d  stmt, index);...
12530 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c  .        Marshal
12540 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70  .Copy((IntPtr)(p
12550 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e  tr.ToInt64() + n
12560 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65  DataOffset), bDe
12570 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70  st, nStart, nCop
12580 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ied);..      }..
12590 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
125a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f    {..        nCo
125b0 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  pied = 0;..     
125c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
125d0 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20  rn nCopied;..   
125e0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
125f0 61 6c 20 6f 76 65 72 72 69 64 65 20 63 68 61 72  al override char
12600 20 47 65 74 43 68 61 72 28 53 51 4c 69 74 65 53   GetChar(SQLiteS
12610 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
12620 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
12630 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43  ..      return C
12640 6f 6e 76 65 72 74 2e 54 6f 43 68 61 72 28 47 65  onvert.ToChar(Ge
12650 74 55 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e  tUInt16(stmt, in
12660 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  dex));..    }...
12670 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
12680 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43  erride long GetC
12690 68 61 72 73 28 53 51 4c 69 74 65 53 74 61 74 65  hars(SQLiteState
126a0 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
126b0 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f  ndex, int nDataO
126c0 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 44  ffset, char[] bD
126d0 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c  est, int nStart,
126e0 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20   int nLength).. 
126f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
12700 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  nlen;..      int
12710 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
12720 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72  th;....      str
12730 69 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65 78  ing str = GetTex
12740 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
12750 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74  .      nlen = st
12760 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  r.Length;....   
12770 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20     if (bDest == 
12780 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65  null) return nle
12790 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  n;....      if (
127a0 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74  nCopied + nStart
127b0 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29   > bDest.Length)
127c0 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74   nCopied = bDest
127d0 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74  .Length - nStart
127e0 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f  ;..      if (nCo
127f0 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73  pied + nDataOffs
12800 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69  et > nlen) nCopi
12810 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74  ed = nlen - nDat
12820 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20  aOffset;....    
12830 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20    if (nCopied > 
12840 30 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72 2e  0)..        str.
12850 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66 73  CopyTo(nDataOffs
12860 65 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72  et, bDest, nStar
12870 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20  t, nCopied);..  
12880 20 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64      else nCopied
12890 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72   = 0;....      r
128a0 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a  eturn nCopied;..
128b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
128c0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
128d0 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74  ool IsNull(SQLit
128e0 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
128f0 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
12900 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
12910 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79   (ColumnAffinity
12920 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d  (stmt, index) ==
12930 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75   TypeAffinity.Nu
12940 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ll);..    }.... 
12950 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
12960 72 69 64 65 20 69 6e 74 20 41 67 67 72 65 67 61  ride int Aggrega
12970 74 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63  teCount(IntPtr c
12980 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a  ontext)..    {..
12990 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
129a0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
129b0 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61  .sqlite3_aggrega
129c0 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74  te_count(context
129d0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
129e0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
129f0 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
12a00 64 65 20 43 72 65 61 74 65 46 75 6e 63 74 69 6f  de CreateFunctio
12a10 6e 28 73 74 72 69 6e 67 20 73 74 72 46 75 6e 63  n(string strFunc
12a20 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c  tion, int nArgs,
12a30 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65   bool needCollSe
12a40 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63  q, SQLiteCallbac
12a50 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 61  k func, SQLiteCa
12a60 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74 65 70 2c  llback funcstep,
12a70 20 53 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c   SQLiteFinalCall
12a80 62 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c 2c 20  back funcfinal, 
12a90 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a  bool canThrow)..
12aa0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
12ab0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
12ac0 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  ...#if !SQLITE_S
12ad0 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e  TANDARD..      n
12ae0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
12af0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
12b00 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69  reate_function_i
12b10 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55  nterop(_sql, ToU
12b20 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
12b30 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50  , nArgs, 4, IntP
12b40 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
12b50 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
12b60 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71  al, (needCollSeq
12b70 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20   == true) ? 1 : 
12b80 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  0);..      if (n
12b90 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
12ba0 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61  ode.Ok) n = Unsa
12bb0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12bc0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
12bd0 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28  unction_interop(
12be0 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
12bf0 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
12c00 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 1, IntPtr.Zero
12c10 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
12c20 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65  , funcfinal, (ne
12c30 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75  edCollSeq == tru
12c40 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65  e) ? 1 : 0);..#e
12c50 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  lse..      n = U
12c60 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12c70 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
12c80 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c  e_function(_sql,
12c90 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74   ToUTF8(strFunct
12ca0 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20  ion), nArgs, 4, 
12cb0 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
12cc0 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
12cd0 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20  cfinal);..      
12ce0 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
12cf0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d  rrorCode.Ok) n =
12d00 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
12d10 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
12d20 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71  ate_function(_sq
12d30 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
12d40 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31  ction), nArgs, 1
12d50 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
12d60 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
12d70 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64  uncfinal);..#end
12d80 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28 63 61  if..      if (ca
12d90 6e 54 68 72 6f 77 20 26 26 20 28 6e 20 21 3d 20  nThrow && (n != 
12da0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
12db0 4f 6b 29 29 20 74 68 72 6f 77 20 6e 65 77 20 53  Ok)) throw new S
12dc0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
12dd0 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
12de0 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  );..      return
12df0 20 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20   n;..    }....  
12e00 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12e10 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
12e20 6f 64 65 20 43 72 65 61 74 65 43 6f 6c 6c 61 74  ode CreateCollat
12e30 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 43 6f  ion(string strCo
12e40 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43  llation, SQLiteC
12e50 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53  ollation func, S
12e60 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66  QLiteCollation f
12e70 75 6e 63 31 36 2c 20 62 6f 6f 6c 20 63 61 6e 54  unc16, bool canT
12e80 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  hrow)..    {..  
12e90 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
12ea0 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
12eb0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12ec0 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
12ed0 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
12ee0 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c  8(strCollation),
12ef0 20 32 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   2, IntPtr.Zero,
12f00 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20   func16);..     
12f10 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
12f20 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20  ErrorCode.Ok) n 
12f30 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
12f40 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
12f50 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f  eate_collation(_
12f60 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43  sql, ToUTF8(strC
12f70 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e  ollation), 1, In
12f80 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29  tPtr.Zero, func)
12f90 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 63 61 6e  ;..      if (can
12fa0 54 68 72 6f 77 20 26 26 20 28 6e 20 21 3d 20 53  Throw && (n != S
12fb0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
12fc0 6b 29 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  k)) throw new SQ
12fd0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
12fe0 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
12ff0 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
13000 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  n;..    }....   
13010 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
13020 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f  de int ContextCo
13030 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c  llateCompare(Col
13040 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
13050 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63  um enc, IntPtr c
13060 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73  ontext, string s
13070 31 2c 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20  1, string s2).. 
13080 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
13090 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
130a0 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20    byte[] b1;..  
130b0 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a      byte[] b2;..
130c0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78        System.Tex
130d0 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65  t.Encoding conve
130e0 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rter = null;....
130f0 20 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e        switch (en
13100 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  c)..      {..   
13110 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
13120 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
13130 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20  UTF8:..         
13140 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
13150 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
13160 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20  g.UTF8;..       
13170 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
13180 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
13190 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
131a0 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16LE:..        
131b0 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
131c0 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
131d0 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20  ng.Unicode;..   
131e0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
131f0 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
13200 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
13210 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20  m.UTF16BE:..    
13220 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
13230 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
13240 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e  coding.BigEndian
13250 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20  Unicode;..      
13260 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
13270 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20    }....      b1 
13280 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
13290 79 74 65 73 28 73 31 29 3b 0d 0a 20 20 20 20 20  ytes(s1);..     
132a0 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b2 = converter.
132b0 47 65 74 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d  GetBytes(s2);...
132c0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
132d0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
132e0 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
132f0 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e  t_collcompare_in
13300 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62  terop(context, b
13310 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32  1, b1.Length, b2
13320 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23  , b2.Length);..#
13330 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
13340 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
13350 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
13360 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
13370 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
13380 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e  override int Con
13390 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61  textCollateCompa
133a0 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  re(CollationEnco
133b0 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e  dingEnum enc, In
133c0 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 63 68  tPtr context, ch
133d0 61 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20  ar[] c1, char[] 
133e0 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  c2)..    {..#if 
133f0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
13400 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
13410 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  1;..      byte[]
13420 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74   b2;..      Syst
13430 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
13440 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c   converter = nul
13450 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74  l;....      swit
13460 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20  ch (enc)..      
13470 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  {..        case 
13480 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
13490 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20  gEnum.UTF8:..   
134a0 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
134b0 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
134c0 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20  ncoding.UTF8;.. 
134d0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
134e0 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
134f0 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
13500 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20  num.UTF16LE:..  
13510 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
13520 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
13530 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65  Encoding.Unicode
13540 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
13550 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
13560 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
13570 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a  ingEnum.UTF16BE:
13580 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76  ..          conv
13590 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54  erter = System.T
135a0 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67  ext.Encoding.Big
135b0 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a  EndianUnicode;..
135c0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
135d0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
135e0 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65     b1 = converte
135f0 72 2e 47 65 74 42 79 74 65 73 28 63 31 29 3b 0d  r.GetBytes(c1);.
13600 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76  .      b2 = conv
13610 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63  erter.GetBytes(c
13620 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  2);....      ret
13630 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
13640 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13650 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70  context_collcomp
13660 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  are_interop(cont
13670 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67  ext, b1, b1.Leng
13680 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74  th, b2, b2.Lengt
13690 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  h);..#else..    
136a0 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
136b0 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
136c0 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
136d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
136e0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 43  ernal override C
136f0 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
13700 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71   GetCollationSeq
13710 75 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63  uence(SQLiteFunc
13720 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74  tion func, IntPt
13730 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
13740 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
13750 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 43  TANDARD..      C
13760 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
13770 20 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61   seq = new Colla
13780 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d  tionSequence();.
13790 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
137a0 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 74   0;..      int t
137b0 79 70 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ype = 0;..      
137c0 69 6e 74 20 65 6e 63 20 3d 20 30 3b 0d 0a 20 20  int enc = 0;..  
137d0 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55      IntPtr p = U
137e0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
137f0 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ds.sqlite3_conte
13800 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72  xt_collseq_inter
13810 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20  op(context, ref 
13820 74 79 70 65 2c 20 72 65 66 20 65 6e 63 2c 20 72  type, ref enc, r
13830 65 66 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ef len);....    
13840 20 20 69 66 20 28 70 20 21 3d 20 6e 75 6c 6c 29    if (p != null)
13850 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54 46 38   seq.Name = UTF8
13860 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29  ToString(p, len)
13870 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 54 79 70  ;..      seq.Typ
13880 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 54 79  e = (CollationTy
13890 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a 20 20  peEnum)type;..  
138a0 20 20 20 20 73 65 71 2e 5f 66 75 6e 63 20 3d 20      seq._func = 
138b0 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73 65 71  func;..      seq
138c0 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43 6f 6c  .Encoding = (Col
138d0 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
138e0 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20  um)enc;....     
138f0 20 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a 23 65   return seq;..#e
13900 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
13910 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
13920 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
13930 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
13940 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
13950 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
13960 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73 28  ParamValueBytes(
13970 49 6e 74 50 74 72 20 70 2c 20 69 6e 74 20 6e 44  IntPtr p, int nD
13980 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b  ataOffset, byte[
13990 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74  ] bDest, int nSt
139a0 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68  art, int nLength
139b0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
139c0 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66  int nlen = Unsaf
139d0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
139e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
139f0 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  es(p);....      
13a00 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61  // If no destina
13a10 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74  tion buffer, ret
13a20 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65  urn the size nee
13a30 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28  ded...      if (
13a40 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  bDest == null) r
13a50 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20  eturn nlen;.... 
13a60 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64       int nCopied
13a70 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20   = nLength;.... 
13a80 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
13a90 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73   + nStart > bDes
13aa0 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65  t.Length) nCopie
13ab0 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  d = bDest.Length
13ac0 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20   - nStart;..    
13ad0 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
13ae0 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c  nDataOffset > nl
13af0 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c  en) nCopied = nl
13b00 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74  en - nDataOffset
13b10 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
13b20 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20  Copied > 0)..   
13b30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
13b40 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66  tPtr ptr = Unsaf
13b50 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13b60 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f  qlite3_value_blo
13b70 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  b(p);....       
13b80 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49   Marshal.Copy((I
13b90 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74  ntPtr)(ptr.ToInt
13ba0 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73  64() + nDataOffs
13bb0 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61  et), bDest, nSta
13bc0 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20  rt, nCopied);.. 
13bd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
13be0 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  se..      {..   
13bf0 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30       nCopied = 0
13c00 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
13c10 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69      return nCopi
13c20 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ed;..    }....  
13c30 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13c40 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74 50 61  ide double GetPa
13c50 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28 49  ramValueDouble(I
13c60 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
13c70 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
13c80 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
13c90 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  K..      return 
13ca0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13cb0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
13cc0 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a  e_double(ptr);..
13cd0 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
13ce0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 64 6f  ANDARD..      do
13cf0 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 30 2e 30  uble value = 0.0
13d00 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  ;..      UnsafeN
13d10 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13d20 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
13d30 65 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 72  e_interop(ptr, r
13d40 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ef value);..    
13d50 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
13d60 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
13d70 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
13d80 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
13d90 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
13da0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13db0 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  l override int G
13dc0 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 33  etParamValueInt3
13dd0 32 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20  2(IntPtr ptr).. 
13de0 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
13df0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
13e00 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
13e10 61 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a  alue_int(ptr);..
13e20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
13e30 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
13e40 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ong GetParamValu
13e50 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20 70 74  eInt64(IntPtr pt
13e60 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  r)..    {..#if !
13e70 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
13e80 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
13e90 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
13ea0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
13eb0 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28  te3_value_int64(
13ec0 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  ptr);..#elif !SQ
13ed0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
13ee0 20 20 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65       Int64 value
13ef0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73   = 0;..      Uns
13f00 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13f10 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69  .sqlite3_value_i
13f20 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 74 72  nt64_interop(ptr
13f30 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20  , ref value);.. 
13f40 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
13f50 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  e;..#else..     
13f60 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
13f70 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
13f80 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
13f90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
13fa0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
13fb0 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c  ring GetParamVal
13fc0 75 65 54 65 78 74 28 49 6e 74 50 74 72 20 70 74  ueText(IntPtr pt
13fd0 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  r)..    {..#if !
13fe0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
13ff0 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
14000 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72   0;..      retur
14010 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
14020 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14030 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
14040 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70 74  _text_interop(pt
14050 72 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e  r, ref len), len
14060 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
14070 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
14080 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
14090 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
140a0 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72 29  _value_text(ptr)
140b0 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ,..        Unsaf
140c0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
140d0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
140e0 65 73 28 70 74 72 29 29 3b 0d 0a 23 65 6e 64 69  es(ptr));..#endi
140f0 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
14100 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
14110 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 47  e TypeAffinity G
14120 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65  etParamValueType
14130 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
14140 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
14150 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
14160 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
14170 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a  lue_type(ptr);..
14180 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
14190 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
141a0 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49  oid ReturnBlob(I
141b0 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62  ntPtr context, b
141c0 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20  yte[] value)..  
141d0 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
141e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
141f0 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c  qlite3_result_bl
14200 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75  ob(context, valu
14210 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c  e, value.Length,
14220 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
14230 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
14240 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
14250 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c  void ReturnDoubl
14260 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  e(IntPtr context
14270 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d  , double value).
14280 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41  .    {..#if !PLA
14290 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
142a0 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e  MEWORK..      Un
142b0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
142c0 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
142d0 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c  _double(context,
142e0 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20   value);..#elif 
142f0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
14300 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
14310 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
14320 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
14330 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  e_interop(contex
14340 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  t, ref value);..
14350 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
14360 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
14370 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
14380 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
14390 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
143a0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
143b0 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74  eturnError(IntPt
143c0 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
143d0 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
143e0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
143f0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14400 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
14410 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28  context, ToUTF8(
14420 76 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65  value), value.Le
14430 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ngth);..    }...
14440 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14450 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
14460 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63  rnInt32(IntPtr c
14470 6f 6e 74 65 78 74 2c 20 69 6e 74 20 76 61 6c 75  ontext, int valu
14480 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
14490 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
144a0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
144b0 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c  ult_int(context,
144c0 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d   value);..    }.
144d0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
144e0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
144f0 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72  turnInt64(IntPtr
14500 20 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76   context, long v
14510 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  alue)..    {..#i
14520 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
14530 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
14540 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
14550 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14560 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e  result_int64(con
14570 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  text, value);..#
14580 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
14590 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73  NDARD..      Uns
145a0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
145b0 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
145c0 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f  int64_interop(co
145d0 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65  ntext, ref value
145e0 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
145f0 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
14600 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
14610 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
14620 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
14630 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
14640 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e  id ReturnNull(In
14650 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20  tPtr context).. 
14660 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
14670 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
14680 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e  sqlite3_result_n
14690 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20  ull(context);.. 
146a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
146b0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
146c0 69 64 20 52 65 74 75 72 6e 54 65 78 74 28 49 6e  id ReturnText(In
146d0 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74  tPtr context, st
146e0 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  ring value)..   
146f0 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d   {..      byte[]
14700 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75   b = ToUTF8(valu
14710 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  e);..      Unsaf
14720 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
14730 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
14740 78 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54  xt(context, ToUT
14750 46 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e  F8(value), b.Len
14760 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72  gth - 1, (IntPtr
14770 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  )(-1));..    }..
14780 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49  ..#if INTEROP_VI
14790 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20  RTUAL_TABLE..   
147a0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
147b0 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
147c0 65 73 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65  es the file name
147d0 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 6c   of the native l
147e0 69 62 72 61 72 79 20 63 6f 6e 74 61 69 6e 69 6e  ibrary containin
147f0 67 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20 20  g the native..  
14800 20 20 2f 2f 2f 20 22 76 74 73 68 69 6d 22 20 65    /// "vtshim" e
14810 78 74 65 6e 73 69 6f 6e 20 2d 41 4e 44 2d 20 77  xtension -AND- w
14820 68 65 74 68 65 72 20 69 74 20 73 68 6f 75 6c 64  hether it should
14830 20 62 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   be dynamically 
14840 6c 6f 61 64 65 64 20 62 79 0d 0a 20 20 20 20 2f  loaded by..    /
14850 2f 2f 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a  // this class...
14860 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
14870 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
14880 61 6d 20 6e 61 6d 65 3d 22 69 73 4c 6f 61 64 4e  am name="isLoadN
14890 65 65 64 65 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f  eeded">..    ///
148a0 20 54 68 69 73 20 6f 75 74 70 75 74 20 70 61 72   This output par
148b0 61 6d 65 74 65 72 20 77 69 6c 6c 20 62 65 20 73  ameter will be s
148c0 65 74 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 20 69  et to non-zero i
148d0 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 6e  f the returned n
148e0 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c  ative..    /// l
148f0 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65  ibrary file name
14900 20 73 68 6f 75 6c 64 20 62 65 20 64 79 6e 61 6d   should be dynam
14910 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20 70 72  ically loaded pr
14920 69 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 69 6e  ior to attemptin
14930 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63  g..    /// the c
14940 72 65 61 74 69 6f 6e 20 6f 66 20 6e 61 74 69 76  reation of nativ
14950 65 20 64 69 73 70 6f 73 61 62 6c 65 20 65 78 74  e disposable ext
14960 65 6e 73 69 6f 6e 20 6d 6f 64 75 6c 65 73 2e 0d  ension modules..
14970 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
14980 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
14990 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  rns>..    /// Th
149a0 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 66 20 74  e file name of t
149b0 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72  he native librar
149c0 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  y containing the
149d0 20 6e 61 74 69 76 65 20 22 76 74 73 68 69 6d 22   native "vtshim"
149e0 0d 0a 20 20 20 20 2f 2f 2f 20 65 78 74 65 6e 73  ..    /// extens
149f0 69 6f 6e 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66  ion -OR- null if
14a00 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 64 65   it cannot be de
14a10 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20 2f  termined...    /
14a20 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
14a30 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
14a40 67 20 47 65 74 53 68 69 6d 45 78 74 65 6e 73 69  g GetShimExtensi
14a50 6f 6e 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20  onFileName(..   
14a60 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 69 73       ref bool is
14a70 4c 6f 61 64 4e 65 65 64 65 64 20 2f 2a 20 6f 75  LoadNeeded /* ou
14a80 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 29 0d  t */..        ).
14a90 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
14aa0 69 66 20 28 5f 73 68 69 6d 49 73 4c 6f 61 64 4e  if (_shimIsLoadN
14ab0 65 65 64 65 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eeded != null)..
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 69 73 4c 6f              isLo
14ad0 61 64 4e 65 65 64 65 64 20 3d 20 28 62 6f 6f 6c  adNeeded = (bool
14ae0 29 5f 73 68 69 6d 49 73 4c 6f 61 64 4e 65 65 64  )_shimIsLoadNeed
14af0 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 65 6c 73  ed;..        els
14b00 65 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 53 54  e..#if SQLITE_ST
14b10 41 4e 44 41 52 44 20 7c 7c 20 55 53 45 5f 49 4e  ANDARD || USE_IN
14b20 54 45 52 4f 50 5f 44 4c 4c 20 7c 7c 20 50 4c 41  TEROP_DLL || PLA
14b30 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
14b40 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
14b50 20 20 20 20 69 73 4c 6f 61 64 4e 65 65 64 65 64      isLoadNeeded
14b60 20 3d 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73   = HelperMethods
14b70 2e 49 73 57 69 6e 64 6f 77 73 28 29 3b 20 2f 2a  .IsWindows(); /*
14b80 20 43 4f 4d 50 41 54 20 2a 2f 0d 0a 23 65 6c 73   COMPAT */..#els
14b90 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  e..            i
14ba0 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 66 61  sLoadNeeded = fa
14bb0 6c 73 65 3b 20 2f 2a 20 6d 69 78 65 64 2d 6d 6f  lse; /* mixed-mo
14bc0 64 65 20 61 73 73 65 6d 62 6c 79 20 2a 2f 0d 0a  de assembly */..
14bd0 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
14be0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
14bf0 65 20 3d 20 5f 73 68 69 6d 45 78 74 65 6e 73 69  e = _shimExtensi
14c00 6f 6e 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  onFileName;.... 
14c10 20 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e         if (fileN
14c20 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame != null)..  
14c30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
14c40 20 66 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 23 69   fileName;....#i
14c50 66 20 28 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f (SQLITE_STANDA
14c60 52 44 20 7c 7c 20 55 53 45 5f 49 4e 54 45 52 4f  RD || USE_INTERO
14c70 50 5f 44 4c 4c 20 7c 7c 20 50 4c 41 54 46 4f 52  P_DLL || PLATFOR
14c80 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
14c90 52 4b 29 20 26 26 20 50 52 45 4c 4f 41 44 5f 4e  RK) && PRELOAD_N
14ca0 41 54 49 56 45 5f 4c 49 42 52 41 52 59 0d 0a 20  ATIVE_LIBRARY.. 
14cb0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
14cc0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
14cd0 73 2e 47 65 74 4e 61 74 69 76 65 4c 69 62 72 61  s.GetNativeLibra
14ce0 72 79 46 69 6c 65 4e 61 6d 65 4f 6e 6c 79 28 29  ryFileNameOnly()
14cf0 3b 20 2f 2a 20 43 4f 4d 50 41 54 20 2a 2f 0d 0a  ; /* COMPAT */..
14d00 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 72  #else..        r
14d10 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e  eturn null;..#en
14d20 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
14d30 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
14d40 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
14d50 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
14d60 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
14d70 20 6f 72 64 65 72 20 74 6f 20 63 72 65 61 74 65   order to create
14d80 20 61 20 64 69 73 70 6f 73 61 62 6c 65 0d 0a 20   a disposable.. 
14d90 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f     /// module co
14da0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70  ntaining the imp
14db0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
14dc0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
14dd0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
14de0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
14df0 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65  ram name="module
14e00 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
14e10 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 74 6f  module object to
14e20 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 72   be used when cr
14e30 65 61 74 69 6e 67 20 74 68 65 20 6e 61 74 69 76  eating the nativ
14e40 65 20 64 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64  e disposable mod
14e50 75 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ule...    /// </
14e60 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
14e70 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
14e80 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  gs">..    /// Th
14e90 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20  e flags for the 
14ea0 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20  associated <see 
14eb0 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e  cref="SQLiteConn
14ec0 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63  ection" /> objec
14ed0 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
14ee0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
14ef0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
14f00 72 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65  ride void Create
14f10 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64  Module(SQLiteMod
14f20 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69  ule module, SQLi
14f30 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
14f40 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d  s flags)..    {.
14f50 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64  .        if (mod
14f60 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ule == null)..  
14f70 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
14f80 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
14f90 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c  Exception("modul
14fa0 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
14fb0 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
14fc0 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 28 66 6c  s.NoLogModule(fl
14fd0 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ags))..        {
14fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f  ..            mo
14ff0 64 75 6c 65 2e 4c 6f 67 45 72 72 6f 72 73 20 3d  dule.LogErrors =
15000 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c   HelperMethods.L
15010 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 28 66 6c  ogModuleError(fl
15020 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ags);..         
15030 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 78 63     module.LogExc
15040 65 70 74 69 6f 6e 73 20 3d 20 48 65 6c 70 65 72  eptions = Helper
15050 4d 65 74 68 6f 64 73 2e 4c 6f 67 4d 6f 64 75 6c  Methods.LogModul
15060 65 45 78 63 65 70 74 69 6f 6e 28 66 6c 61 67 73  eException(flags
15070 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
15080 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71  .        if (_sq
15090 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l == null)..    
150a0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
150b0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
150c0 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  n("connection ha
150d0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
150e0 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dle");....      
150f0 20 20 62 6f 6f 6c 20 69 73 4c 6f 61 64 4e 65 65    bool isLoadNee
15100 64 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ded = false;..  
15110 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
15120 65 4e 61 6d 65 20 3d 20 47 65 74 53 68 69 6d 45  eName = GetShimE
15130 78 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61 6d 65  xtensionFileName
15140 28 72 65 66 20 69 73 4c 6f 61 64 4e 65 65 64 65  (ref isLoadNeede
15150 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  d);....        i
15160 66 20 28 69 73 4c 6f 61 64 4e 65 65 64 65 64 29  f (isLoadNeeded)
15170 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
15180 20 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c           if (fil
15190 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  eName == null)..
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151b0 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
151c0 45 78 63 65 70 74 69 6f 6e 28 22 74 68 65 20 66  Exception("the f
151d0 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  ile name for the
151e0 20 5c 22 76 74 73 68 69 6d 5c 22 20 65 78 74 65   \"vtshim\" exte
151f0 6e 73 69 6f 6e 20 69 73 20 75 6e 6b 6e 6f 77 6e  nsion is unknown
15200 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
15210 20 20 20 69 66 20 28 5f 73 68 69 6d 45 78 74 65     if (_shimExte
15220 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 20 3d 3d  nsionProcName ==
15230 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
15240 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
15250 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
15260 6e 28 22 74 68 65 20 65 6e 74 72 79 20 70 6f 69  n("the entry poi
15270 6e 74 20 66 6f 72 20 74 68 65 20 5c 22 76 74 73  nt for the \"vts
15280 68 69 6d 5c 22 20 65 78 74 65 6e 73 69 6f 6e 20  him\" extension 
15290 69 73 20 75 6e 6b 6e 6f 77 6e 22 29 3b 0d 0a 0d  is unknown");...
152a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74  .            Set
152b0 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 74 72  LoadExtension(tr
152c0 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
152d0 20 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28    LoadExtension(
152e0 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 68 69 6d 45  fileName, _shimE
152f0 78 74 65 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d 65  xtensionProcName
15300 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
15310 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64  .        if (mod
15320 75 6c 65 2e 43 72 65 61 74 65 44 69 73 70 6f 73  ule.CreateDispos
15330 61 62 6c 65 4d 6f 64 75 6c 65 28 5f 73 71 6c 29  ableModule(_sql)
15340 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
15350 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d            if (_m
15360 6f 64 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  odules == null).
15370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15380 20 5f 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20   _modules = new 
15390 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
153a0 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e  g, SQLiteModule>
153b0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
153c0 20 20 20 5f 6d 6f 64 75 6c 65 73 2e 41 64 64 28     _modules.Add(
153d0 6d 6f 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64  module.Name, mod
153e0 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ule);....       
153f0 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f       if (_usePoo
15400 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
15410 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15420 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61     _usePool = fa
15430 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54  lse;....#if !NET
15440 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
15450 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
15460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15470 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
15480 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
15490 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154b0 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
154c0 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
154d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154e0 20 20 20 22 43 72 65 61 74 65 4d 6f 64 75 6c 65     "CreateModule
154f0 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65 64   (Pool) Disabled
15500 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e               Han
15520 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
15530 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
15540 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15550 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
15560 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
15570 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
15580 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
15590 6f 6e 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28  on(GetLastError(
155a0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
155b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
155c0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
155d0 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61  /// Calls the na
155e0 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65  tive SQLite core
155f0 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65   library in orde
15600 72 20 74 6f 20 63 6c 65 61 6e 75 70 20 74 68 65  r to cleanup the
15610 20 72 65 73 6f 75 72 63 65 73 0d 0a 20 20 20 20   resources..    
15620 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
15630 69 74 68 20 61 20 6d 6f 64 75 6c 65 20 63 6f 6e  ith a module con
15640 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c  taining the impl
15650 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20  ementation of a 
15660 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
15670 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
15680 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
15690 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
156a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d  >..    /// The m
156b0 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 70 72 65  odule object pre
156c0 76 69 6f 75 73 6c 79 20 70 61 73 73 65 64 20 74  viously passed t
156d0 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
156e0 22 43 72 65 61 74 65 4d 6f 64 75 6c 65 22 20 2f  "CreateModule" /
156f0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f  >..    /// metho
15700 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
15710 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
15720 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73  aram name="flags
15730 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
15740 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61 73  flags for the as
15750 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63 72  sociated <see cr
15760 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ef="SQLiteConnec
15770 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20  tion" /> object 
15780 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f  instance...    /
15790 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
157a0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
157b0 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 4d  de void DisposeM
157c0 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75  odule(SQLiteModu
157d0 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74  le module, SQLit
157e0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
157f0 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a   flags)..    {..
15800 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
15810 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
15820 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
15830 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
15840 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65  xception("module
15850 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6d  ");....        m
15860 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b  odule.Dispose();
15870 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
15880 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
15890 6f 76 65 72 72 69 64 65 20 49 6e 74 50 74 72 20  override IntPtr 
158a0 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74  AggregateContext
158b0 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29  (IntPtr context)
158c0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
158d0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
158e0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
158f0 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74  3_aggregate_cont
15900 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 31 29 3b  ext(context, 1);
15910 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49  ..    }....#if I
15920 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
15930 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  ABLE..    /// <s
15940 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
15950 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76   Calls the nativ
15960 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
15970 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  brary in order t
15980 6f 20 64 65 63 6c 61 72 65 20 61 20 76 69 72 74  o declare a virt
15990 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  ual table..    /
159a0 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  // in response t
159b0 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68  o a call into th
159c0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
159d0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
159e0 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20  .xCreate" />..  
159f0 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72    /// or <see cr
15a00 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
15a10 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  eModule.xConnect
15a20 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62  " /> virtual tab
15a30 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20  le methods...   
15a40 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
15a50 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
15a60 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
15a70 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74      /// The virt
15a80 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65  ual table module
15a90 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 72   that is to be r
15aa0 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74  esponsible for t
15ab0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
15ac0 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20  ..    /// being 
15ad0 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
15ae0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
15af0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
15b00 3d 22 73 74 72 53 71 6c 22 3e 0d 0a 20 20 20 20  ="strSql">..    
15b10 2f 2f 2f 20 54 68 65 20 73 74 72 69 6e 67 20 63  /// The string c
15b20 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
15b30 4c 20 73 74 61 74 65 6d 65 6e 74 20 64 65 73 63  L statement desc
15b40 72 69 62 69 6e 67 20 74 68 65 20 76 69 72 74 75  ribing the virtu
15b50 61 6c 20 74 61 62 6c 65 20 74 6f 0d 0a 20 20 20  al table to..   
15b60 20 2f 2f 2f 20 62 65 20 64 65 63 6c 61 72 65 64   /// be declared
15b70 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
15b80 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
15b90 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22  ram name="error"
15ba0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20  >..    /// Upon 
15bb0 73 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e  success, the con
15bc0 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61  tents of this pa
15bd0 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65  rameter are unde
15be0 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69  fined.  Upon fai
15bf0 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69  lure,..    /// i
15c00 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e  t should contain
15c10 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
15c20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a  error message...
15c30 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
15c40 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
15c50 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73  ns>..    /// A s
15c60 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
15c70 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
15c80 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
15c90 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
15ca0 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
15cb0 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69  orCode DeclareVi
15cc0 72 74 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20  rtualTable(..   
15cd0 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
15ce0 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,..     
15cf0 20 20 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c     string strSql
15d00 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  ,..        ref s
15d10 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
15d20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
15d30 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20         if (_sql 
15d40 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15d50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15d60 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63   error = "connec
15d70 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
15d80 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20  lid handle";..  
15d90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15da0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
15db0 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
15dc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e   }....        In
15dd0 74 50 74 72 20 70 53 71 6c 20 3d 20 49 6e 74 50  tPtr pSql = IntP
15de0 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
15df0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
15e00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15e10 70 53 71 6c 20 3d 20 53 51 4c 69 74 65 53 74 72  pSql = SQLiteStr
15e20 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
15e30 6f 6d 53 74 72 69 6e 67 28 73 74 72 53 71 6c 29  omString(strSql)
15e40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15e50 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
15e60 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
15e70 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
15e80 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 0d 0a  _declare_vtab(..
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 5f 73 71 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a  _sql, pSql);....
15eb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15ec0 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
15ed0 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6d 6f  rCode.Ok) && (mo
15ee0 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a  dule != null))..
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f00 6d 6f 64 75 6c 65 2e 44 65 63 6c 61 72 65 64 20  module.Declared 
15f10 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
15f20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
15f30 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
15f40 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c  Ok) error = GetL
15f50 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20  astError();.... 
15f60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15f70 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n n;..        }.
15f80 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
15f90 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
15fa0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 53 71           if (pSq
15fb0 6c 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  l != IntPtr.Zero
15fc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
15fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15fe0 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
15ff0 72 65 65 28 70 53 71 6c 29 3b 0d 0a 20 20 20 20  ree(pSql);..    
16000 20 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c              pSql
16010 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
16020 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16030 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
16040 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
16050 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
16060 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
16070 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
16080 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
16090 64 65 63 6c 61 72 65 20 61 20 76 69 72 74 75 61  declare a virtua
160a0 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f  l table..    ///
160b0 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 72 65 73   function in res
160c0 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20  ponse to a call 
160d0 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72  into the <see cr
160e0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
160f0 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22  eModule.xCreate"
16100 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20   />..    /// or 
16110 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
16120 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
16130 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74  Connect" /> virt
16140 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64  ual table method
16150 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
16160 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
16170 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
16180 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ule">..    /// T
16190 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
161a0 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20   module that is 
161b0 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c  to be responsibl
161c0 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61  e for the virtua
161d0 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f  l table..    ///
161e0 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20   function being 
161f0 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
16200 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
16210 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
16220 3d 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22  ="argumentCount"
16230 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
16240 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
16250 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  ts to the functi
16260 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65  on being declare
16270 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
16280 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
16290 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
162a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
162b0 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
162c0 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72  ion being declar
162d0 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
162e0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
162f0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f  param name="erro
16300 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f  r">..    /// Upo
16310 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65 20 63  n success, the c
16320 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20  ontents of this 
16330 70 61 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e  parameter are un
16340 64 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66  defined.  Upon f
16350 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f  ailure,..    ///
16360 20 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61   it should conta
16370 69 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  in an appropriat
16380 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  e error message.
16390 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
163a0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
163b0 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
163c0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
163d0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
163e0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
163f0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
16400 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
16410 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65  rrorCode Declare
16420 56 69 72 74 75 61 6c 46 75 6e 63 74 69 6f 6e 28  VirtualFunction(
16430 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
16440 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a  Module module,..
16450 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 75          int argu
16460 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  mentCount,..    
16470 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
16480 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74  ..        ref st
16490 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
164a0 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
164b0 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
164c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
164d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
164e0 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74  error = "connect
164f0 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
16500 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20  id handle";..   
16510 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16520 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
16530 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
16540 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  }....        Int
16550 50 74 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50  Ptr pName = IntP
16560 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
16570 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
16580 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16590 70 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74  pName = SQLiteSt
165a0 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
165b0 72 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29 3b  romString(name);
165c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
165d0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
165e0 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
165f0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16600 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f  overload_functio
16610 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
16620 20 20 20 20 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c      _sql, pName,
16630 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 3b   argumentCount);
16640 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16650 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
16660 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72  rrorCode.Ok) err
16670 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f  or = GetLastErro
16680 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
16690 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
166a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
166b0 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
166c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
166d0 20 20 69 66 20 28 70 4e 61 6d 65 20 21 3d 20 49    if (pName != I
166e0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
166f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16700 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
16710 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 4e  teMemory.Free(pN
16720 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
16730 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 49         pName = I
16740 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
16750 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
16760 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
16770 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ndif....    /// 
16780 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
16790 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69  // Enables or di
167a0 73 61 62 6c 65 73 20 61 20 63 6f 6e 66 69 67 75  sables a configu
167b0 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 20 66 6f  ration option fo
167c0 72 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0d  r the database..
167d0 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74  .    /// connect
167e0 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
167f0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
16800 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f  / <param name="o
16810 70 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ption">..    ///
16820 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   The database co
16830 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
16840 6f 6e 20 74 6f 20 65 6e 61 62 6c 65 20 6f 72 20  on to enable or 
16850 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  disable...    //
16860 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16870 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
16880 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f  "bOnOff">..    /
16890 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  // True to enabl
168a0 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78 74  e loading of ext
168b0 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74  ensions, false t
168c0 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20  o disable...    
168d0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
168e0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
168f0 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64  .    /// A stand
16900 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
16910 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f  n code...    ///
16920 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
16930 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
16940 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
16950 64 65 20 53 65 74 43 6f 6e 66 69 67 75 72 61 74  de SetConfigurat
16960 69 6f 6e 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20  ionOption(..    
16970 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67      SQLiteConfig
16980 44 62 4f 70 73 45 6e 75 6d 20 6f 70 74 69 6f 6e  DbOpsEnum option
16990 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  ,..        bool 
169a0 62 4f 6e 4f 66 66 0d 0a 20 20 20 20 20 20 20 20  bOnOff..        
169b0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
169c0 20 20 69 66 20 28 28 6f 70 74 69 6f 6e 20 3c 20    if ((option < 
169d0 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70  SQLiteConfigDbOp
169e0 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43  sEnum.SQLITE_DBC
169f0 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 46 4b 45  ONFIG_ENABLE_FKE
16a00 59 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  Y) ||..         
16a10 20 20 20 28 6f 70 74 69 6f 6e 20 3e 20 53 51 4c     (option > SQL
16a20 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e  iteConfigDbOpsEn
16a30 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46  um.SQLITE_DBCONF
16a40 49 47 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45  IG_ENABLE_LOAD_E
16a50 58 54 45 4e 53 49 4f 4e 29 29 0d 0a 20 20 20 20  XTENSION))..    
16a60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16a70 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
16a80 69 74 65 45 78 63 65 70 74 69 6f 6e 28 48 65 6c  iteException(Hel
16a90 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
16aa0 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
16ab0 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
16ac0 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
16ad0 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
16ae0 20 20 20 20 20 20 20 22 75 6e 73 75 70 70 6f 72         "unsuppor
16af0 74 65 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ted configuratio
16b00 6e 20 6f 70 74 69 6f 6e 2c 20 6d 75 73 74 20 62  n option, must b
16b10 65 3a 20 7b 30 7d 2c 20 7b 31 7d 2c 20 7b 32 7d  e: {0}, {1}, {2}
16b20 2c 20 6f 72 20 7b 33 7d 22 2c 0d 0a 20 20 20 20  , or {3}",..    
16b30 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
16b40 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
16b50 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  m.SQLITE_DBCONFI
16b60 47 5f 45 4e 41 42 4c 45 5f 46 4b 45 59 2c 0d 0a  G_ENABLE_FKEY,..
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b80 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70  SQLiteConfigDbOp
16b90 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43  sEnum.SQLITE_DBC
16ba0 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 54 52 49  ONFIG_ENABLE_TRI
16bb0 47 47 45 52 2c 0d 0a 20 20 20 20 20 20 20 20 20  GGER,..         
16bc0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
16bd0 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
16be0 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41  ITE_DBCONFIG_ENA
16bf0 42 4c 45 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a  BLE_FTS3_TOKENIZ
16c00 45 52 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ER,..           
16c10 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
16c20 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  gDbOpsEnum.SQLIT
16c30 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c  E_DBCONFIG_ENABL
16c40 45 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  E_LOAD_EXTENSION
16c50 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
16c60 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65  ..        int re
16c70 73 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 4e 4f 54  sult = 0; /* NOT
16c80 20 55 53 45 44 20 2a 2f 0d 0a 0d 0a 20 20 20 20   USED */....    
16c90 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
16ca0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
16cb0 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67  qlite3_db_config
16cc0 5f 69 6e 74 5f 72 65 66 69 6e 74 28 0d 0a 20 20  _int_refint(..  
16cd0 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
16ce0 6f 70 74 69 6f 6e 2c 20 28 62 4f 6e 4f 66 66 20  option, (bOnOff 
16cf0 3f 20 31 20 3a 20 30 29 2c 20 72 65 66 20 72 65  ? 1 : 0), ref re
16d00 73 75 6c 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  sult);..    }...
16d10 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
16d20 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62  y>..    /// Enab
16d30 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 73 20  les or disables 
16d40 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e  extension loadin
16d50 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20  g by SQLite...  
16d60 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
16d70 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
16d80 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d   name="bOnOff">.
16d90 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f  .    /// True to
16da0 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20   enable loading 
16db0 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66  of extensions, f
16dc0 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e  alse to disable.
16dd0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
16de0 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
16df0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
16e00 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  etLoadExtension(
16e10 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20  bool bOnOff)..  
16e20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
16e30 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d  iteErrorCode n;.
16e40 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  ...        if (S
16e50 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62  QLiteVersionNumb
16e60 65 72 20 3e 3d 20 33 30 31 33 30 30 30 29 0d 0a  er >= 3013000)..
16e70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16e80 20 20 20 20 20 20 20 6e 20 3d 20 53 65 74 43 6f         n = SetCo
16e90 6e 66 69 67 75 72 61 74 69 6f 6e 4f 70 74 69 6f  nfigurationOptio
16ea0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
16eb0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67      SQLiteConfig
16ec0 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  DbOpsEnum.SQLITE
16ed0 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45  _DBCONFIG_ENABLE
16ee0 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 2c  _LOAD_EXTENSION,
16ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16f00 20 20 62 4f 6e 4f 66 66 29 3b 0d 0a 20 20 20 20    bOnOff);..    
16f10 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
16f20 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lse..        {..
16f30 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
16f40 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
16f50 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e 61 62  ods.sqlite3_enab
16f60 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le_load_extensio
16f70 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
16f80 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66      _sql, (bOnOf
16f90 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 20  f ? -1 : 0));.. 
16fa0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16fb0 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
16fc0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
16fd0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
16fe0 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
16ff0 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
17000 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
17010 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
17020 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53 51 4c 69  /// Loads a SQLi
17030 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62  te extension lib
17040 72 61 72 79 20 66 72 6f 6d 20 74 68 65 20 6e 61  rary from the na
17050 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f  med file...    /
17060 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
17070 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
17080 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a  me="fileName">..
17090 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65      /// The name
170a0 20 6f 66 20 74 68 65 20 64 79 6e 61 6d 69 63 20   of the dynamic 
170b0 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20 66 69 6c  link library fil
170c0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
170d0 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20   extension...   
170e0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
170f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
17100 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a  me="procName">..
17110 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65      /// The name
17120 20 6f 66 20 74 68 65 20 65 78 70 6f 72 74 65 64   of the exported
17130 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 74   function used t
17140 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  o initialize the
17150 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20   extension...   
17160 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68   /// If null, th
17170 65 20 64 65 66 61 75 6c 74 20 22 73 71 6c 69 74  e default "sqlit
17180 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69  e3_extension_ini
17190 74 22 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e  t" will be used.
171a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
171b0 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
171c0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c   override void L
171d0 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 73 74 72  oadExtension(str
171e0 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74  ing fileName, st
171f0 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65 29 0d 0a  ring procName)..
17200 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
17210 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e  f (fileName == n
17220 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
17230 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
17240 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
17250 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29 3b 0d 0a  n("fileName");..
17260 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
17270 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72   pError = IntPtr
17280 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
17290 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
172a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
172b0 74 65 5b 5d 20 75 74 66 38 46 69 6c 65 4e 61 6d  te[] utf8FileNam
172c0 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e 67  e = UTF8Encoding
172d0 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73 28 66  .UTF8.GetBytes(f
172e0 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30 27 29 3b  ileName + '\0');
172f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
17300 74 65 5b 5d 20 75 74 66 38 50 72 6f 63 4e 61 6d  te[] utf8ProcNam
17310 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
17320 20 20 20 20 20 20 20 20 20 69 66 20 28 70 72 6f           if (pro
17330 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  cName != null)..
17340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17350 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 55  utf8ProcName = U
17360 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  TF8Encoding.UTF8
17370 2e 47 65 74 42 79 74 65 73 28 70 72 6f 63 4e 61  .GetBytes(procNa
17380 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a 20  me + '\0');.... 
17390 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
173a0 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
173b0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
173c0 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f  ds.sqlite3_load_
173d0 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20  extension(..    
173e0 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
173f0 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 2c 20  , utf8FileName, 
17400 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c 20 72 65  utf8ProcName, re
17410 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  f pError);....  
17420 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
17430 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
17440 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
17450 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
17460 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
17470 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74 72 69 6e  n(n, UTF8ToStrin
17480 67 28 70 45 72 72 6f 72 2c 20 2d 31 29 29 3b 0d  g(pError, -1));.
17490 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
174a0 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
174b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
174c0 20 20 20 20 69 66 20 28 70 45 72 72 6f 72 20 21      if (pError !
174d0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
174e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
174f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
17500 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
17510 64 73 2e 73 71 6c 69 74 65 33 5f 66 72 65 65 28  ds.sqlite3_free(
17520 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20  pError);..      
17530 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72            pError
17540 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
17550 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
17560 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
17570 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62  ....    /// Enab
17580 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20  les or disabled 
17590 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20  extended result 
175a0 63 6f 64 65 73 20 72 65 74 75 72 6e 65 64 20 62  codes returned b
175b0 79 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 69 6e  y SQLite..    in
175c0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
175d0 76 6f 69 64 20 53 65 74 45 78 74 65 6e 64 65 64  void SetExtended
175e0 52 65 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c  ResultCodes(bool
175f0 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d   bOnOff)..    {.
17600 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
17610 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
17620 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
17630 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
17640 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 0d 0a 20  result_codes(.. 
17650 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28           _sql, (
17660 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29  bOnOff ? -1 : 0)
17670 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
17680 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
17690 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
176a0 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
176b0 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
176c0 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  or());..    }.. 
176d0 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20     /// Gets the 
176e0 6c 61 73 74 20 53 51 4c 69 74 65 20 65 72 72 6f  last SQLite erro
176f0 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65  r code..    inte
17700 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51  rnal override SQ
17710 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65  LiteErrorCode Re
17720 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20  sultCode()..    
17730 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
17740 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
17750 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 63  ods.sqlite3_errc
17760 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ode(_sql);..    
17770 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20  }..    /// Gets 
17780 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20  the last SQLite 
17790 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63  extended error c
177a0 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ode..    interna
177b0 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
177c0 65 45 72 72 6f 72 43 6f 64 65 20 45 78 74 65 6e  eErrorCode Exten
177d0 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29 0d  dedResultCode().
177e0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
177f0 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
17800 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
17810 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
17820 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d  e(_sql);..    }.
17830 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61  ...    /// Add a
17840 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61   log message via
17850 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69   the SQLite sqli
17860 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63  te3_log interfac
17870 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  e...    internal
17880 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4c   override void L
17890 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65  ogMessage(SQLite
178a0 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72 43 6f  ErrorCode iErrCo
178b0 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73  de, string zMess
178c0 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  age)..    {..   
178d0 20 20 20 53 74 61 74 69 63 4c 6f 67 4d 65 73 73     StaticLogMess
178e0 61 67 65 28 69 45 72 72 43 6f 64 65 2c 20 7a 4d  age(iErrCode, zM
178f0 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 7d 0d  essage);..    }.
17900 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61  ...    /// Add a
17910 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61   log message via
17920 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69   the SQLite sqli
17930 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63  te3_log interfac
17940 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  e...    internal
17950 20 73 74 61 74 69 63 20 76 6f 69 64 20 53 74 61   static void Sta
17960 74 69 63 4c 6f 67 4d 65 73 73 61 67 65 28 53 51  ticLogMessage(SQ
17970 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69 45  LiteErrorCode iE
17980 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a  rrCode, string z
17990 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d  Message)..    {.
179a0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
179b0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
179c0 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65 2c  e3_log(iErrCode,
179d0 20 54 6f 55 54 46 38 28 7a 4d 65 73 73 61 67 65   ToUTF8(zMessage
179e0 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69  ));..    }....#i
179f0 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20  f INTEROP_CODEC 
17a00 7c 7c 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55  || INTEROP_INCLU
17a10 44 45 5f 53 45 45 0d 0a 20 20 20 20 69 6e 74 65  DE_SEE..    inte
17a20 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
17a30 69 64 20 53 65 74 50 61 73 73 77 6f 72 64 28 62  id SetPassword(b
17a40 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42 79  yte[] passwordBy
17a50 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tes)..    {..   
17a60 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
17a70 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
17a80 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
17a90 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20 70 61 73  e3_key(_sql, pas
17aa0 73 77 6f 72 64 42 79 74 65 73 2c 20 70 61 73 73  swordBytes, pass
17ab0 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68  wordBytes.Length
17ac0 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
17ad0 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
17ae0 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
17af0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
17b00 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
17b10 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ());....      if
17b20 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20   (_usePool)..   
17b30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 75     {..        _u
17b40 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d  sePool = false;.
17b50 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
17b60 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
17b70 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
17b80 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
17b90 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
17ba0 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
17bb0 0a 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75  .          Cultu
17bc0 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
17bd0 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
17be0 20 20 22 53 65 74 50 61 73 73 77 6f 72 64 20 28    "SetPassword (
17bf0 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65 64 3a 20  Pool) Disabled: 
17c00 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
17c10 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28   HandleToString(
17c20 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  )));..#endif..  
17c30 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
17c40 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
17c50 72 72 69 64 65 20 76 6f 69 64 20 43 68 61 6e 67  rride void Chang
17c60 65 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d  ePassword(byte[]
17c70 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
17c80 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
17c90 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
17ca0 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
17cb0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
17cc0 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77  _rekey(_sql, new
17cd0 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20 28  PasswordBytes, (
17ce0 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
17cf0 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20   == null) ? 0 : 
17d00 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65 73  newPasswordBytes
17d10 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20  .Length);..     
17d20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
17d30 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
17d40 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
17d50 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
17d60 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
17d70 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f       if (_usePoo
17d80 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
17d90 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20       _usePool = 
17da0 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e  false;....#if !N
17db0 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
17dc0 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
17dd0 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63 65  N..        Trace
17de0 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
17df0 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
17e00 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
17e10 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
17e20 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
17e30 20 20 20 20 20 20 20 20 20 22 43 68 61 6e 67 65           "Change
17e40 50 61 73 73 77 6f 72 64 20 28 50 6f 6f 6c 29 20  Password (Pool) 
17e50 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d  Disabled: {0}",.
17e60 0a 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c  .          Handl
17e70 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a  eToString()));..
17e80 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d  #endif..      }.
17e90 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
17ea0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
17eb0 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
17ec0 50 72 6f 67 72 65 73 73 48 6f 6f 6b 28 69 6e 74  ProgressHook(int
17ed0 20 6e 4f 70 73 2c 20 53 51 4c 69 74 65 50 72 6f   nOps, SQLitePro
17ee0 67 72 65 73 73 43 61 6c 6c 62 61 63 6b 20 66 75  gressCallback fu
17ef0 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
17f00 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
17f10 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
17f20 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72  progress_handler
17f30 28 5f 73 71 6c 2c 20 6e 4f 70 73 2c 20 66 75 6e  (_sql, nOps, fun
17f40 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
17f50 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
17f60 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
17f70 20 76 6f 69 64 20 53 65 74 41 75 74 68 6f 72 69   void SetAuthori
17f80 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65 41 75  zerHook(SQLiteAu
17f90 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61 63 6b  thorizerCallback
17fa0 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
17fb0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
17fc0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
17fd0 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28  _set_authorizer(
17fe0 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
17ff0 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
18000 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
18010 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
18020 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c  etUpdateHook(SQL
18030 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  iteUpdateCallbac
18040 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
18050 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
18060 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
18070 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f 73  3_update_hook(_s
18080 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ql, func, IntPtr
18090 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
180a0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
180b0 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
180c0 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74  CommitHook(SQLit
180d0 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20  eCommitCallback 
180e0 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
180f0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
18100 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
18110 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c  commit_hook(_sql
18120 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a  , func, IntPtr.Z
18130 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ero);..    }....
18140 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
18150 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54 72  rride void SetTr
18160 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69  aceCallback(SQLi
18170 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  teTraceCallback 
18180 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
18190 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
181a0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
181b0 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e 63  trace(_sql, func
181c0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
181d0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
181e0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
181f0 76 6f 69 64 20 53 65 74 54 72 61 63 65 43 61 6c  void SetTraceCal
18200 6c 62 61 63 6b 32 28 53 51 4c 69 74 65 54 72 61  lback2(SQLiteTra
18210 63 65 46 6c 61 67 73 20 6d 61 73 6b 2c 20 53 51  ceFlags mask, SQ
18220 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63  LiteTraceCallbac
18230 6b 32 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  k2 func)..    {.
18240 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e  .        UnsafeN
18250 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
18260 69 74 65 33 5f 74 72 61 63 65 5f 76 32 28 5f 73  ite3_trace_v2(_s
18270 71 6c 2c 20 6d 61 73 6b 2c 20 66 75 6e 63 2c 20  ql, mask, func, 
18280 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
18290 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
182a0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
182b0 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f  id SetRollbackHo
182c0 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63  ok(SQLiteRollbac
182d0 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  kCallback func).
182e0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
182f0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
18300 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61  s.sqlite3_rollba
18310 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75  ck_hook(_sql, fu
18320 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
18330 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
18340 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
18350 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68     /// Allows th
18360 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61 20 6c  e setting of a l
18370 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20  ogging callback 
18380 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c 69 74  invoked by SQLit
18390 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f  e when a..    //
183a0 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63 75  / log event occu
183b0 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61  rs.  Only one ca
183c0 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20 73 65  llback may be se
183d0 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73 20 70  t.  If NULL is p
183e0 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20  assed,..    /// 
183f0 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c  the logging call
18400 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69 73 74  back is unregist
18410 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ered...    /// <
18420 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
18430 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
18440 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62 61  func">The callba
18450 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69  ck function to i
18460 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  nvoke.</param>..
18470 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
18480 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c  >Returns a resul
18490 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e  t code</returns>
184a0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
184b0 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
184c0 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67 43 61  rorCode SetLogCa
184d0 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f 67  llback(SQLiteLog
184e0 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
184f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
18500 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
18510 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
18520 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
18530 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20 20 20  config_log(..   
18540 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
18550 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c  onfigOpsEnum.SQL
18560 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20  ITE_CONFIG_LOG, 
18570 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
18580 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  o);....        i
18590 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
185a0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
185b0 20 20 20 20 20 20 20 20 20 20 5f 73 65 74 4c 6f            _setLo
185c0 67 43 61 6c 6c 62 61 63 6b 20 3d 20 28 66 75 6e  gCallback = (fun
185d0 63 20 21 3d 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20  c != null);.... 
185e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
185f0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
18600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
18660 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
18670 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 70  ary>..    /// Ap
18680 70 65 6e 64 73 20 61 6e 20 65 72 72 6f 72 20 6d  pends an error m
18690 65 73 73 61 67 65 20 61 6e 64 20 61 6e 20 61 70  essage and an ap
186a0 70 72 6f 70 72 69 61 74 65 20 6c 69 6e 65 2d 65  propriate line-e
186b0 6e 64 69 6e 67 20 74 6f 20 61 20 3c 73 65 65 20  nding to a <see 
186c0 63 72 65 66 3d 22 53 74 72 69 6e 67 42 75 69 6c  cref="StringBuil
186d0 64 65 72 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  der" />..    ///
186e0 20 69 6e 73 74 61 6e 63 65 2e 20 20 54 68 69 73   instance.  This
186f0 20 69 73 20 75 73 65 66 75 6c 20 62 65 63 61 75   is useful becau
18700 73 65 20 74 68 65 20 2e 4e 45 54 20 43 6f 6d 70  se the .NET Comp
18710 61 63 74 20 46 72 61 6d 65 77 6f 72 6b 20 68 61  act Framework ha
18720 73 20 61 20 73 6c 69 67 68 74 6c 79 20 64 69 66  s a slightly dif
18730 66 65 72 65 6e 74 20 73 65 74 0d 0a 20 20 20 20  ferent set..    
18740 2f 2f 2f 20 6f 66 20 73 75 70 70 6f 72 74 65 64  /// of supported
18750 20 6d 65 74 68 6f 64 73 20 66 6f 72 20 74 68 65   methods for the
18760 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72 69   <see cref="Stri
18770 6e 67 42 75 69 6c 64 65 72 22 20 2f 3e 20 63 6c  ngBuilder" /> cl
18780 61 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ass...    /// </
18790 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
187a0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
187b0 75 69 6c 64 65 72 22 3e 0d 0a 20 20 20 20 2f 2f  uilder">..    //
187c0 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
187d0 22 53 74 72 69 6e 67 42 75 69 6c 64 65 72 22 20  "StringBuilder" 
187e0 2f 3e 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 61  /> instance to a
187f0 70 70 65 6e 64 20 74 6f 2e 0d 0a 20 20 20 20 2f  ppend to...    /
18800 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
18810 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
18820 3d 22 6d 65 73 73 61 67 65 22 3e 0d 0a 20 20 20  ="message">..   
18830 20 2f 2f 2f 20 54 68 65 20 6d 65 73 73 61 67 65   /// The message
18840 20 74 6f 20 61 70 70 65 6e 64 2e 20 20 49 74 20   to append.  It 
18850 77 69 6c 6c 20 62 65 20 66 6f 6c 6c 6f 77 65 64  will be followed
18860 20 62 79 20 61 6e 20 61 70 70 72 6f 70 72 69 61   by an appropria
18870 74 65 20 6c 69 6e 65 2d 65 6e 64 69 6e 67 2e 0d  te line-ending..
18880 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
18890 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  >..    private s
188a0 74 61 74 69 63 20 76 6f 69 64 20 41 70 70 65 6e  tatic void Appen
188b0 64 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20  dError(..       
188c0 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 62   StringBuilder b
188d0 75 69 6c 64 65 72 2c 0d 0a 20 20 20 20 20 20 20  uilder,..       
188e0 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 0d   string message.
188f0 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
18900 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
18910 75 69 6c 64 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d  uilder == null).
18920 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
18930 75 72 6e 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  urn;....#if !PLA
18940 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
18950 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
18960 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 4c 69  builder.AppendLi
18970 6e 65 28 6d 65 73 73 61 67 65 29 3b 0d 0a 23 65  ne(message);..#e
18980 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 62 75 69  lse..        bui
18990 6c 64 65 72 2e 41 70 70 65 6e 64 28 6d 65 73 73  lder.Append(mess
189a0 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62  age);..        b
189b0 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 5c  uilder.Append("\
189c0 72 5c 6e 22 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  r\n");..#endif..
189d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
189e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
189f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18a40 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
18a50 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
18a60 6d 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20  method attempts 
18a70 74 6f 20 63 61 75 73 65 20 74 68 65 20 53 51 4c  to cause the SQL
18a80 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61  ite native libra
18a90 72 79 20 74 6f 20 69 6e 76 61 6c 69 64 61 74 65  ry to invalidate
18aa0 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 73 20 66 75  ..    /// its fu
18ab0 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 73 20  nction pointers 
18ac0 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
18ad0 69 73 20 69 6e 73 74 61 6e 63 65 2e 20 20 54 68  is instance.  Th
18ae0 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79 0d  is is necessary.
18af0 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 70 72 65 76  .    /// to prev
18b00 65 6e 74 20 63 61 6c 6c 73 20 66 72 6f 6d 20 6e  ent calls from n
18b10 61 74 69 76 65 20 63 6f 64 65 20 69 6e 74 6f 20  ative code into 
18b20 64 65 6c 65 67 61 74 65 73 20 74 68 61 74 20 6d  delegates that m
18b30 61 79 20 68 61 76 65 20 62 65 65 6e 0d 0a 20 20  ay have been..  
18b40 20 20 2f 2f 2f 20 67 61 72 62 61 67 65 20 63 6f    /// garbage co
18b50 6c 6c 65 63 74 65 64 2e 20 20 4e 6f 72 6d 61 6c  llected.  Normal
18b60 6c 79 2c 20 74 68 65 73 65 20 74 79 70 65 73 20  ly, these types 
18b70 6f 66 20 69 73 73 75 65 73 20 63 61 6e 20 6f 6e  of issues can on
18b80 6c 79 20 61 72 69 73 65 20 66 6f 72 0d 0a 20 20  ly arise for..  
18b90 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e    /// connection
18ba0 73 20 74 68 61 74 20 61 72 65 20 61 64 64 65 64  s that are added
18bb0 20 74 6f 20 74 68 65 20 70 6f 6f 6c 3b 20 68 6f   to the pool; ho
18bc0 77 76 65 72 2c 20 69 74 20 69 73 20 67 6f 6f 64  wver, it is good
18bd0 20 70 72 61 63 74 69 63 65 20 74 6f 0d 0a 20 20   practice to..  
18be0 20 20 2f 2f 2f 20 75 6e 63 6f 6e 64 69 74 69 6f    /// unconditio
18bf0 6e 61 6c 6c 79 20 69 6e 76 61 6c 69 64 61 74 65  nally invalidate
18c00 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
18c10 72 73 20 74 68 61 74 20 6d 61 79 20 72 65 66 65  rs that may refe
18c20 72 20 74 6f 20 6f 62 6a 65 63 74 73 0d 0a 20 20  r to objects..  
18c30 20 20 2f 2f 2f 20 62 65 69 6e 67 20 64 69 73 70    /// being disp
18c40 6f 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  osed...    /// <
18c50 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 63 6c  param name="incl
18c60 75 64 65 47 6c 6f 62 61 6c 22 3e 0d 0a 20 20 20  udeGlobal">..   
18c70 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f   /// Non-zero to
18c80 20 61 6c 73 6f 20 69 6e 76 61 6c 69 64 61 74 65   also invalidate
18c90 20 67 6c 6f 62 61 6c 20 66 75 6e 63 74 69 6f 6e   global function
18ca0 20 70 6f 69 6e 74 65 72 73 20 28 69 2e 65 2e 20   pointers (i.e. 
18cb0 74 68 6f 73 65 20 74 68 61 74 0d 0a 20 20 20 20  those that..    
18cc0 2f 2f 2f 20 61 72 65 20 6e 6f 74 20 64 69 72 65  /// are not dire
18cd0 63 74 6c 79 20 61 73 73 6f 63 69 61 74 65 64 20  ctly associated 
18ce0 77 69 74 68 20 74 68 69 73 20 63 6f 6e 6e 65 63  with this connec
18cf0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 6e 61 74 69  tion on the nati
18d00 76 65 20 73 69 64 65 29 2e 0d 0a 20 20 20 20 2f  ve side)...    /
18d10 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
18d20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
18d30 3d 22 63 61 6e 54 68 72 6f 77 22 3e 0d 0a 20 20  ="canThrow">..  
18d40 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
18d50 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73  f this method is
18d60 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 20   being executed 
18d70 77 69 74 68 69 6e 20 61 20 63 6f 6e 74 65 78 74  within a context
18d80 20 77 68 65 72 65 20 69 74 20 63 61 6e 0d 0a 20   where it can.. 
18d90 20 20 20 2f 2f 2f 20 74 68 72 6f 77 20 61 6e 20     /// throw an 
18da0 65 78 63 65 70 74 69 6f 6e 20 69 6e 20 74 68 65  exception in the
18db0 20 65 76 65 6e 74 20 6f 66 20 66 61 69 6c 75 72   event of failur
18dc0 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 7a 65  e; otherwise, ze
18dd0 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ro...    /// </p
18de0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
18df0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
18e00 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
18e10 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
18e20 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 77 61  f this method wa
18e30 73 20 73 75 63 63 65 73 73 66 75 6c 3b 20 6f 74  s successful; ot
18e40 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a  herwise, zero...
18e50 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
18e60 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  s>..    private 
18e70 62 6f 6f 6c 20 55 6e 68 6f 6f 6b 4e 61 74 69 76  bool UnhookNativ
18e80 65 43 61 6c 6c 62 61 63 6b 73 28 0d 0a 20 20 20  eCallbacks(..   
18e90 20 20 20 20 20 62 6f 6f 6c 20 69 6e 63 6c 75 64       bool includ
18ea0 65 47 6c 6f 62 61 6c 2c 0d 0a 20 20 20 20 20 20  eGlobal,..      
18eb0 20 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 0d    bool canThrow.
18ec0 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
18ed0 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  {..        //.. 
18ee0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
18ef0 49 6e 69 74 69 61 6c 6c 79 2c 20 74 68 69 73 20  Initially, this 
18f00 6d 65 74 68 6f 64 20 61 73 73 75 6d 65 73 20 73  method assumes s
18f10 75 63 63 65 73 73 2e 20 20 54 68 65 6e 2c 20 69  uccess.  Then, i
18f20 66 20 61 6e 79 20 61 74 74 65 6d 70 74 0d 0a 20  f any attempt.. 
18f30 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
18f40 74 6f 20 69 6e 76 61 6c 69 64 61 74 65 20 61 20  to invalidate a 
18f50 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
18f60 20 66 61 69 6c 73 2c 20 74 68 65 20 6f 76 65 72   fails, the over
18f70 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 0d 0a 20  all result is.. 
18f80 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
18f90 73 65 74 20 74 6f 20 66 61 69 6c 75 72 65 2e 20  set to failure. 
18fa0 20 48 6f 77 65 76 65 72 2c 20 74 68 69 73 20 77   However, this w
18fb0 69 6c 6c 20 6e 6f 74 20 70 72 65 76 65 6e 74 20  ill not prevent 
18fc0 66 75 72 74 68 65 72 0d 0a 20 20 20 20 20 20 20  further..       
18fd0 20 2f 2f 20 20 20 20 20 20 20 61 74 74 65 6d 70   //       attemp
18fe0 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 69  ts, if any, to i
18ff0 6e 76 61 6c 69 64 61 74 65 20 73 75 62 73 65 71  nvalidate subseq
19000 75 65 6e 74 20 66 75 6e 63 74 69 6f 6e 20 70 6f  uent function po
19010 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20  inters...       
19020 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   //..        boo
19030 6c 20 72 65 73 75 6c 74 20 3d 20 74 72 75 65 3b  l result = true;
19040 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
19050 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 53  ErrorCode rc = S
19060 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
19070 6b 3b 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69  k;..        Stri
19080 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65  ngBuilder builde
19090 72 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  r = new StringBu
190a0 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  ilder();....    
190b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
190c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
190d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
190e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
190f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
19110 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
19120 6f 6e 20 52 6f 6c 6c 62 61 63 6b 20 48 6f 6f 6b  on Rollback Hook
19130 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e   (Per-Connection
19140 29 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  )..        try..
19150 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19160 20 20 20 20 20 20 20 53 65 74 52 6f 6c 6c 62 61         SetRollba
19170 63 6b 48 6f 6f 6b 28 6e 75 6c 6c 29 3b 20 2f 2a  ckHook(null); /*
19180 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
19190 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43     }..#if !NET_C
191a0 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
191b0 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
191c0 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
191d0 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c 73  ception e)..#els
191e0 65 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  e..        catch
191f0 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65   (Exception)..#e
19200 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ndif..        {.
19210 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
19220 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
19230 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
19240 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
19250 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19260 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
19270 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72  WriteLine(Helper
19280 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
19290 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
192a0 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
192b0 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
192c0 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
192d0 20 20 20 20 20 20 20 20 20 20 20 20 22 46 61 69              "Fai
192e0 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 72 6f 6c  led to unset rol
192f0 6c 62 61 63 6b 20 68 6f 6f 6b 3a 20 7b 30 7d 22  lback hook: {0}"
19300 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19310 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74         e)); /* t
19320 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
19330 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
19340 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
19350 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19360 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
19370 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
19380 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
19390 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ...            A
193a0 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64  ppendError(build
193b0 65 72 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 75  er, "failed to u
193c0 6e 73 65 74 20 72 6f 6c 6c 62 61 63 6b 20 68 6f  nset rollback ho
193d0 6f 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ok");..         
193e0 20 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72     rc = SQLiteEr
193f0 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a  rorCode.Error;..
19400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
19410 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  sult = false;.. 
19420 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19430 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
19440 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
194a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
194b0 72 65 67 69 6f 6e 20 54 72 61 63 65 20 43 61 6c  region Trace Cal
194c0 6c 62 61 63 6b 20 28 50 65 72 2d 43 6f 6e 6e 65  lback (Per-Conne
194d0 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
194e0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
194f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
19500 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
19510 4f 54 45 3a 20 57 68 65 6e 20 75 73 69 6e 67 20  OTE: When using 
19520 76 65 72 73 69 6f 6e 20 33 2e 31 34 20 28 6f 72  version 3.14 (or
19530 20 6c 61 74 65 72 29 20 6f 66 20 74 68 65 20 53   later) of the S
19540 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20  QLite core..    
19550 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
19560 20 6c 69 62 72 61 72 79 2c 20 75 73 65 20 74 68   library, use th
19570 65 20 6e 65 77 65 72 20 73 71 6c 69 74 65 33 5f  e newer sqlite3_
19580 74 72 61 63 65 5f 76 32 28 29 20 41 50 49 20 69  trace_v2() API i
19590 6e 20 6f 72 64 65 72 0d 0a 20 20 20 20 20 20 20  n order..       
195a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
195b0 20 75 6e 68 6f 6f 6b 20 74 68 65 20 74 72 61 63   unhook the trac
195c0 65 20 63 61 6c 6c 62 61 63 6b 2c 20 6a 75 73 74  e callback, just
195d0 20 69 6e 20 63 61 73 65 20 74 68 65 20 6f 6c 64   in case the old
195e0 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  er..            
195f0 2f 2f 20 20 20 20 20 20 20 41 50 49 20 69 73 20  //       API is 
19600 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 28 65  not available (e
19610 2e 67 2e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  .g. SQLITE_OMIT_
19620 44 45 50 52 45 43 41 54 45 44 29 2e 0d 0a 20 20  DEPRECATED)...  
19630 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
19640 20 20 20 20 20 20 20 20 20 20 69 66 20 28 55 6e            if (Un
19650 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
19660 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  s.sqlite3_libver
19670 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 20 3e 3d  sion_number() >=
19680 20 33 30 31 34 30 30 30 29 0d 0a 20 20 20 20 20   3014000)..     
19690 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 72             SetTr
196a0 61 63 65 43 61 6c 6c 62 61 63 6b 32 28 53 51 4c  aceCallback2(SQL
196b0 69 74 65 54 72 61 63 65 46 6c 61 67 73 2e 53 51  iteTraceFlags.SQ
196c0 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 45 2c  LITE_TRACE_NONE,
196d0 20 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77   null); /* throw
196e0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
196f0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
19700 20 20 20 20 20 20 20 53 65 74 54 72 61 63 65 43         SetTraceC
19710 61 6c 6c 62 61 63 6b 28 6e 75 6c 6c 29 3b 20 2f  allback(null); /
19720 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
19730 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f      }..#if !NET_
19740 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
19750 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
19760 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
19770 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c  xception e)..#el
19780 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  se..        catc
19790 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23  h (Exception)..#
197a0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b  endif..        {
197b0 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
197c0 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
197d0 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
197e0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
197f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19800 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
19810 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
19820 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
19830 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
19840 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
19850 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
19860 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 61               "Fa
19880 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 74 72  iled to unset tr
19890 61 63 65 20 63 61 6c 6c 62 61 63 6b 3a 20 7b 30  ace callback: {0
198a0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
198b0 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a           e)); /*
198c0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
198d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
198e0 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
198f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
19910 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
19920 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
19930 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
19940 20 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69   AppendError(bui
19950 6c 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74 6f  lder, "failed to
19960 20 75 6e 73 65 74 20 74 72 61 63 65 20 63 61 6c   unset trace cal
19970 6c 62 61 63 6b 22 29 3b 0d 0a 20 20 20 20 20 20  lback");..      
19980 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74        rc = SQLit
19990 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
199a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
199b0 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b   result = false;
199c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
199d0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
199e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
199f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
19a50 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 69 74    #region Commit
19a60 20 48 6f 6f 6b 20 28 50 65 72 2d 43 6f 6e 6e 65   Hook (Per-Conne
19a70 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
19a80 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
19a90 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 43              SetC
19aa0 6f 6d 6d 69 74 48 6f 6f 6b 28 6e 75 6c 6c 29 3b  ommitHook(null);
19ab0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
19ac0 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45        }..#if !NE
19ad0 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
19ae0 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
19af0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
19b00 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23  (Exception e)..#
19b10 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61  else..        ca
19b20 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d  tch (Exception).
19b30 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
19b40 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d   {..#if !NET_COM
19b50 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
19b60 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
19b70 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
19b80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
19ba0 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
19bb0 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
19bc0 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
19be0 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
19bf0 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19c10 46 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20  Failed to unset 
19c20 63 6f 6d 6d 69 74 20 68 6f 6f 6b 3a 20 7b 30 7d  commit hook: {0}
19c30 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
19c40 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20          e)); /* 
19c50 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
19c60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19c70 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
19c80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19c90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
19ca0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
19cb0 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
19cc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19cd0 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c  AppendError(buil
19ce0 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  der, "failed to 
19cf0 75 6e 73 65 74 20 63 6f 6d 6d 69 74 20 68 6f 6f  unset commit hoo
19d00 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
19d10 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72    rc = SQLiteErr
19d20 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d  orCode.Error;...
19d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73  .            res
19d40 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ult = false;..  
19d50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19d60 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
19d70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
19d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19dd0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
19de0 65 67 69 6f 6e 20 55 70 64 61 74 65 20 48 6f 6f  egion Update Hoo
19df0 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f  k (Per-Connectio
19e00 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  n)..        try.
19e10 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
19e20 20 20 20 20 20 20 20 20 53 65 74 55 70 64 61 74          SetUpdat
19e30 65 48 6f 6f 6b 28 6e 75 6c 6c 29 3b 20 2f 2a 20  eHook(null); /* 
19e40 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
19e50 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    }..#if !NET_CO
19e60 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
19e70 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
19e80 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
19e90 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65  eption e)..#else
19ea0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
19eb0 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65 6e  (Exception)..#en
19ec0 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  dif..        {..
19ed0 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
19ee0 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
19ef0 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
19f00 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
19f10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19f20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
19f30 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
19f40 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
19f50 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
19f60 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
19f70 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
19f80 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
19f90 20 20 20 20 20 20 20 20 20 20 20 22 46 61 69 6c             "Fail
19fa0 65 64 20 74 6f 20 75 6e 73 65 74 20 75 70 64 61  ed to unset upda
19fb0 74 65 20 68 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a  te hook: {0}",..
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f      e)); /* thro
19fe0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
19ff0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1a000 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
1a010 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a020 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
1a030 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
1a040 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
1a050 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 65              Appe
1a060 6e 64 45 72 72 6f 72 28 62 75 69 6c 64 65 72 2c  ndError(builder,
1a070 20 22 66 61 69 6c 65 64 20 74 6f 20 75 6e 73 65   "failed to unse
1a080 74 20 75 70 64 61 74 65 20 68 6f 6f 6b 22 29 3b  t update hook");
1a090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  ..            rc
1a0a0 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
1a0b0 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20  de.Error;....   
1a0c0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
1a0d0 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
1a0e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
1a0f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1a100 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1a110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1a160 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1a170 6e 20 41 75 74 68 6f 72 69 7a 65 72 20 48 6f 6f  n Authorizer Hoo
1a180 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f  k (Per-Connectio
1a190 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  n)..        try.
1a1a0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1a1b0 20 20 20 20 20 20 20 20 53 65 74 41 75 74 68 6f          SetAutho
1a1c0 72 69 7a 65 72 48 6f 6f 6b 28 6e 75 6c 6c 29 3b  rizerHook(null);
1a1d0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1a1e0 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45        }..#if !NE
1a1f0 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
1a200 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
1a210 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
1a220 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23  (Exception e)..#
1a230 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61  else..        ca
1a240 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d  tch (Exception).
1a250 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
1a260 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d   {..#if !NET_COM
1a270 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
1a280 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
1a290 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1a2a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1a2c0 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
1a2d0 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
1a2e0 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
1a300 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
1a310 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
1a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a330 46 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20  Failed to unset 
1a340 61 75 74 68 6f 72 69 7a 65 72 20 68 6f 6f 6b 3a  authorizer hook:
1a350 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
1a360 20 20 20 20 20 20 20 20 20 20 20 20 65 29 29 3b              e));
1a370 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1a380 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1a390 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a3c0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
1a3d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
1a3e0 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
1a3f0 20 20 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28      AppendError(
1a400 62 75 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64  builder, "failed
1a410 20 74 6f 20 75 6e 73 65 74 20 61 75 74 68 6f 72   to unset author
1a420 69 7a 65 72 20 68 6f 6f 6b 22 29 3b 0d 0a 20 20  izer hook");..  
1a430 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
1a440 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
1a450 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rror;....       
1a460 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61       result = fa
1a470 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  lse;..        }.
1a480 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1a490 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
1a4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4e0 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
1a500 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
1a510 6f 67 72 65 73 73 20 48 6f 6f 6b 20 28 50 65 72  ogress Hook (Per
1a520 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20  -Connection)..  
1a530 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
1a540 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a550 20 20 53 65 74 50 72 6f 67 72 65 73 73 48 6f 6f    SetProgressHoo
1a560 6b 28 30 2c 20 6e 75 6c 6c 29 3b 20 2f 2a 20 74  k(0, null); /* t
1a570 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
1a580 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d   }..#if !NET_COM
1a590 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
1a5a0 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
1a5b0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1a5c0 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d  ption e)..#else.
1a5d0 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28  .        catch (
1a5e0 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65 6e 64  Exception)..#end
1a5f0 69 66 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  if..        {..#
1a600 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
1a610 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
1a620 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
1a630 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
1a640 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a650 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
1a660 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
1a670 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
1a680 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1a690 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
1a6a0 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
1a6b0 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
1a6c0 20 20 20 20 20 20 20 20 20 20 22 46 61 69 6c 65            "Faile
1a6d0 64 20 74 6f 20 75 6e 73 65 74 20 70 72 6f 67 72  d to unset progr
1a6e0 65 73 73 20 68 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d  ess hook: {0}",.
1a6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a700 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72       e)); /* thr
1a710 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
1a720 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1a730 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
1a740 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a750 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
1a760 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
1a770 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
1a780 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70  .            App
1a790 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64 65 72  endError(builder
1a7a0 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 75 6e 73  , "failed to uns
1a7b0 65 74 20 70 72 6f 67 72 65 73 73 20 68 6f 6f 6b  et progress hook
1a7c0 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
1a7d0 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
1a7e0 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a  rCode.Error;....
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1a800 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  lt = false;..   
1a810 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1a820 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1a830 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1a840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a890 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
1a8a0 67 69 6f 6e 20 4c 6f 67 20 43 61 6c 6c 62 61 63  gion Log Callbac
1a8b0 6b 20 28 47 6c 6f 62 61 6c 29 0d 0a 20 20 20 20  k (Global)..    
1a8c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a8d0 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 68 61 76 65  // NOTE: We have
1a8e0 20 74 6f 20 62 65 20 63 61 72 65 66 75 6c 20 68   to be careful h
1a8f0 65 72 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ere because the 
1a900 6c 6f 67 20 63 61 6c 6c 62 61 63 6b 0d 0a 20 20  log callback..  
1a910 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
1a920 73 20 6e 6f 74 20 70 65 72 2d 63 6f 6e 6e 65 63  s not per-connec
1a930 74 69 6f 6e 20 6f 6e 20 74 68 65 20 6e 61 74 69  tion on the nati
1a940 76 65 20 73 69 64 65 2e 20 20 49 74 20 73 68 6f  ve side.  It sho
1a950 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  uld..        // 
1a960 20 20 20 20 20 20 6f 6e 6c 79 20 62 65 20 75 6e        only be un
1a970 73 65 74 20 62 79 20 74 68 69 73 20 6d 65 74 68  set by this meth
1a980 6f 64 20 69 66 20 74 68 69 73 20 69 6e 73 74 61  od if this insta
1a990 6e 63 65 20 77 61 73 0d 0a 20 20 20 20 20 20 20  nce was..       
1a9a0 20 2f 2f 20 20 20 20 20 20 20 72 65 73 70 6f 6e   //       respon
1a9b0 73 69 62 6c 65 20 66 6f 72 20 73 65 74 74 69 6e  sible for settin
1a9c0 67 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  g it...        /
1a9d0 2f 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69  /..        if (i
1a9e0 6e 63 6c 75 64 65 47 6c 6f 62 61 6c 20 26 26 20  ncludeGlobal && 
1a9f0 5f 73 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 29  _setLogCallback)
1aa00 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1aa10 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1aa20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
1aa40 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 32  iteErrorCode rc2
1aa50 20 3d 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63   = SetLogCallbac
1aa60 6b 28 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f  k(null); /* thro
1aa70 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  w */....        
1aa80 20 20 20 20 20 20 20 20 69 66 20 28 72 63 32 20          if (rc2 
1aa90 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
1aaa0 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
1aab0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1aad0 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64  ppendError(build
1aae0 65 72 2c 20 22 63 6f 75 6c 64 20 6e 6f 74 20 75  er, "could not u
1aaf0 6e 73 65 74 20 6c 6f 67 20 63 61 6c 6c 62 61 63  nset log callbac
1ab00 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
1ab10 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 72            rc = r
1ab20 63 32 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  c2;....         
1ab30 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1ab40 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  t = false;..    
1ab50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1ab60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 69             }..#i
1ab70 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
1ab80 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
1ab90 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
1aba0 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1abb0 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20  ion e)..#else.. 
1abc0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1abd0 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65   (Exception)..#e
1abe0 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
1abf0 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
1ac00 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
1ac10 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ac30 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1ac40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ac50 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
1ac60 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72  WriteLine(Helper
1ac70 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
1ac80 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1aca0 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
1acb0 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acd0 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75      "Failed to u
1ace0 6e 73 65 74 20 6c 6f 67 20 63 61 6c 6c 62 61 63  nset log callbac
1acf0 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  k: {0}",..      
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad10 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20    e)); /* throw 
1ad20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1ad30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1ad40 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1ad60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ad70 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
1ad80 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
1ad90 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
1ada0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1adb0 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75    AppendError(bu
1adc0 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74  ilder, "failed t
1add0 6f 20 75 6e 73 65 74 20 6c 6f 67 20 63 61 6c 6c  o unset log call
1ade0 62 61 63 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  back");..       
1adf0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
1ae00 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
1ae10 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ror;....        
1ae20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
1ae30 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1ae40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1ae50 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
1ae60 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1ae70 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1ae80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1aed0 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 73          if (!res
1aee0 75 6c 74 20 26 26 20 63 61 6e 54 68 72 6f 77 29  ult && canThrow)
1aef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
1af00 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
1af10 63 65 70 74 69 6f 6e 28 72 63 2c 20 62 75 69 6c  ception(rc, buil
1af20 64 65 72 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  der.ToString());
1af30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
1af40 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
1af50 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1af60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1afa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1afb0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1afc0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1afd0 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61     /// Creates a
1afe0 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63 6b   new SQLite back
1aff0 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64 20  up object based 
1b000 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64 20  on the provided 
1b010 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20  destination..   
1b020 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63 6f   /// database co
1b030 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 73  nnection.  The s
1b040 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 63  ource database c
1b050 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68 65  onnection is the
1b060 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 73   one..    /// as
1b070 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1b080 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65 20  is object.  The 
1b090 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74 69  source and desti
1b0a0 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 0d  nation database.
1b0b0 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74  .    /// connect
1b0c0 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 74  ions cannot be t
1b0d0 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f  he same...    //
1b0e0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1b0f0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1b100 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65 20  e="destCnn">The 
1b110 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
1b120 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
1b130 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1b140 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
1b150 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65 73  estName">The des
1b160 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73  tination databas
1b170 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d  e name.</param>.
1b180 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1b190 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d 65  name="sourceName
1b1a0 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61 74  ">The source dat
1b1b0 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72  abase name.</par
1b1c0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
1b1d0 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79 20  turns>The newly 
1b1e0 63 72 65 61 74 65 64 20 62 61 63 6b 75 70 20 6f  created backup o
1b1f0 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e  bject.</returns>
1b200 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1b210 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 42 61  verride SQLiteBa
1b220 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65 42  ckup InitializeB
1b230 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
1b240 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1b250 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20 20   destCnn,..     
1b260 20 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e 61     string destNa
1b270 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  me,..        str
1b280 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d 0a  ing sourceName..
1b290 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
1b2a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
1b2b0 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  stCnn == null)..
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1b2d0 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
1b2e0 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73  llException("des
1b2f0 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
1b300 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65 20     if (destName 
1b310 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1b320 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1b330 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
1b340 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65 22  ption("destName"
1b350 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
1b360 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d 20   (sourceName == 
1b370 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1b380 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
1b390 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
1b3a0 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22 29  on("sourceName")
1b3b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
1b3c0 69 74 65 33 20 64 65 73 74 53 71 6c 69 74 65 33  ite3 destSqlite3
1b3d0 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c 20   = destCnn._sql 
1b3e0 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a 20  as SQLite3;.... 
1b3f0 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 53         if (destS
1b400 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29 0d  qlite3 == null).
1b410 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1b420 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
1b430 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
1b440 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74             "Dest
1b450 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  ination connecti
1b460 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70 65  on has no wrappe
1b470 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  r.",..          
1b480 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29        "destCnn")
1b490 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
1b4a0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
1b4b0 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20 3d  dle destHandle =
1b4c0 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73 71   destSqlite3._sq
1b4d0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  l;....        if
1b4e0 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d 20   (destHandle == 
1b4f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1b500 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
1b510 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d  umentException(.
1b520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b530 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63 6f   "Destination co
1b540 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
1b550 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
1b560 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b570 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a     "destCnn");..
1b580 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1b590 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
1b5a0 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 20   sourceHandle = 
1b5b0 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  _sql;....       
1b5c0 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64 6c   if (sourceHandl
1b5d0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1b5e0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1b5f0 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
1b600 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
1b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
1b620 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ource connection
1b630 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
1b640 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20  handle.");....  
1b650 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44 65        byte[] zDe
1b660 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28  stName = ToUTF8(
1b670 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  destName);..    
1b680 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75 72      byte[] zSour
1b690 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38 28  ceName = ToUTF8(
1b6a0 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  sourceName);....
1b6b0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
1b6c0 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63 6b 75  ckupHandle backu
1b6d0 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d  pHandle = null;.
1b6e0 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
1b6f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b700 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
1b710 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
1b720 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
1b730 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
1b740 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
1b750 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
1b760 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b770 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20 3d   IntPtr backup =
1b780 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1b790 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
1b7a0 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20 20  kup_init(..     
1b7b0 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74 48             destH
1b7c0 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65  andle, zDestName
1b7d0 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 20  , sourceHandle, 
1b7e0 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d  zSourceName);...
1b7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1b800 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74  (backup == IntPt
1b810 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1b820 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b830 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1b840 72 6f 72 43 6f 64 65 20 72 65 73 75 6c 74 43 6f  rorCode resultCo
1b850 64 65 20 3d 20 52 65 73 75 6c 74 43 6f 64 65 28  de = ResultCode(
1b860 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1b870 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
1b880 43 6f 64 65 20 21 3d 20 53 51 4c 69 74 65 45 72  Code != SQLiteEr
1b890 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8b0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
1b8c0 65 45 78 63 65 70 74 69 6f 6e 28 72 65 73 75 6c  eException(resul
1b8d0 74 43 6f 64 65 2c 20 47 65 74 4c 61 73 74 45 72  tCode, GetLastEr
1b8e0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
1b8f0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
1b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b910 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
1b920 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 66 61  iteException("fa
1b930 69 6c 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69  iled to initiali
1b940 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d 0a 20 20  ze backup");..  
1b950 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1b960 20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b 75             backu
1b970 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51  pHandle = new SQ
1b980 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65  LiteBackupHandle
1b990 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62 61 63  (destHandle, bac
1b9a0 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  kup);..        }
1b9b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
1b9c0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43  teConnection.OnC
1b9d0 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77  hanged(null, new
1b9e0 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74   ConnectionEvent
1b9f0 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
1ba00 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
1ba10 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
1ba20 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
1ba30 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
1ba40 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e     null, null, n
1ba50 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61 6e 64 6c  ull, backupHandl
1ba60 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a  e, null, new obj
1ba70 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ect[] {..       
1ba80 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
1ba90 74 65 33 29 2c 20 64 65 73 74 43 6e 6e 2c 20 64  te3), destCnn, d
1baa0 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 4e  estName, sourceN
1bab0 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20  ame }));....    
1bac0 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53      return new S
1bad0 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20 20  QLiteBackup(..  
1bae0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20            this, 
1baf0 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64 65  backupHandle, de
1bb00 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e  stHandle, zDestN
1bb10 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c  ame, sourceHandl
1bb20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1bb30 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 20  zSourceName);.. 
1bb40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
1bb50 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1bb60 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20  // Copies up to 
1bb70 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65  N pages from the
1bb80 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
1bb90 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
1bba0 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  ion..    /// dat
1bbb0 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
1bbc0 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
1bbd0 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ied backup objec
1bbe0 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
1bbf0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1bc00 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
1bc10 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
1bc20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f  object to use.</
1bc30 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1bc40 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61  <param name="nPa
1bc50 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ge">..    /// Th
1bc60 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
1bc70 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61 74  s to copy, negat
1bc80 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20  ive to copy all 
1bc90 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e  remaining pages.
1bca0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1bcb0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
1bcc0 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e  am name="retry">
1bcd0 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f  ..    /// Set to
1bce0 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65   true if the ope
1bcf0 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  ration needs to 
1bd00 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74  be retried due t
1bd10 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  o database..    
1bd20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75  /// locking issu
1bd30 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 73  es; otherwise, s
1bd40 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20 20  et to false...  
1bd50 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1bd60 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1bd70 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20  >..    /// True 
1bd80 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f 72  if there are mor
1bd90 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63 6f  e pages to be co
1bda0 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68 65  pied, false othe
1bdb0 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  rwise...    /// 
1bdc0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1bdd0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1bde0 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b 75  e bool StepBacku
1bdf0 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
1be00 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 2c  teBackup backup,
1be10 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50  ..        int nP
1be20 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  age,..        re
1be30 66 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20 20  f bool retry..  
1be40 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
1be50 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20          retry = 
1be60 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1be70 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20    if (backup == 
1be80 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1be90 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
1bea0 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
1beb0 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d  on("backup");...
1bec0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
1bed0 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64  ackupHandle hand
1bee0 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c  le = backup._sql
1bef0 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20  ite_backup;.... 
1bf00 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
1bf10 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1bf20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1bf30 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
1bf40 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
1bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
1bf60 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73  ackup object has
1bf70 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
1bf80 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  le.");....      
1bf90 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50    IntPtr handleP
1bfa0 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
1bfb0 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
1bfc0 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e  lePtr == IntPtr.
1bfd0 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
1bfe0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
1bff0 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
1c000 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
1c010 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
1c020 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
1c030 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f  nvalid handle po
1c040 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20  inter.");....   
1c050 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1c060 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
1c070 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1c080 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70  ite3_backup_step
1c090 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61 67  (handlePtr, nPag
1c0a0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61 63  e);..        bac
1c0b0 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 20  kup._stepResult 
1c0c0 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61  = n; /* NOTE: Sa
1c0d0 76 65 20 66 6f 72 20 75 73 65 20 62 79 20 46 69  ve for use by Fi
1c0e0 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d 0a  nishBackup. */..
1c0f0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
1c100 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
1c110 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
1c120 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
1c130 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
1c140 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1c150 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
1c160 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75  LiteErrorCode.Bu
1c170 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  sy)..        {..
1c180 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
1c190 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
1c1a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1c1b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
1c1c0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1c1d0 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
1c1e0 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a 20  rCode.Locked).. 
1c1f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c200 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72        retry = tr
1c210 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1c220 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
1c230 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1c240 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
1c250 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
1c260 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  Done)..        {
1c270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1c280 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1c290 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1c2a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
1c2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1c2c0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
1c2d0 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
1c2e0 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
1c2f0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
1c300 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1c310 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
1c320 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
1c330 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67   pages remaining
1c340 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66 72   to be copied fr
1c350 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a 20  om the source.. 
1c360 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
1c370 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  to the destinati
1c380 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  on database asso
1c390 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1c3a0 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f  specified..    /
1c3b0 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  // backup object
1c3c0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1c3d0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
1c3e0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
1c3f0 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
1c400 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c  bject to check.<
1c410 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1c420 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e 75   <returns>The nu
1c430 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65  mber of pages re
1c440 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f  maining to be co
1c450 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  pied.</returns>.
1c460 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1c470 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61 69  erride int Remai
1c480 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20 20  ningBackup(..   
1c490 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
1c4a0 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
1c4b0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
1c4c0 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
1c4d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1c4e0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
1c4f0 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
1c500 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
1c510 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
1c520 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
1c530 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
1c540 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
1c550 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
1c560 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
1c570 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1c580 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
1c590 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5b0 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
1c5c0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
1c5d0 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
1c5e0 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
1c5f0 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
1c600 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
1c610 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
1c620 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1c630 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
1c640 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
1c650 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
1c660 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
1c670 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
1c680 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
1c690 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
1c6a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
1c6b0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1c6c0 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
1c6d0 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64 6c  _remaining(handl
1c6e0 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ePtr);..    }...
1c6f0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1c700 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
1c710 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  rns the total nu
1c720 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
1c730 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
1c740 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d  base associated.
1c750 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68  .    /// with th
1c760 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b  e specified back
1c770 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
1c780 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1c790 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1c7a0 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
1c7b0 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
1c7c0 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e  o check.</param>
1c7d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
1c7e0 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns>The total num
1c7f0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
1c800 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
1c810 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ase.</returns>..
1c820 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1c830 72 72 69 64 65 20 69 6e 74 20 50 61 67 65 43 6f  rride int PageCo
1c840 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  untBackup(..    
1c850 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
1c860 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20   backup..       
1c870 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
1c880 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
1c890 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1c8a0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
1c8b0 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
1c8c0 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
1c8d0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1c8e0 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
1c8f0 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
1c900 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
1c910 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
1c920 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
1c930 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1c940 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
1c950 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c970 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
1c980 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
1c990 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
1c9a0 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
1c9b0 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
1c9c0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
1c9d0 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
1c9e0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1c9f0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
1ca00 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
1ca10 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
1ca20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
1ca30 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
1ca40 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
1ca50 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
1ca60 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
1ca70 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1ca80 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  .sqlite3_backup_
1ca90 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c 65  pagecount(handle
1caa0 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  Ptr);..    }....
1cab0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1cac0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72  >..    /// Destr
1cad0 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f  oys the backup o
1cae0 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62  bject, rolling b
1caf0 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74  ack any backup t
1cb00 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20  hat may be in.. 
1cb10 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d     /// progess..
1cb20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1cb30 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
1cb40 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
1cb50 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
1cb60 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c  ect to destroy.<
1cb70 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
1cb80 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
1cb90 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70  oid FinishBackup
1cba0 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
1cbb0 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a  eBackup backup..
1cbc0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
1cbd0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
1cbe0 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
1cbf0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1cc00 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
1cc10 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
1cc20 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
1cc30 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
1cc40 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
1cc50 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
1cc60 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
1cc70 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
1cc80 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1cc90 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
1cca0 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
1ccb0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1ccc0 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
1ccd0 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
1cce0 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
1ccf0 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
1cd00 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
1cd10 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
1cd20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
1cd30 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
1cd40 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1cd50 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
1cd60 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
1cd70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd80 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
1cd90 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
1cda0 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
1cdb0 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
1cdc0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
1cdd0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1cde0 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
1cdf0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1ce00 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
1ce10 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 50  _interop(handleP
1ce20 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tr);..#else..   
1ce30 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1ce40 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
1ce50 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1ce60 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
1ce70 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  sh(handlePtr);..
1ce80 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
1ce90 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c 65  handle.SetHandle
1cea0 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d 0a  AsInvalid();....
1ceb0 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45  #if COUNT_HANDLE
1cec0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e  ..        if ((n
1ced0 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
1cee0 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d 3d  ode.Ok) || (n ==
1cef0 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73   backup._stepRes
1cf00 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61 73  ult)) handle.Was
1cf10 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a 23  ReleasedOk();..#
1cf20 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
1cf30 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69 74   if ((n != SQLit
1cf40 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26  eErrorCode.Ok) &
1cf50 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e 5f  & (n != backup._
1cf60 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20 20  stepResult))..  
1cf70 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1cf80 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
1cf90 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
1cfa0 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
1cfb0 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
1cfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d010 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
1d020 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1d030 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
1d040 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
1d050 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
1d060 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  en initialized f
1d070 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
1d080 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
1d090 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1d0a0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
1d0b0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
1d0c0 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63   A boolean indic
1d0d0 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
1d0e0 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20   not the SQLite 
1d0f0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
1d100 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69   been..    /// i
1d110 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
1d120 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
1d130 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ss...    /// </r
1d140 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
1d150 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
1d160 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65  ool IsInitialize
1d170 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  d()..    {..    
1d180 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
1d190 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29  cIsInitialized()
1d1a0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
1d1b0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1d1c0 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
1d1d0 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  s if the SQLite 
1d1e0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
1d1f0 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
1d200 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  d for the..    /
1d210 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  // current proce
1d220 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
1d230 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1d240 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
1d250 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e  /// A boolean in
1d260 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
1d270 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69   or not the SQLi
1d280 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
1d290 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
1d2a0 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  / initialized fo
1d2b0 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
1d2c0 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
1d2d0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1d2e0 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
1d2f0 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69  bool StaticIsIni
1d300 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20  tialized()..    
1d310 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  {..        //.. 
1d320 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
1d330 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73 20  : Prevent races 
1d340 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65 61  with other threa
1d350 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69  ds for this enti
1d360 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20  re block, due.. 
1d370 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1d380 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e    to the try/fin
1d390 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20  ally semantics. 
1d3a0 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39   See ticket [729
1d3b0 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20  05c9a77]...     
1d3c0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c     //..        l
1d3d0 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a  ock (syncRoot)..
1d3e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d3f0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d400 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1d410 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20 6f  Save the state o
1d420 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c  f the logging cl
1d430 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73  ass and then res
1d440 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20  tore it..       
1d450 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66       //       af
1d460 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20  ter we are done 
1d470 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67  to avoid logging
1d480 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20   too many false 
1d490 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20  errors...       
1d4a0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1d4b0 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45       bool savedE
1d4c0 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c  nabled = SQLiteL
1d4d0 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20  og.Enabled;..   
1d4e0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
1d4f0 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c  og.Enabled = fal
1d500 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1d510 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1d520 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d530 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d540 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1d550 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20  TE: This method 
1d560 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61 63  [ab]uses the fac
1d570 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69  t that SQLite wi
1d580 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20  ll always..     
1d590 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1d5a0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
1d5b0 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20  E_ERROR for any 
1d5c0 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72  unknown configur
1d5d0 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20  ation option..  
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d5f0 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20         *unless* 
1d600 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
1d610 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  ry has already b
1d620 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  een initialized.
1d630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d640 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68    //       In th
1d650 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20  at case it will 
1d660 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53 51  always return SQ
1d670 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20  LITE_MISUSE...  
1d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6a0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1d6b0 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
1d6c0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1d6d0 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d  e3_config_none(.
1d6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d6f0 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
1d700 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  gOpsEnum.SQLITE_
1d710 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d  CONFIG_NONE);...
1d720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d730 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53   return (rc == S
1d740 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d  QLiteErrorCode.M
1d750 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  isuse);..       
1d760 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d770 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
1d780 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d790 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1d7a0 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20  teLog.Enabled = 
1d7b0 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20  savedEnabled;.. 
1d7c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1d7d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
1d7e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1d7f0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65 6c  ry>..    /// Hel
1d800 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  per function to 
1d810 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75 6d  retrieve a colum
1d820 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20 61  n of data from a
1d830 6e 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  n active stateme
1d840 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt...    /// </s
1d850 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1d860 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74   <param name="st
1d870 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e  mt">The statemen
1d880 74 20 62 65 69 6e 67 20 73 74 65 70 28 29 27 64  t being step()'d
1d890 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d 3e   through</param>
1d8a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1d8b0 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68   name="flags">Th
1d8c0 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
1d8d0 65 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e  ed with the conn
1d8e0 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  ection.</param>.
1d8f0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1d900 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68 65  name="index">The
1d910 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74 6f   column index to
1d920 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
1d930 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1d940 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65  m name="typ">The
1d950 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63 6f   type of data co
1d960 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63  ntained in the c
1d970 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e 69  olumn.  If Unini
1d980 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20 66  tialized, this f
1d990 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74  unction will ret
1d9a0 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74 79  rieve the dataty
1d9b0 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  pe information.<
1d9c0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1d9d0 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
1d9e0 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74 68  s the data in th
1d9f0 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e  e column</return
1da00 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
1da10 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
1da20 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74 65   GetValue(SQLite
1da30 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
1da40 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1da50 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
1da60 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79   index, SQLiteTy
1da70 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a  pe typ)..    {..
1da80 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
1da90 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41 66 66  ty aff = typ.Aff
1daa0 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 69 66  inity;..      if
1dab0 20 28 61 66 66 20 3d 3d 20 54 79 70 65 41 66 66   (aff == TypeAff
1dac0 69 6e 69 74 79 2e 4e 75 6c 6c 29 20 72 65 74 75  inity.Null) retu
1dad0 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b  rn DBNull.Value;
1dae0 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74 20 3d  ..      Type t =
1daf0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
1db00 69 66 20 28 74 79 70 2e 54 79 70 65 20 21 3d 20  if (typ.Type != 
1db10 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d 0a  DbType.Object)..
1db20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1db30 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65   t = SQLiteConve
1db40 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f 54  rt.SQLiteTypeToT
1db50 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20 20 20  ype(typ);..     
1db60 20 20 20 61 66 66 20 3d 20 54 79 70 65 54 6f 41     aff = TypeToA
1db70 66 66 69 6e 69 74 79 28 74 2c 20 66 6c 61 67 73  ffinity(t, flags
1db80 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  );..      }.... 
1db90 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
1dba0 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
1dbb0 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73  onFlags.GetAllAs
1dbc0 54 65 78 74 29 20 3d 3d 20 53 51 4c 69 74 65 43  Text) == SQLiteC
1dbd0 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47  onnectionFlags.G
1dbe0 65 74 41 6c 6c 41 73 54 65 78 74 29 0d 0a 20 20  etAllAsText)..  
1dbf0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
1dc00 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
1dc10 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ex);....      sw
1dc20 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20 20 20  itch (aff)..    
1dc30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
1dc40 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  e TypeAffinity.B
1dc50 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  lob:..          
1dc60 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20  if (typ.Type == 
1dc70 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 74  DbType.Guid && t
1dc80 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20 54  yp.Affinity == T
1dc90 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74  ypeAffinity.Text
1dca0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
1dcb0 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28 47  eturn new Guid(G
1dcc0 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64  etText(stmt, ind
1dcd0 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ex));....       
1dce0 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29     int n = (int)
1dcf0 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69  GetBytes(stmt, i
1dd00 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30  ndex, 0, null, 0
1dd10 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , 0);..         
1dd20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77 20   byte[] b = new 
1dd30 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20  byte[n];..      
1dd40 20 20 20 20 47 65 74 42 79 74 65 73 28 73 74 6d      GetBytes(stm
1dd50 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c 20  t, index, 0, b, 
1dd60 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  0, n);....      
1dd70 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65      if (typ.Type
1dd80 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20   == DbType.Guid 
1dd90 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20 20  && n == 16)..   
1dda0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1ddb0 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d 0a  new Guid(b);....
1ddc0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1ddd0 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73   b;..        cas
1dde0 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44  e TypeAffinity.D
1ddf0 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20 20  ateTime:..      
1de00 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 44 61      return GetDa
1de10 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e 64  teTime(stmt, ind
1de20 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  ex);..        ca
1de30 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
1de40 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20  Double:..       
1de50 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c     if (t == null
1de60 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f 75 62  ) return GetDoub
1de70 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  le(stmt, index);
1de80 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
1de90 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67  rn Convert.Chang
1dea0 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c 65 28  eType(GetDouble(
1deb0 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c  stmt, index), t,
1dec0 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
1ded0 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
1dee0 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
1def0 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75       if (t == nu
1df00 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e  ll) return GetIn
1df10 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
1df20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
1df30 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 42 6f 6f  (t == typeof(Boo
1df40 6c 65 61 6e 29 29 20 72 65 74 75 72 6e 20 47 65  lean)) return Ge
1df50 74 42 6f 6f 6c 65 61 6e 28 73 74 6d 74 2c 20 69  tBoolean(stmt, i
1df60 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
1df70 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
1df80 66 28 53 42 79 74 65 29 29 20 72 65 74 75 72 6e  f(SByte)) return
1df90 20 47 65 74 53 42 79 74 65 28 73 74 6d 74 2c 20   GetSByte(stmt, 
1dfa0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
1dfb0 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
1dfc0 6f 66 28 42 79 74 65 29 29 20 72 65 74 75 72 6e  of(Byte)) return
1dfd0 20 47 65 74 42 79 74 65 28 73 74 6d 74 2c 20 69   GetByte(stmt, i
1dfe0 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
1dff0 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
1e000 66 28 49 6e 74 31 36 29 29 20 72 65 74 75 72 6e  f(Int16)) return
1e010 20 47 65 74 49 6e 74 31 36 28 73 74 6d 74 2c 20   GetInt16(stmt, 
1e020 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
1e030 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
1e040 6f 66 28 55 49 6e 74 31 36 29 29 20 72 65 74 75  of(UInt16)) retu
1e050 72 6e 20 47 65 74 55 49 6e 74 31 36 28 73 74 6d  rn GetUInt16(stm
1e060 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
1e070 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
1e080 79 70 65 6f 66 28 49 6e 74 33 32 29 29 20 72 65  ypeof(Int32)) re
1e090 74 75 72 6e 20 47 65 74 49 6e 74 33 32 28 73 74  turn GetInt32(st
1e0a0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
1e0b0 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
1e0c0 74 79 70 65 6f 66 28 55 49 6e 74 33 32 29 29 20  typeof(UInt32)) 
1e0d0 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 33 32  return GetUInt32
1e0e0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
1e0f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
1e100 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 36 34 29  == typeof(Int64)
1e110 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36  ) return GetInt6
1e120 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  4(stmt, index);.
1e130 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
1e140 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 36   == typeof(UInt6
1e150 34 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49  4)) return GetUI
1e160 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
1e170 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  );..          re
1e180 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61  turn Convert.Cha
1e190 6e 67 65 54 79 70 65 28 47 65 74 49 6e 74 36 34  ngeType(GetInt64
1e1a0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74  (stmt, index), t
1e1b0 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
1e1c0 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
1e1d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
1e1e0 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
1e1f0 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
1e200 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
1e210 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
1e220 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62 6c  GetCursorForTabl
1e230 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
1e240 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c 20  t stmt, int db, 
1e250 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a 20  int rootPage).. 
1e260 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
1e270 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
1e280 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
1e290 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1e2a0 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73 6f  ite3_table_curso
1e2b0 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  r_interop(stmt._
1e2c0 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62 2c  sqlite_stmt, db,
1e2d0 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65 6c   rootPage);..#el
1e2e0 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
1e2f0 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20   -1;..#endif..  
1e300 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1e310 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
1e320 67 20 47 65 74 52 6f 77 49 64 46 6f 72 43 75 72  g GetRowIdForCur
1e330 73 6f 72 28 53 51 4c 69 74 65 53 74 61 74 65 6d  sor(SQLiteStatem
1e340 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 63 75  ent stmt, int cu
1e350 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  rsor)..    {..#i
1e360 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
1e370 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20 72  RD..      long r
1e380 6f 77 69 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  owid = 0;..     
1e390 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1e3a0 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
1e3b0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1e3c0 33 5f 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69  3_cursor_rowid_i
1e3d0 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
1e3e0 69 74 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f 72  ite_stmt, cursor
1e3f0 2c 20 72 65 66 20 72 6f 77 69 64 29 3b 0d 0a 20  , ref rowid);.. 
1e400 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53       if (rc == S
1e410 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
1e420 6b 29 20 72 65 74 75 72 6e 20 72 6f 77 69 64 3b  k) return rowid;
1e430 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
1e440 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20   0;..#else..    
1e450 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6e    return 0;..#en
1e460 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
1e470 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1e480 69 64 65 20 76 6f 69 64 20 47 65 74 49 6e 64 65  ide void GetInde
1e490 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49  xColumnExtendedI
1e4a0 6e 66 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62  nfo(string datab
1e4b0 61 73 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65  ase, string inde
1e4c0 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e  x, string column
1e4d0 2c 20 72 65 66 20 69 6e 74 20 73 6f 72 74 4d 6f  , ref int sortMo
1e4e0 64 65 2c 20 72 65 66 20 69 6e 74 20 6f 6e 45 72  de, ref int onEr
1e4f0 72 6f 72 2c 20 72 65 66 20 73 74 72 69 6e 67 20  ror, ref string 
1e500 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
1e510 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  e)..    {..#if !
1e520 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
1e530 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 63 6f  .      IntPtr co
1e540 6c 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ll = IntPtr.Zero
1e550 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f 6c  ;..      int col
1e560 6c 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20  llen = 0;..     
1e570 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1e580 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63   rc;....      rc
1e590 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
1e5a0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
1e5b0 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f  ndex_column_info
1e5c0 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
1e5d0 6f 55 54 46 38 28 64 61 74 61 62 61 73 65 29 2c  oUTF8(database),
1e5e0 20 54 6f 55 54 46 38 28 69 6e 64 65 78 29 2c 20   ToUTF8(index), 
1e5f0 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20  ToUTF8(column), 
1e600 72 65 66 20 73 6f 72 74 4d 6f 64 65 2c 20 72 65  ref sortMode, re
1e610 66 20 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20 63  f onError, ref c
1e620 6f 6c 6c 2c 20 72 65 66 20 63 6f 6c 6c 6c 65 6e  oll, ref colllen
1e630 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63  );..      if (rc
1e640 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
1e650 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
1e660 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
1e670 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a  n(rc, null);....
1e680 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53        collationS
1e690 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54 6f  equence = UTF8To
1e6a0 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f 6c  String(coll, col
1e6b0 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  llen);..#else.. 
1e6c0 20 20 20 20 20 73 6f 72 74 4d 6f 64 65 20 3d 20       sortMode = 
1e6d0 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45 72 72 6f  0;..      onErro
1e6e0 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20 63 6f  r = 2;..      co
1e6f0 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
1e700 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a 23 65 6e  = "BINARY";..#en
1e710 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
1e720 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1e730 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
1e740 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28  ode FileControl(
1e750 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20  string zDbName, 
1e760 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72 20 70  int op, IntPtr p
1e770 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Arg)..    {..   
1e780 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
1e790 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1e7a0 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
1e7b0 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d  ol(_sql, (zDbNam
1e7c0 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55  e != null) ? ToU
1e7d0 54 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e  TF8(zDbName) : n
1e7e0 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d  ull, op, pArg);.
1e7f0 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a  .    }..  }..}..