System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact c7826c5d170503db75abd67cc76639a548bea252:


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: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0690: 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20   /// This field 
06a0: 69 73 20 75 73 65 64 20 74 6f 20 72 65 66 65 72  is used to refer
06b0: 20 74 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   to memory alloc
06c0: 61 74 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20  ated for the..  
06d0: 20 20 2f 2f 2f 20 53 51 4c 49 54 45 5f 44 42 43    /// SQLITE_DBC
06e0: 4f 4e 46 49 47 5f 4d 41 49 4e 44 42 4e 41 4d 45  ONFIG_MAINDBNAME
06f0: 20 76 61 6c 75 65 20 75 73 65 64 20 77 69 74 68   value used with
0700: 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20   the native..   
0710: 20 2f 2f 2f 20 22 73 71 6c 69 74 65 33 5f 64 62   /// "sqlite3_db
0720: 5f 63 6f 6e 66 69 67 22 20 41 50 49 2e 20 20 49  _config" API.  I
0730: 66 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  f allocated, the
0740: 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..   
0750: 20 2f 2f 2f 20 6d 65 6d 65 6f 72 79 20 77 69 6c   /// memeory wil
0760: 6c 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20  l be freed when 
0770: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63  the underlying c
0780: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 0d 0a 20 20  onnection is..  
0790: 20 20 2f 2f 2f 20 63 6c 6f 73 65 64 2e 0d 0a 20    /// closed... 
07a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
07b0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 49  >..    private I
07c0: 6e 74 50 74 72 20 64 62 4e 61 6d 65 20 3d 20 49  ntPtr dbName = I
07d0: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
07e0: 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 4e 4f     //..    // NO
07f0: 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65 20  TE: This is the 
0800: 70 75 62 6c 69 63 20 6b 65 79 20 66 6f 72 20 74  public key for t
0810: 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  he System.Data.S
0820: 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 2e 20  QLite assembly. 
0830: 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65 20 74   If you change t
0840: 68 65 0d 0a 20 20 20 20 2f 2f 20 20 20 20 20 20  he..    //      
0850: 20 53 4e 4b 20 66 69 6c 65 2c 20 79 6f 75 20 77   SNK file, you w
0860: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 63 68 61 6e  ill need to chan
0870: 67 65 20 74 68 69 73 20 61 73 20 77 65 6c 6c 2e  ge this as well.
0880: 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 69 6e  ..    //..    in
0890: 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74 72  ternal const str
08a0: 69 6e 67 20 50 75 62 6c 69 63 4b 65 79 20 3d 0d  ing PublicKey =.
08b0: 0a 20 20 20 20 20 20 20 20 22 30 30 32 34 30 30  .        "002400
08c0: 30 30 30 34 38 30 30 30 30 30 39 34 30 30 30 30  0004800000940000
08d0: 30 30 30 36 30 32 30 30 30 30 30 30 32 34 30 30  0006020000002400
08e0: 30 30 35 32 35 33 34 31 33 31 30 30 30 34 30 30  0052534131000400
08f0: 30 30 30 31 30 30 30 31 30 30 30 35 61 32 38 38  000100010005a288
0900: 64 65 35 36 38 37 63 34 65 31 22 20 2b 0d 0a 20  de5687c4e1" +.. 
0910: 20 20 20 20 20 20 20 22 62 36 32 31 64 64 66 66         "b621ddff
0920: 35 64 38 34 34 37 32 37 34 31 38 39 35 36 39 39  5d84472741895699
0930: 37 66 34 37 35 65 62 38 32 39 34 32 39 65 34 31  7f475eb829429e41
0940: 31 61 66 66 33 65 39 33 66 39 37 62 37 30 64 65  1aff3e93f97b70de
0950: 36 39 38 62 39 37 32 36 34 30 39 32 35 62 64 64  698b972640925bdd
0960: 34 34 32 38 30 64 66 30 22 20 2b 0d 0a 20 20 20  44280df0" +..   
0970: 20 20 20 20 20 22 61 32 35 61 38 34 33 32 36 36       "a25a843266
0980: 39 37 33 37 30 34 31 33 37 63 62 62 30 65 37 34  973704137cbb0e74
0990: 34 31 63 31 66 65 37 63 61 65 34 65 32 34 34 30  41c1fe7cae4e2440
09a0: 61 65 39 31 61 62 38 63 64 65 33 39 33 33 66 65  ae91ab8cde3933fe
09b0: 62 63 62 31 61 63 34 38 64 64 33 33 62 34 30 65  bcb1ac48dd33b40e
09c0: 31 33 63 34 32 31 22 20 2b 0d 0a 20 20 20 20 20  13c421" +..     
09d0: 20 20 20 22 64 38 32 31 35 63 31 38 61 34 33 34     "d8215c18a434
09e0: 39 61 34 33 36 64 64 34 39 39 65 33 63 33 38 35  9a436dd499e3c385
09f0: 63 63 36 38 33 30 31 35 66 38 38 36 66 36 63 31  cc683015f886f6c1
0a00: 30 62 64 39 30 31 31 35 65 62 32 62 64 36 31 62  0bd90115eb2bd61b
0a10: 36 37 37 35 30 38 33 39 65 33 61 31 39 39 34 31  67750839e3a19941
0a20: 64 63 39 63 22 3b 0d 0a 0d 0a 23 69 66 20 21 50  dc9c";....#if !P
0a30: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
0a40: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 69 6e  RAMEWORK..    in
0a50: 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74 72  ternal const str
0a60: 69 6e 67 20 44 65 73 69 67 6e 65 72 56 65 72 73  ing DesignerVers
0a70: 69 6f 6e 20 3d 20 22 31 2e 30 2e 31 30 39 2e 30  ion = "1.0.109.0
0a80: 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  ";..#endif....  
0a90: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0aa0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 61  .    /// The opa
0ab0: 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74 75  que pointer retu
0ac0: 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74 68  rned to us by th
0ad0: 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64 65  e sqlite provide
0ae0: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0af0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0b00: 63 74 65 64 20 69 6e 74 65 72 6e 61 6c 20 53 51  cted internal SQ
0b10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
0b20: 6e 64 6c 65 20 5f 73 71 6c 3b 0d 0a 20 20 20 20  ndle _sql;..    
0b30: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
0b40: 20 5f 66 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20   _fileName;..   
0b50: 20 70 72 6f 74 65 63 74 65 64 20 53 51 4c 69 74   protected SQLit
0b60: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
0b70: 20 5f 66 6c 61 67 73 3b 0d 0a 20 20 20 20 70 72   _flags;..    pr
0b80: 69 76 61 74 65 20 62 6f 6f 6c 20 5f 73 65 74 4c  ivate bool _setL
0b90: 6f 67 43 61 6c 6c 62 61 63 6b 3b 0d 0a 20 20 20  ogCallback;..   
0ba0: 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c 20   protected bool 
0bb0: 5f 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20 20 20 70  _usePool;..    p
0bc0: 72 6f 74 65 63 74 65 64 20 69 6e 74 20 5f 70 6f  rotected int _po
0bd0: 6f 6c 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  olVersion;..    
0be0: 70 72 69 76 61 74 65 20 69 6e 74 20 5f 63 61 6e  private int _can
0bf0: 63 65 6c 43 6f 75 6e 74 3b 0d 0a 0d 0a 23 69 66  celCount;....#if
0c00: 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f   (NET_35 || NET_
0c10: 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20  40 || NET_45 || 
0c20: 4e 45 54 5f 34 35 31 20 7c 7c 20 4e 45 54 5f 34  NET_451 || NET_4
0c30: 35 32 20 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c 20  52 || NET_46 || 
0c40: 4e 45 54 5f 34 36 31 20 7c 7c 20 4e 45 54 5f 34  NET_461 || NET_4
0c50: 36 32 20 7c 7c 20 4e 45 54 5f 34 37 20 7c 7c 20  62 || NET_47 || 
0c60: 4e 45 54 5f 34 37 31 29 20 26 26 20 21 50 4c 41  NET_471) && !PLA
0c70: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
0c80: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 70 72 69 76  MEWORK..    priv
0c90: 61 74 65 20 62 6f 6f 6c 20 5f 62 75 69 6c 64 69  ate bool _buildi
0ca0: 6e 67 53 63 68 65 6d 61 3b 0d 0a 23 65 6e 64 69  ngSchema;..#endi
0cb0: 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  f....    /// <su
0cc0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0cd0: 54 68 65 20 75 73 65 72 2d 64 65 66 69 6e 65 64  The user-defined
0ce0: 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 67 69 73   functions regis
0cf0: 74 65 72 65 64 20 6f 6e 20 74 68 69 73 20 63 6f  tered on this co
0d00: 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f  nnection..    //
0d10: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0d20: 20 20 70 72 6f 74 65 63 74 65 64 20 44 69 63 74    protected Dict
0d30: 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e  ionary<SQLiteFun
0d40: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20  ctionAttribute, 
0d50: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20  SQLiteFunction> 
0d60: 5f 66 75 6e 63 74 69 6f 6e 73 3b 0d 0a 0d 0a 23  _functions;....#
0d70: 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  if INTEROP_VIRTU
0d80: 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f  AL_TABLE..    //
0d90: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0da0: 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65   /// This is the
0db0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 61 74   name of the nat
0dc0: 69 76 65 20 6c 69 62 72 61 72 79 20 66 69 6c 65  ive library file
0dd0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
0de0: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 22 76 74 73  he..    /// "vts
0df0: 68 69 6d 22 20 65 78 74 65 6e 73 69 6f 6e 20 5b  him" extension [
0e00: 77 72 61 70 70 65 72 5d 2e 0d 0a 20 20 20 20 2f  wrapper]...    /
0e10: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0e20: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 72     protected str
0e30: 69 6e 67 20 5f 73 68 69 6d 45 78 74 65 6e 73 69  ing _shimExtensi
0e40: 6f 6e 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c  onFileName = nul
0e50: 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  l;....    /// <s
0e60: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
0e70: 20 54 68 69 73 20 69 73 20 74 68 65 20 66 6c 61   This is the fla
0e80: 67 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68  g indicate wheth
0e90: 65 72 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69  er the native li
0ea0: 62 72 61 72 79 20 66 69 6c 65 20 74 68 61 74 0d  brary file that.
0eb0: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e  .    /// contain
0ec0: 73 20 74 68 65 20 22 76 74 73 68 69 6d 22 20 65  s the "vtshim" e
0ed0: 78 74 65 6e 73 69 6f 6e 20 6d 75 73 74 20 62 65  xtension must be
0ee0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 6c 6f 61   dynamically loa
0ef0: 64 65 64 20 62 79 0d 0a 20 20 20 20 2f 2f 2f 20  ded by..    /// 
0f00: 74 68 69 73 20 63 6c 61 73 73 20 70 72 69 6f 72  this class prior
0f10: 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 2f 2f   to use...    //
0f20: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0f30: 20 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c    protected bool
0f40: 3f 20 5f 73 68 69 6d 49 73 4c 6f 61 64 4e 65 65  ? _shimIsLoadNee
0f50: 64 65 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ded = null;.... 
0f60: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0f70: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69  ..    /// This i
0f80: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
0f90: 65 20 6e 61 74 69 76 65 20 65 6e 74 72 79 20 70  e native entry p
0fa0: 6f 69 6e 74 20 66 6f 72 20 74 68 65 20 22 76 74  oint for the "vt
0fb0: 73 68 69 6d 22 0d 0a 20 20 20 20 2f 2f 2f 20 65  shim"..    /// e
0fc0: 78 74 65 6e 73 69 6f 6e 20 5b 77 72 61 70 70 65  xtension [wrappe
0fd0: 72 5d 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  r]...    /// </s
0fe0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0ff0: 74 65 63 74 65 64 20 73 74 72 69 6e 67 20 5f 73  tected string _s
1000: 68 69 6d 45 78 74 65 6e 73 69 6f 6e 50 72 6f 63  himExtensionProc
1010: 4e 61 6d 65 20 3d 20 22 73 71 6c 69 74 65 33 5f  Name = "sqlite3_
1020: 76 74 73 68 69 6d 5f 69 6e 69 74 22 3b 0d 0a 0d  vtshim_init";...
1030: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1040: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
1050: 6d 6f 64 75 6c 65 73 20 63 72 65 61 74 65 64 20  modules created 
1060: 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e 65  using this conne
1070: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
1080: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1090: 70 72 6f 74 65 63 74 65 64 20 44 69 63 74 69 6f  protected Dictio
10a0: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
10b0: 69 74 65 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64 75  iteModule> _modu
10c0: 6c 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  les;..#endif....
10d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1130: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
1140: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1150: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68 65  / Constructs the
1160: 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f 20   object used to 
1170: 69 6e 74 65 72 61 63 74 20 77 69 74 68 20 74 68  interact with th
1180: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
1190: 62 72 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 75  brary..    /// u
11a0: 73 69 6e 67 20 74 68 65 20 55 54 46 2d 38 20 74  sing the UTF-8 t
11b0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a 20  ext encoding... 
11c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
11d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
11e0: 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a 20  m name="fmt">.. 
11f0: 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65 54     /// The DateT
1200: 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 62 65  ime format to be
1210: 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e 76 65   used when conve
1220: 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76 61 6c  rting string val
1230: 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20 2f 2f  ues to a..    //
1240: 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64 20 62  / DateTime and b
1250: 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d 65 20  inding DateTime 
1260: 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20  parameters...   
1270: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1280: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1290: 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20 20  me="kind">..    
12a0: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
12b0: 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64 22  f="DateTimeKind"
12c0: 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20 77   /> to be used w
12d0: 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44 61 74  hen creating Dat
12e0: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
12f0: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
1300: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1310: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
1320: 6d 74 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20  mtString">..    
1330: 2f 2f 2f 20 54 68 65 20 66 6f 72 6d 61 74 20 73  /// The format s
1340: 74 72 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  tring to be used
1350: 20 77 68 65 6e 20 70 61 72 73 69 6e 67 20 61 6e   when parsing an
1360: 64 20 66 6f 72 6d 61 74 74 69 6e 67 20 44 61 74  d formatting Dat
1370: 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76  eTime..    /// v
1380: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
1390: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
13a0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
13b0: 62 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  b">..    /// The
13c0: 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 74   native handle t
13d0: 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64 20  o be associated 
13e0: 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73  with the databas
13f0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
1400: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1410: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1420: 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e  name="fileName">
1430: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 75  ..    /// The fu
1440: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
1450: 6c 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61 74  le name associat
1460: 65 64 20 77 69 74 68 20 3c 70 61 72 61 6d 72 65  ed with <paramre
1470: 66 20 6e 61 6d 65 3d 22 64 62 20 22 2f 3e 2e 0d  f name="db "/>..
1480: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1490: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
14a0: 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64 6c  m name="ownHandl
14b0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  e">..    /// Non
14c0: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 65 77  -zero if the new
14d0: 6c 79 20 63 72 65 61 74 65 64 20 6f 62 6a 65 63  ly created objec
14e0: 74 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c 20  t instance will 
14f0: 6e 65 65 64 20 74 6f 20 64 69 73 70 6f 73 65 0d  need to dispose.
1500: 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 3c 70 61 72  .    /// of <par
1510: 61 6d 72 65 66 20 6e 61 6d 65 3d 22 64 62 22 20  amref name="db" 
1520: 2f 3e 20 77 68 65 6e 20 69 74 20 69 73 20 6e 6f  /> when it is no
1530: 20 6c 6f 6e 67 65 72 20 6e 65 65 64 65 64 2e 0d   longer needed..
1540: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1550: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1560: 53 51 4c 69 74 65 33 28 0d 0a 20 20 20 20 20 20  SQLite3(..      
1570: 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d    SQLiteDateForm
1580: 61 74 73 20 66 6d 74 2c 0d 0a 20 20 20 20 20 20  ats fmt,..      
1590: 20 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b    DateTimeKind k
15a0: 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ind,..        st
15b0: 72 69 6e 67 20 66 6d 74 53 74 72 69 6e 67 2c 0d  ring fmtString,.
15c0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
15d0: 64 62 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  db,..        str
15e0: 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
15f0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f 77 6e 48         bool ownH
1600: 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 29  andle..        )
1610: 0d 0a 20 20 20 20 20 20 3a 20 62 61 73 65 28 66  ..      : base(f
1620: 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72  mt, kind, fmtStr
1630: 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ing)..    {..   
1640: 20 20 20 20 20 69 66 20 28 64 62 20 21 3d 20 49       if (db != I
1650: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
1660: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1670: 20 20 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53      _sql = new S
1680: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
1690: 61 6e 64 6c 65 28 64 62 2c 20 6f 77 6e 48 61 6e  andle(db, ownHan
16a0: 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle);..         
16b0: 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 66     _fileName = f
16c0: 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
16d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
16e0: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
16f0: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
1700: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
1710: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1720: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
1730: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
1740: 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
1750: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
1760: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c         null, nul
1770: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 66  l, null, _sql, f
1780: 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a  ileName, new obj
1790: 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ect[] {..       
17a0: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
17b0: 53 51 4c 69 74 65 33 29 2c 20 66 6d 74 2c 20 6b  SQLite3), fmt, k
17c0: 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 2c 20  ind, fmtString, 
17d0: 64 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  db, fileName,.. 
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
17f0: 77 6e 48 61 6e 64 6c 65 20 7d 29 29 3b 0d 0a 20  wnHandle }));.. 
1800: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
1810: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1840: 2f 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 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
1880: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
1890: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
18a0: 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ers..    private
18b0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
18c0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69  .    private voi
18d0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
18e0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
18f0: 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f     {..#if THROW_
1900: 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20  ON_DISPOSED..   
1910: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
1920: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
1930: 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
1940: 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
1950: 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33  n(typeof(SQLite3
1960: 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66  ).Name);..#endif
1970: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c0: 2f 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 0d 0a  //////////////..
19e0: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
19f0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69  override void Di
1a00: 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f  spose(bool dispo
1a10: 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sing)..    {..  
1a20: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
1a30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a40: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
1a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a70: 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67   //if (disposing
1a80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a90: 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20     //{..        
1aa0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
1ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1ae0: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73      //    // dis
1af0: 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73  pose managed res
1b00: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b20: 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //    //////////
1b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d              //}.
1b60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b70: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
1ba0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
1bb0: 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20  lease unmanaged 
1bc0: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
1bd0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1be0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
1c10: 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c   INTEROP_VIRTUAL
1c20: 5f 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20  _TABLE..        
1c30: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 4d          DisposeM
1c40: 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69  odules();..#endi
1c50: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
1c60: 20 20 20 20 20 43 6c 6f 73 65 28 74 72 75 65 29       Close(true)
1c70: 3b 20 2f 2a 20 44 69 73 70 6f 73 69 6e 67 2c 20  ; /* Disposing, 
1c80: 63 61 6e 6e 6f 74 20 74 68 72 6f 77 2e 20 2a 2f  cannot throw. */
1c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1ca0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1cb0: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
1cc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1cd0: 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65      base.Dispose
1ce0: 28 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a  (disposing);....
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1d10: 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20  OTE: Everything 
1d20: 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20  should be fully 
1d30: 64 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73  disposed at this
1d40: 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20   point...       
1d50: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1d60: 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20       disposed = 
1d70: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
1d80: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
1d90: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1e00: 0d 0a 23 69 66 20 44 45 42 55 47 0d 0a 20 20 20  ..#if DEBUG..   
1e10: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
1e20: 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69 6e 67   string ToString
1e30: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
1e40: 20 20 20 72 65 74 75 72 6e 20 48 65 6c 70 65 72     return Helper
1e50: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
1e60: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1e70: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49     CultureInfo.I
1e80: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c  nvariantCulture,
1e90: 20 22 66 69 6c 65 4e 61 6d 65 20 3d 20 7b 30 7d   "fileName = {0}
1ea0: 2c 20 66 6c 61 67 73 20 3d 20 7b 31 7d 22 2c 0d  , flags = {1}",.
1eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 69  .            _fi
1ec0: 6c 65 4e 61 6d 65 2c 20 5f 66 6c 61 67 73 29 3b  leName, _flags);
1ed0: 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
1ee0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e  //////....#if IN
1f50: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
1f60: 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
1f70: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1f80: 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74 74 65  This method atte
1f90: 6d 70 74 73 20 74 6f 20 64 69 73 70 6f 73 65 20  mpts to dispose 
1fa0: 6f 66 20 61 6c 6c 20 74 68 65 20 3c 73 65 65 20  of all the <see 
1fb0: 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75  cref="SQLiteModu
1fc0: 6c 65 22 20 2f 3e 20 64 65 72 69 76 65 64 0d 0a  le" /> derived..
1fd0: 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69      /// object i
1fe0: 6e 73 74 61 6e 63 65 73 20 63 75 72 72 65 6e 74  nstances current
1ff0: 6c 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ly associated wi
2000: 74 68 20 74 68 65 20 6e 61 74 69 76 65 20 64 61  th the native da
2010: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
2020: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
2030: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
2040: 61 74 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ate void Dispose
2050: 4d 6f 64 75 6c 65 73 28 29 0d 0a 20 20 20 20 7b  Modules()..    {
2060: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
2070: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
2080: 66 20 61 6e 79 20 6d 6f 64 75 6c 65 73 20 77 65  f any modules we
2090: 72 65 20 63 72 65 61 74 65 64 2c 20 61 74 74 65  re created, atte
20a0: 6d 70 74 20 74 6f 20 64 69 73 70 6f 73 65 20 6f  mpt to dispose o
20b0: 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  f..        //   
20c0: 20 20 20 20 74 68 65 6d 20 6e 6f 77 2e 20 20 54      them now.  T
20d0: 68 69 73 20 63 6f 64 65 20 69 73 20 64 65 73 69  his code is desi
20e0: 67 6e 65 64 20 74 6f 20 61 76 6f 69 64 20 74 68  gned to avoid th
20f0: 72 6f 77 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  rowing..        
2100: 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70 74 69  //       excepti
2110: 6f 6e 73 20 75 6e 6c 65 73 73 20 74 68 65 20 44  ons unless the D
2120: 69 73 70 6f 73 65 20 6d 65 74 68 6f 64 20 6f 66  ispose method of
2130: 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a 20 20 20   the module..   
2140: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74       //       it
2150: 73 65 6c 66 20 74 68 72 6f 77 73 20 61 6e 20 65  self throws an e
2160: 78 63 65 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  xception...     
2170: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69     //..        i
2180: 66 20 28 5f 6d 6f 64 75 6c 65 73 20 21 3d 20 6e  f (_modules != n
2190: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
21a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
21b0: 65 61 63 68 20 28 4b 65 79 56 61 6c 75 65 50 61  each (KeyValuePa
21c0: 69 72 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74  ir<string, SQLit
21d0: 65 4d 6f 64 75 6c 65 3e 20 70 61 69 72 20 69 6e  eModule> pair in
21e0: 20 5f 6d 6f 64 75 6c 65 73 29 0d 0a 20 20 20 20   _modules)..    
21f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2200: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
2210: 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 20 3d  eModule module =
2220: 20 70 61 69 72 2e 56 61 6c 75 65 3b 0d 0a 0d 0a   pair.Value;....
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2240: 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
2250: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2260: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
2270: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2280: 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73        module.Dis
2290: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
22a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22b0: 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73 2e 43        _modules.C
22c0: 6c 65 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  lear();..       
22d0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69   }..    }..#endi
22e0: 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  f....    ///////
22f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2340: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2350: 2f 2f 20 49 74 20 69 73 6e 27 74 20 6e 65 63 65  // It isn't nece
2360: 73 73 61 72 79 20 74 6f 20 63 6c 65 61 6e 75 70  ssary to cleanup
2370: 20 61 6e 79 20 66 75 6e 63 74 69 6f 6e 73 20 77   any functions w
2380: 65 27 76 65 20 72 65 67 69 73 74 65 72 65 64 2e  e've registered.
2390: 20 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63 74    If the connect
23a0: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 20 67 6f 65 73  ion..    // goes
23b0: 20 74 6f 20 74 68 65 20 70 6f 6f 6c 20 61 6e 64   to the pool and
23c0: 20 69 73 20 72 65 73 75 72 72 65 63 74 65 64 20   is resurrected 
23d0: 6c 61 74 65 72 2c 20 72 65 2d 72 65 67 69 73 74  later, re-regist
23e0: 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 77  ered functions w
23f0: 69 6c 6c 20 6f 76 65 72 77 72 69 74 65 20 74 68  ill overwrite th
2400: 65 0d 0a 20 20 20 20 2f 2f 20 70 72 65 76 69 6f  e..    // previo
2410: 75 73 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54  us functions.  T
2420: 68 65 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  he SQLiteFunctio
2430: 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65 20 77 69  nCookieHandle wi
2440: 6c 6c 20 74 61 6b 65 20 63 61 72 65 20 6f 66 20  ll take care of 
2450: 66 72 65 65 69 6e 67 20 75 6e 6d 61 6e 61 67 65  freeing unmanage
2460: 64 0d 0a 20 20 20 20 2f 2f 20 72 65 73 6f 75 72  d..    // resour
2470: 63 65 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f  ces belonging to
2480: 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 2d   the previously-
2490: 72 65 67 69 73 74 65 72 65 64 20 66 75 6e 63 74  registered funct
24a0: 69 6f 6e 73 2e 0d 0a 20 20 20 20 69 6e 74 65 72  ions...    inter
24b0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
24c0: 64 20 43 6c 6f 73 65 28 62 6f 6f 6c 20 64 69 73  d Close(bool dis
24d0: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a  posing)..    {..
24e0: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21        if (_sql !
24f0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
2500: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
2510: 21 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 29  !_sql.OwnHandle)
2520: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
2530: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
2540: 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  l = null;..     
2550: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
2560: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
2570: 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  .          bool 
2580: 75 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20  unbindFunctions 
2590: 3d 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  = ((_flags & SQL
25a0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
25b0: 67 73 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f  gs.UnbindFunctio
25c0: 6e 73 4f 6e 43 6c 6f 73 65 29 0d 0a 20 20 20 20  nsOnClose)..    
25d0: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 53              == S
25e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
25f0: 6c 61 67 73 2e 55 6e 62 69 6e 64 46 75 6e 63 74  lags.UnbindFunct
2600: 69 6f 6e 73 4f 6e 43 6c 6f 73 65 29 3b 0d 0a 0d  ionsOnClose);...
2610: 0a 20 20 20 20 20 20 72 65 74 72 79 3a 0d 0a 0d  .      retry:...
2620: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f  .          if (_
2630: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20  usePool)..      
2640: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2650: 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65 42       if (SQLiteB
2660: 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e 65 63 74  ase.ResetConnect
2670: 69 6f 6e 28 5f 73 71 6c 2c 20 5f 73 71 6c 2c 20  ion(_sql, _sql, 
2680: 21 64 69 73 70 6f 73 69 6e 67 29 20 26 26 0d 0a  !disposing) &&..
2690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a0: 20 20 55 6e 68 6f 6f 6b 4e 61 74 69 76 65 43 61    UnhookNativeCa
26b0: 6c 6c 62 61 63 6b 73 28 74 72 75 65 2c 20 21 64  llbacks(true, !d
26c0: 69 73 70 6f 73 69 6e 67 29 29 0d 0a 20 20 20 20  isposing))..    
26d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26f0: 66 20 28 75 6e 62 69 6e 64 46 75 6e 63 74 69 6f  f (unbindFunctio
2700: 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns)..           
2710: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2730: 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74 69  if (SQLiteFuncti
2740: 6f 6e 2e 55 6e 62 69 6e 64 41 6c 6c 46 75 6e 63  on.UnbindAllFunc
2750: 74 69 6f 6e 73 28 74 68 69 73 2c 20 5f 66 6c 61  tions(this, _fla
2760: 67 73 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  gs, false))..   
2770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2780: 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43     {..#if !NET_C
2790: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
27a0: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
27d0: 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
27e0: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
27f0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2810: 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
2820: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
2830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2850: 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20  UnbindFunctions 
2860: 28 50 6f 6f 6c 29 20 53 75 63 63 65 73 73 3a 20  (Pool) Success: 
2870: 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
2880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2890: 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72       HandleToStr
28a0: 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66  ing()));..#endif
28b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2900: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
2910: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
2920: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
2930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2940: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
2950: 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
2960: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
2970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
2990: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
29a0: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c0: 20 20 20 20 20 20 20 20 20 22 55 6e 62 69 6e 64           "Unbind
29d0: 46 75 6e 63 74 69 6f 6e 73 20 28 50 6f 6f 6c 29  Functions (Pool)
29e0: 20 46 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d   Failure: {0}",.
29f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48                 H
2a10: 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29  andleToString())
2a20: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2a50: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20         }....#if 
2a60: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
2a70: 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 20  TABLE..         
2a80: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
2a90: 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64  Modules();..#end
2aa0: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
2ab0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
2ac0: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64  nnectionPool.Add
2ad0: 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c  (_fileName, _sql
2ae0: 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b  , _poolVersion);
2af0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b00: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
2b10: 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64  ection.OnChanged
2b20: 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65  (null, new Conne
2b30: 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d  ctionEventArgs(.
2b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b50: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
2b60: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65  nectionEventType
2b70: 2e 43 6c 6f 73 65 64 54 6f 50 6f 6f 6c 2c 20 6e  .ClosedToPool, n
2b80: 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20  ull, null,..    
2b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba0: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73    null, null, _s
2bb0: 71 6c 2c 20 5f 66 69 6c 65 4e 61 6d 65 2c 20 6e  ql, _fileName, n
2bc0: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20  ew object[] {.. 
2bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be0: 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
2bf0: 74 65 33 29 2c 20 21 64 69 73 70 6f 73 69 6e 67  te3), !disposing
2c00: 2c 20 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 70 6f  , _fileName, _po
2c10: 6f 6c 56 65 72 73 69 6f 6e 20 7d 29 29 3b 0d 0a  olVersion }));..
2c20: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
2c30: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
2c40: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
2c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2c60: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
2c70: 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
2c80: 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
2cb0: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd0: 20 20 20 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29     "Close (Pool)
2ce0: 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c 0d   Success: {0}",.
2cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d00: 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53         HandleToS
2d10: 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64  tring()));..#end
2d20: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
2d30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2d40: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
2d50: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e         {..#if !N
2d60: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
2d70: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
2d80: 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N..             
2d90: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
2da0: 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  Line(HelperMetho
2db0: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
2dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dd0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
2de0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
2df0: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
2e00: 20 20 20 20 20 20 20 20 20 20 20 22 43 6c 6f 73             "Clos
2e10: 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65  e (Pool) Failure
2e20: 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
2e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48                 H
2e40: 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29  andleToString())
2e50: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e70: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2e80: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
2e90: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63  his connection c
2ea0: 61 6e 6e 6f 74 20 62 65 20 61 64 64 65 64 20 74  annot be added t
2eb0: 6f 20 74 68 65 20 70 6f 6f 6c 3b 0d 0a 20 20 20  o the pool;..   
2ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2ed0: 2f 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  /       therefor
2ee0: 65 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 20  e, just use the 
2ef0: 6e 6f 72 6d 61 6c 20 64 69 73 70 6f 73 61 6c 0d  normal disposal.
2f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f10: 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 63     //       proc
2f20: 65 64 75 72 65 20 6f 6e 20 69 74 2e 0d 0a 20 20  edure on it...  
2f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f40: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2f50: 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d        _usePool =
2f60: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2f70: 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
2f80: 72 65 74 72 79 3b 0d 0a 20 20 20 20 20 20 20 20  retry;..        
2f90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2fa0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2fb0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2fc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2fd0: 20 2f 2a 20 49 47 4e 4f 52 45 44 20 2a 2f 0d 0a   /* IGNORED */..
2fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
2ff0: 68 6f 6f 6b 4e 61 74 69 76 65 43 61 6c 6c 62 61  hookNativeCallba
3000: 63 6b 73 28 64 69 73 70 6f 73 69 6e 67 2c 20 21  cks(disposing, !
3010: 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20  disposing);.... 
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3030: 28 75 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73  (unbindFunctions
3040: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
3050: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3060: 20 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65        if (SQLite
3070: 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69 6e 64 41  Function.UnbindA
3080: 6c 6c 46 75 6e 63 74 69 6f 6e 73 28 74 68 69 73  llFunctions(this
3090: 2c 20 5f 66 6c 61 67 73 2c 20 66 61 6c 73 65 29  , _flags, false)
30a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
30b0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54       {..#if !NET
30c0: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
30d0: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
30e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30f0: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
3100: 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74  teLine(HelperMet
3110: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
3120: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
3130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
3140: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
3150: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3170: 20 20 20 20 20 22 55 6e 62 69 6e 64 46 75 6e 63       "UnbindFunc
3180: 74 69 6f 6e 73 20 53 75 63 63 65 73 73 3a 20 7b  tions Success: {
3190: 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
31a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b0: 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29  HandleToString()
31c0: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
31d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
31e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31f0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
3200: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23              {..#
3210: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
3220: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
3230: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
3240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
3250: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
3260: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
3270: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
3280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3290: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
32a0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
32b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 62              "Unb
32d0: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 46 61 69  indFunctions Fai
32e0: 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  lure: {0}",..   
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3300: 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53         HandleToS
3310: 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64  tring()));..#end
3320: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
3330: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3340: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3350: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2e 44            _sql.D
3360: 69 73 70 6f 73 65 28 29 3b 0d 0a 0d 0a 20 20 20  ispose();....   
3370: 20 20 20 20 20 20 20 20 20 20 20 46 72 65 65 44             FreeD
3380: 62 4e 61 6d 65 28 21 64 69 73 70 6f 73 69 6e 67  bName(!disposing
3390: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
33a0: 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20  .          _sql 
33b0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d  = null;..      }
33c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
33d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
3430: 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
3440: 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
3450: 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 70  ONNECTION..    p
3460: 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67 20  rotected string 
3470: 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29  HandleToString()
3480: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
3490: 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
34a0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
34b0: 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b  return "<null>";
34c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
34d0: 72 6e 20 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67  rn _sql.ToString
34e0: 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64  ();..    }..#end
34f0: 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  if....    //////
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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3560: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3570: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
3580: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69  the number of ti
3590: 6d 65 73 20 74 68 65 20 3c 73 65 65 20 63 72 65  mes the <see cre
35a0: 66 3d 22 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65  f="Cancel" /> me
35b0: 74 68 6f 64 20 68 61 73 20 62 65 65 6e 0d 0a 20  thod has been.. 
35c0: 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 2e 0d 0a     /// called...
35d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
35e0: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
35f0: 69 6e 74 20 47 65 74 43 61 6e 63 65 6c 43 6f 75  int GetCancelCou
3600: 6e 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nt()..    {..   
3610: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65       return Inte
3620: 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70 61 72 65 45  rlocked.CompareE
3630: 78 63 68 61 6e 67 65 28 72 65 66 20 5f 63 61 6e  xchange(ref _can
3640: 63 65 6c 43 6f 75 6e 74 2c 20 30 2c 20 30 29 3b  celCount, 0, 0);
3650: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
3660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
36c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
36d0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
36e0: 73 20 6d 65 74 68 6f 64 20 64 65 74 65 72 6d 69  s method determi
36f0: 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
3700: 6f 74 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22  ot a <see cref="
3710: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 22  SQLiteException"
3720: 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74   />..    /// wit
3730: 68 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20  h a return code 
3740: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
3750: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e  LiteErrorCode.In
3760: 74 65 72 72 75 70 74 22 20 2f 3e 20 73 68 6f 75  terrupt" /> shou
3770: 6c 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 74  ld..    /// be t
3780: 68 72 6f 77 6e 20 61 66 74 65 72 20 6d 61 6b 69  hrown after maki
3790: 6e 67 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74  ng a call into t
37a0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
37b0: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f  ibrary...    ///
37c0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
37d0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
37e0: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
37f0: 20 69 66 20 61 20 3c 73 65 65 20 63 72 65 66 3d   if a <see cref=
3800: 22 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  "SQLiteException
3810: 22 20 2f 3e 20 74 6f 20 62 65 20 74 68 72 6f 77  " /> to be throw
3820: 6e 2e 20 20 54 68 69 73 20 6d 65 74 68 6f 64 0d  n.  This method.
3830: 0a 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 6f 6e  .    /// will on
3840: 6c 79 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  ly return non-ze
3850: 72 6f 20 69 66 20 74 68 65 20 3c 73 65 65 20 63  ro if the <see c
3860: 72 65 66 3d 22 43 61 6e 63 65 6c 22 20 2f 3e 20  ref="Cancel" /> 
3870: 6d 65 74 68 6f 64 20 77 61 73 20 63 61 6c 6c 65  method was calle
3880: 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f 6e 65 20 6f  d..    /// one o
3890: 72 20 6d 6f 72 65 20 74 69 6d 65 73 20 64 75 72  r more times dur
38a0: 69 6e 67 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20  ing a call into 
38b0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
38c0: 6c 69 62 72 61 72 79 20 28 65 2e 67 2e 20 77 68  library (e.g. wh
38d0: 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20  en..    /// the 
38e0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 2a  sqlite3_prepare*
38f0: 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f 73 74  () or sqlite3_st
3900: 65 70 28 29 20 41 50 49 73 20 61 72 65 20 75 73  ep() APIs are us
3910: 65 64 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ed)...    /// </
3920: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
3930: 69 76 61 74 65 20 62 6f 6f 6c 20 53 68 6f 75 6c  ivate bool Shoul
3940: 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28  dThrowForCancel(
3950: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3960: 20 20 72 65 74 75 72 6e 20 47 65 74 43 61 6e 63    return GetCanc
3970: 65 6c 43 6f 75 6e 74 28 29 20 3e 20 30 3b 0d 0a  elCount() > 0;..
3980: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
39f0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3a00: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 73 65 74  >..    /// Reset
3a10: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
3a20: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 5f 63  he <see cref="_c
3a30: 61 6e 63 65 6c 43 6f 75 6e 74 22 20 2f 3e 20 66  ancelCount" /> f
3a40: 69 65 6c 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ield...    /// <
3a50: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
3a60: 72 69 76 61 74 65 20 69 6e 74 20 52 65 73 65 74  rivate int Reset
3a70: 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d 0a 20  CancelCount().. 
3a80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
3a90: 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64  turn Interlocked
3aa0: 2e 43 6f 6d 70 61 72 65 45 78 63 68 61 6e 67 65  .CompareExchange
3ab0: 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e  (ref _cancelCoun
3ac0: 74 2c 20 30 2c 20 5f 63 61 6e 63 65 6c 43 6f 75  t, 0, _cancelCou
3ad0: 6e 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  nt);..    }.... 
3ae0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
3af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b40: 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
3b50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3b60: 20 41 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 74   Attempts to int
3b70: 65 72 72 75 70 74 20 74 68 65 20 71 75 65 72 79  errupt the query
3b80: 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
3b90: 74 69 6e 67 20 6f 6e 20 74 68 65 20 61 73 73 6f  ting on the asso
3ba0: 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  ciated..    /// 
3bb0: 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65 20  native database 
3bc0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
3bd0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
3be0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
3bf0: 65 72 72 69 64 65 20 76 6f 69 64 20 43 61 6e 63  erride void Canc
3c00: 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  el()..    {..   
3c10: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d     try..      {.
3c20: 0a 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e  .        // do n
3c30: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 7d  othing...      }
3c40: 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20  ..      finally 
3c50: 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
3c60: 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
3c70: 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 7b 0d  on. */..      {.
3c80: 0a 20 20 20 20 20 20 20 20 49 6e 74 65 72 6c 6f  .        Interlo
3c90: 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72  cked.Increment(r
3ca0: 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29  ef _cancelCount)
3cb0: 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ;..        Unsaf
3cc0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3cd0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
3ce0: 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d  (_sql);..      }
3cf0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
3d00: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
3d10: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
3d20: 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73 65 72  ion binds a user
3d30: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
3d40: 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74  n to the connect
3d50: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
3d60: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
3d70: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
3d80: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3d90: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
3da0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3db0: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
3dc0: 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  te"/> object ins
3dd0: 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67  tance containing
3de0: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65  ..    /// the me
3df0: 74 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66  tadata for the f
3e00: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f  unction to be bo
3e10: 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  und...    /// </
3e20: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
3e30: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e  <param name="fun
3e40: 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ction">..    ///
3e50: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
3e60: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 2f  SQLiteFunction"/
3e70: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
3e80: 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  e that implement
3e90: 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 66  s the..    /// f
3ea0: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f  unction to be bo
3eb0: 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  und...    /// </
3ec0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
3ed0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
3ee0: 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  gs">..    /// Th
3ef0: 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
3f00: 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65  ed with the pare
3f10: 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  nt connection ob
3f20: 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
3f30: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
3f40: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
3f50: 6f 69 64 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e  oid BindFunction
3f60: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
3f70: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
3f80: 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  te functionAttri
3f90: 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 53  bute,..        S
3fa0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
3fb0: 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  nction,..       
3fc0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
3fd0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20  nFlags flags..  
3fe0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
3ff0: 20 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63          if (func
4000: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 3d 3d  tionAttribute ==
4010: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4020: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
4030: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
4040: 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 41 74 74  ion("functionAtt
4050: 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20  ribute");....   
4060: 20 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f       if (functio
4070: 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
4080: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
4090: 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
40a0: 63 65 70 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f  ception("functio
40b0: 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
40c0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42  SQLiteFunction.B
40d0: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 74 68 69 73  indFunction(this
40e0: 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  , functionAttrib
40f0: 75 74 65 2c 20 66 75 6e 63 74 69 6f 6e 2c 20 66  ute, function, f
4100: 6c 61 67 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lags);....      
4110: 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73    if (_functions
4120: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
4130: 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e         _function
4140: 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
4150: 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ry<SQLiteFunctio
4160: 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69  nAttribute, SQLi
4170: 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a  teFunction>();..
4180: 0d 0a 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74  ..        _funct
4190: 69 6f 6e 73 5b 66 75 6e 63 74 69 6f 6e 41 74 74  ions[functionAtt
41a0: 72 69 62 75 74 65 5d 20 3d 20 66 75 6e 63 74 69  ribute] = functi
41b0: 6f 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  on;..    }....  
41c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
41d0: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75  .    /// This fu
41e0: 6e 63 74 69 6f 6e 20 62 69 6e 64 73 20 61 20 75  nction binds a u
41f0: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
4200: 74 69 6f 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e  tion to the conn
4210: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
4220: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
4230: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4240: 3d 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  ="functionAttrib
4250: 75 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ute">..    /// T
4260: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
4270: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
4280: 69 62 75 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20  ibute"/> object 
4290: 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e  instance contain
42a0: 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  ing..    /// the
42b0: 20 6d 65 74 61 64 61 74 61 20 66 6f 72 20 74 68   metadata for th
42c0: 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65  e function to be
42d0: 20 75 6e 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f   unbound...    /
42e0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
42f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4300: 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f  ="flags">..    /
4310: 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 61 73 73  // The flags ass
4320: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
4330: 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69   parent connecti
4340: 6f 6e 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  on object...    
4350: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
4360: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 4e    /// <returns>N
4370: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 66  on-zero if the f
4380: 75 6e 63 74 69 6f 6e 20 77 61 73 20 75 6e 62 6f  unction was unbo
4390: 75 6e 64 20 61 6e 64 20 72 65 6d 6f 76 65 64 2e  und and removed.
43a0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
43b0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
43c0: 65 20 62 6f 6f 6c 20 55 6e 62 69 6e 64 46 75 6e  e bool UnbindFun
43d0: 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
43e0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
43f0: 74 72 69 62 75 74 65 20 66 75 6e 63 74 69 6f 6e  tribute function
4400: 41 74 74 72 69 62 75 74 65 2c 0d 0a 20 20 20 20  Attribute,..    
4410: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
4420: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d  tionFlags flags.
4430: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
4440: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 66  {..        if (f
4450: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
4460: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
4470: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
4480: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
4490: 65 70 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e  eption("function
44a0: 41 74 74 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a  Attribute");....
44b0: 20 20 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e          if (_fun
44c0: 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  ctions == null).
44d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
44e0: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
44f0: 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63        SQLiteFunc
4500: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a  tion function;..
4510: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 66  ..        if (_f
4520: 75 6e 63 74 69 6f 6e 73 2e 54 72 79 47 65 74 56  unctions.TryGetV
4530: 61 6c 75 65 28 66 75 6e 63 74 69 6f 6e 41 74 74  alue(functionAtt
4540: 72 69 62 75 74 65 2c 20 6f 75 74 20 66 75 6e 63  ribute, out func
4550: 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20  tion))..        
4560: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
4570: 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  f (SQLiteFunctio
4580: 6e 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e  n.UnbindFunction
4590: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
45a0: 20 20 20 20 20 20 20 74 68 69 73 2c 20 66 75 6e         this, fun
45b0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20  ctionAttribute, 
45c0: 66 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29  function, flags)
45d0: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
45e0: 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e       _functions.
45f0: 52 65 6d 6f 76 65 28 66 75 6e 63 74 69 6f 6e 41  Remove(functionA
4600: 74 74 72 69 62 75 74 65 29 29 0d 0a 20 20 20 20  ttribute))..    
4610: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4620: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4630: 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
4640: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4650: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
4660: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
4670: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4680: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
4690: 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b  g Version..    {
46a0: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
46b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
46c0: 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72 73 69  turn SQLiteVersi
46d0: 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  on;..      }..  
46e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
46f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
4700: 20 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a   VersionNumber..
4710: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
4720: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
4730: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
4740: 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a  VersionNumber;..
4750: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
4760: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
4770: 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 66  tatic string Def
4780: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  ineConstants..  
4790: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
47a0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
47b0: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42           StringB
47c0: 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20  uilder result = 
47d0: 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65  new StringBuilde
47e0: 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  r();..          
47f0: 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20    IList<string> 
4800: 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44 65 66  list = SQLiteDef
4810: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f 70 74  ineConstants.Opt
4820: 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20  ionList;....    
4830: 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 73 74          if (list
4840: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
4850: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4860: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
4870: 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e  h (string elemen
4880: 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20 20 20  t in list)..    
4890: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48b0: 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d     if (element =
48c0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48e0: 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4900: 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e    if (result.Len
4910: 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
4920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4930: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
4940: 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ' ');....       
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
4960: 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65 6d 65  ult.Append(eleme
4970: 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
4980: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4990: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
49a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
49b0: 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  ult.ToString();.
49c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
49d0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
49e0: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
49f0: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20  SQLiteVersion.. 
4a00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
4a10: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
4a20: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
4a30: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
4a40: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4a50: 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c 20  3_libversion(), 
4a60: 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  -1);..      }.. 
4a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4a80: 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e 74 20  rnal static int 
4a90: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d  SQLiteVersionNum
4aa0: 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ber..    {..    
4ab0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
4ac0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
4ad0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4ae0: 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76 65  ds.sqlite3_libve
4af0: 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d  rsion_number();.
4b00: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
4b10: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4b20: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51  static string SQ
4b30: 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20 20  LiteSourceId..  
4b40: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
4b50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4b60: 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
4b70: 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
4b80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
4b90: 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d 31 29  _sourceid(), -1)
4ba0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
4bb0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4bc0: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
4bd0: 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74  SQLiteCompileOpt
4be0: 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ions..    {..   
4bf0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
4c00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4c10: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72   StringBuilder r
4c20: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
4c30: 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20  ngBuilder();..  
4c40: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e            int in
4c50: 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  dex = 0;..      
4c60: 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a 56 61        IntPtr zVa
4c70: 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  lue = UnsafeNati
4c80: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4c90: 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
4ca0: 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d  get(index++);...
4cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69  .            whi
4cc0: 6c 65 20 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e  le (zValue != In
4cd0: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
4ce0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4cf0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
4d00: 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30  esult.Length > 0
4d10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4d20: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
4d30: 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20  pend(' ');....  
4d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4d50: 73 75 6c 74 2e 41 70 70 65 6e 64 28 55 54 46 38  sult.Append(UTF8
4d60: 54 6f 53 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c  ToString(zValue,
4d70: 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20   -1));..        
4d80: 20 20 20 20 20 20 20 20 7a 56 61 6c 75 65 20 3d          zValue =
4d90: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4da0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d  hods.sqlite3_com
4db0: 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69  pileoption_get(i
4dc0: 6e 64 65 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20  ndex++);..      
4dd0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4de0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
4df0: 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b  sult.ToString();
4e00: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
4e10: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
4e20: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
4e30: 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f 6e 0d   InteropVersion.
4e40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4e50: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
4e60: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
4e70: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
4e80: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
4e90: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
4ea0: 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f  veMethods.intero
4eb0: 70 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c 20  p_libversion(), 
4ec0: 2d 31 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  -1);..#else..   
4ed0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4ee0: 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  null;..#endif.. 
4ef0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
4f00: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4f10: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e  static string In
4f20: 74 65 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20  teropSourceId.. 
4f30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
4f40: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  t..        {..#i
4f50: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
4f60: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
4f70: 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
4f80: 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
4f90: 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f  Methods.interop_
4fa0: 73 6f 75 72 63 65 69 64 28 29 2c 20 2d 31 29 3b  sourceid(), -1);
4fb0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
4fc0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
4fd0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
4fe0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4ff0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
5000: 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72 6f  ic string Intero
5010: 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d  pCompileOptions.
5020: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5030: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
5040: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
5050: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
5060: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
5070: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
5080: 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20  ingBuilder();.. 
5090: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
50a0: 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ndex = 0;..     
50b0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a 56         IntPtr zV
50c0: 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74  alue = UnsafeNat
50d0: 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72  iveMethods.inter
50e0: 6f 70 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  op_compileoption
50f0: 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a  _get(index++);..
5100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68  ..            wh
5110: 69 6c 65 20 28 7a 56 61 6c 75 65 20 21 3d 20 49  ile (zValue != I
5120: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
5130: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5140: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5150: 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20  result.Length > 
5160: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
5170: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
5180: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20  ppend(' ');.... 
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
51a0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 55 54 46  esult.Append(UTF
51b0: 38 54 6f 53 74 72 69 6e 67 28 7a 56 61 6c 75 65  8ToString(zValue
51c0: 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  , -1));..       
51d0: 20 20 20 20 20 20 20 20 20 7a 56 61 6c 75 65 20           zValue 
51e0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
51f0: 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f  thods.interop_co
5200: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
5210: 69 6e 64 65 78 2b 2b 29 3b 0d 0a 20 20 20 20 20  index++);..     
5220: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5230: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
5240: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
5250: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
5260: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
5270: 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l;..#endif..    
5280: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
5290: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
52a0: 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74 6f 43  rride bool AutoC
52b0: 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20  ommit..    {..  
52c0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
52d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
52e0: 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 5f 73   IsAutocommit(_s
52f0: 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ql, _sql);..    
5300: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
5310: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
5320: 69 64 65 20 62 6f 6f 6c 20 49 73 52 65 61 64 4f  ide bool IsReadO
5330: 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 73 74  nly(..        st
5340: 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20 20 20  ring name..     
5350: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
5360: 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62 4e       IntPtr pDbN
5370: 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ame = IntPtr.Zer
5380: 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  o;....        tr
5390: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
53a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 61            if (na
53b0: 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
53c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 62               pDb
53d0: 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74 72  Name = SQLiteStr
53e0: 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
53f0: 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29 3b 0d  omString(name);.
5400: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
5410: 6e 74 20 72 65 73 75 6c 74 20 3d 20 55 6e 73 61  nt result = Unsa
5420: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5430: 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 61 64 6f  sqlite3_db_reado
5440: 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  nly(..          
5450: 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 44 62 4e        _sql, pDbN
5460: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
5470: 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 20       if (result 
5480: 3d 3d 20 2d 31 29 20 2f 2a 20 64 61 74 61 62 61  == -1) /* databa
5490: 73 65 20 6e 6f 74 20 66 6f 75 6e 64 20 2a 2f 0d  se not found */.
54a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
54b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54c0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
54d0: 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72  Exception(Helper
54e0: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
54f0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
5500: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
5510: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
5520: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
5530: 20 20 20 20 20 20 20 20 20 20 20 20 22 64 61 74              "dat
5540: 61 62 61 73 65 20 5c 22 7b 30 7d 5c 22 20 6e 6f  abase \"{0}\" no
5550: 74 20 66 6f 75 6e 64 22 2c 20 6e 61 6d 65 29 29  t found", name))
5560: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5570: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5580: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 20 3d 3d  return result ==
5590: 20 30 20 3f 20 66 61 6c 73 65 20 3a 20 74 72 75   0 ? false : tru
55a0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
55b0: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
55c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
55d0: 20 20 20 20 20 20 20 69 66 20 28 70 44 62 4e 61         if (pDbNa
55e0: 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  me != IntPtr.Zer
55f0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
5600: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5610: 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e     SQLiteMemory.
5620: 46 72 65 65 28 70 44 62 4e 61 6d 65 29 3b 0d 0a  Free(pDbName);..
5630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5640: 70 44 62 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72  pDbName = IntPtr
5650: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
5660: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
5670: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
5680: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
5690: 20 6c 6f 6e 67 20 4c 61 73 74 49 6e 73 65 72 74   long LastInsert
56a0: 52 6f 77 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  RowId..    {..  
56b0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
56c0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
56d0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
56e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
56f0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5700: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73  hods.sqlite3_las
5710: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f  t_insert_rowid(_
5720: 73 71 6c 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  sql);..#elif !SQ
5730: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
5740: 20 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 49         long rowI
5750: 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  d = 0;..        
5760: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5770: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74  ods.sqlite3_last
5780: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e  _insert_rowid_in
5790: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 72 65 66 20  terop(_sql, ref 
57a0: 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20  rowId);..       
57b0: 20 72 65 74 75 72 6e 20 72 6f 77 49 64 3b 0d 0a   return rowId;..
57c0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
57d0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
57e0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
57f0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
5800: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
5810: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
5820: 72 69 64 65 20 69 6e 74 20 43 68 61 6e 67 65 73  ride int Changes
5830: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
5840: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66  et..      {..#if
5850: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
5860: 44 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  D..        retur
5870: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
5880: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68  thods.sqlite3_ch
5890: 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28 5f 73  anges_interop(_s
58a0: 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ql);..#else..   
58b0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
58c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
58d0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
58e0: 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  _sql);..#endif..
58f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
5900: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
5910: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d  verride long Mem
5920: 6f 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a  oryUsed..    {..
5930: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
5940: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5950: 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
5960: 63 4d 65 6d 6f 72 79 55 73 65 64 3b 0d 0a 20 20  cMemoryUsed;..  
5970: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
5980: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
5990: 74 61 74 69 63 20 6c 6f 6e 67 20 53 74 61 74 69  tatic long Stati
59a0: 63 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20  cMemoryUsed..   
59b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
59c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
59d0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
59e0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
59f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
5a00: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5a10: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
5a20: 79 5f 75 73 65 64 28 29 3b 0d 0a 23 65 6c 69 66  y_used();..#elif
5a30: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
5a40: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  D..            l
5a50: 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a  ong bytes = 0;..
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
5a70: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5a80: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
5a90: 73 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20  sed_interop(ref 
5aa0: 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  bytes);..       
5ab0: 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65       return byte
5ac0: 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  s;..#else..     
5ad0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
5ae0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
5af0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
5b00: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
5b10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
5b20: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
5b30: 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61  ong MemoryHighwa
5b40: 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ter..    {..    
5b50: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
5b60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5b70: 72 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65 6d  return StaticMem
5b80: 6f 72 79 48 69 67 68 77 61 74 65 72 3b 0d 0a 20  oryHighwater;.. 
5b90: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
5ba0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
5bb0: 73 74 61 74 69 63 20 6c 6f 6e 67 20 53 74 61 74  static long Stat
5bc0: 69 63 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65  icMemoryHighwate
5bd0: 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  r..    {..      
5be0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
5bf0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
5c00: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
5c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
5c20: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
5c30: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5c40: 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
5c50: 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  r(0);..#elif !SQ
5c60: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
5c70: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
5c80: 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  bytes = 0;..    
5c90: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
5ca0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5cb0: 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
5cc0: 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 30 2c 20  ater_interop(0, 
5cd0: 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20  ref bytes);..   
5ce0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5cf0: 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20  bytes;..#else.. 
5d00: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
5d10: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
5d20: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
5d30: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
5d40: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
5d50: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5d60: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
5d70: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
5d80: 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61 74 69 76  underlying nativ
5d90: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
5da0: 64 6c 65 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20  dle is owned..  
5db0: 20 20 2f 2f 2f 20 62 79 20 74 68 69 73 20 69 6e    /// by this in
5dc0: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
5dd0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5de0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5df0: 64 65 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c  de bool OwnHandl
5e00: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
5e10: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
5e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
5e30: 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
5e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5e50: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
5e60: 65 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63  eException("no c
5e70: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
5e80: 20 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d   available");...
5e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5ea0: 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64  urn _sql.OwnHand
5eb0: 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  le;..        }..
5ec0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
5ed0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5ee0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
5ef0: 6c 6f 67 69 63 61 6c 20 6c 69 73 74 20 6f 66 20  logical list of 
5f00: 66 75 6e 63 74 69 6f 6e 73 20 61 73 73 6f 63 69  functions associ
5f10: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 63  ated with this c
5f20: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
5f30: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5f40: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
5f50: 72 72 69 64 65 20 49 44 69 63 74 69 6f 6e 61 72  rride IDictionar
5f60: 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  y<SQLiteFunction
5f70: 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74  Attribute, SQLit
5f80: 65 46 75 6e 63 74 69 6f 6e 3e 20 46 75 6e 63 74  eFunction> Funct
5f90: 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ions..    {..   
5fa0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
5fb0: 6e 20 5f 66 75 6e 63 74 69 6f 6e 73 3b 20 7d 0d  n _functions; }.
5fc0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5fd0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5fe0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
5ff0: 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28  SetMemoryStatus(
6000: 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20  bool value)..   
6010: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
6020: 72 6e 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f  rn StaticSetMemo
6030: 72 79 53 74 61 74 75 73 28 76 61 6c 75 65 29 3b  ryStatus(value);
6040: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
6050: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53  nternal static S
6060: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
6070: 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74  taticSetMemorySt
6080: 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29  atus(bool value)
6090: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
60a0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
60b0: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
60c0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
60d0: 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20  3_config_int(.. 
60e0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
60f0: 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53  eConfigOpsEnum.S
6100: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
6110: 53 54 41 54 55 53 2c 20 76 61 6c 75 65 20 3f 20  STATUS, value ? 
6120: 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20  1 : 0);....     
6130: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
6140: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
6150: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
6160: 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 66  // Attempts to f
6170: 72 65 65 20 61 73 20 6d 75 63 68 20 68 65 61 70  ree as much heap
6180: 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73 73 69   memory as possi
6190: 62 6c 65 20 66 6f 72 20 74 68 65 20 64 61 74 61  ble for the data
61a0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
61b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
61c0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
61d0: 65 74 75 72 6e 73 3e 41 20 73 74 61 6e 64 61 72  eturns>A standar
61e0: 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
61f0: 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72 6f 20  code (i.e. zero 
6200: 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e 64 20  for success and 
6210: 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 66 61 69  non-zero for fai
6220: 6c 75 72 65 29 2e 3c 2f 72 65 74 75 72 6e 73 3e  lure).</returns>
6230: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
6240: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
6250: 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73 65 4d  rorCode ReleaseM
6260: 65 6d 6f 72 79 28 29 0d 0a 20 20 20 20 7b 0d 0a  emory()..    {..
6270: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
6280: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
6290: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
62a0: 2e 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65  .sqlite3_db_rele
62b0: 61 73 65 5f 6d 65 6d 6f 72 79 28 5f 73 71 6c 29  ase_memory(_sql)
62c0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
62d0: 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n rc;..    }....
62e0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
62f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d  >..    /// Attem
6300: 70 74 73 20 74 6f 20 66 72 65 65 20 4e 20 62 79  pts to free N by
6310: 74 65 73 20 6f 66 20 68 65 61 70 20 6d 65 6d 6f  tes of heap memo
6320: 72 79 20 62 79 20 64 65 61 6c 6c 6f 63 61 74 69  ry by deallocati
6330: 6e 67 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c  ng non-essential
6340: 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 2f 2f 2f   memory..    ///
6350: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 68 65 6c   allocations hel
6360: 64 20 62 79 20 74 68 65 20 64 61 74 61 62 61 73  d by the databas
6370: 65 20 6c 69 62 72 61 72 79 2e 20 4d 65 6d 6f 72  e library. Memor
6380: 79 20 75 73 65 64 20 74 6f 20 63 61 63 68 65 20  y used to cache 
6390: 64 61 74 61 62 61 73 65 20 70 61 67 65 73 0d 0a  database pages..
63a0: 20 20 20 20 2f 2f 2f 20 74 6f 20 69 6d 70 72 6f      /// to impro
63b0: 76 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69  ve performance i
63c0: 73 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20  s an example of 
63d0: 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65  non-essential me
63e0: 6d 6f 72 79 2e 20 20 54 68 69 73 20 69 73 20 61  mory.  This is a
63f0: 20 6e 6f 2d 6f 70 0d 0a 20 20 20 20 2f 2f 2f 20   no-op..    /// 
6400: 72 65 74 75 72 6e 69 6e 67 20 7a 65 72 6f 20 69  returning zero i
6410: 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
6420: 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 6e 6f  e library was no
6430: 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  t compiled with 
6440: 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  the compile-time
6450: 0d 0a 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e  ..    /// option
6460: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
6470: 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
6480: 2e 20 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20 61  .  Optionally, a
6490: 74 74 65 6d 70 74 73 20 74 6f 20 72 65 73 65 74  ttempts to reset
64a0: 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 2f 2f 2f   and/or..    ///
64b0: 20 63 6f 6d 70 61 63 74 20 74 68 65 20 57 69 6e   compact the Win
64c0: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 2c 20  32 native heap, 
64d0: 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e 0d 0a  if applicable...
64e0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
64f0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
6500: 61 6d 20 6e 61 6d 65 3d 22 6e 42 79 74 65 73 22  am name="nBytes"
6510: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 72  >..    /// The r
6520: 65 71 75 65 73 74 65 64 20 6e 75 6d 62 65 72 20  equested number 
6530: 6f 66 20 62 79 74 65 73 20 74 6f 20 66 72 65 65  of bytes to free
6540: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
6550: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
6560: 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74 22  ram name="reset"
6570: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  >..    /// Non-z
6580: 65 72 6f 20 74 6f 20 61 74 74 65 6d 70 74 20 61  ero to attempt a
6590: 20 68 65 61 70 20 72 65 73 65 74 2e 0d 0a 20 20   heap reset...  
65a0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
65b0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
65c0: 61 6d 65 3d 22 63 6f 6d 70 61 63 74 22 3e 0d 0a  ame="compact">..
65d0: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
65e0: 20 74 6f 20 61 74 74 65 6d 70 74 20 68 65 61 70   to attempt heap
65f0: 20 63 6f 6d 70 61 63 74 69 6f 6e 2e 0d 0a 20 20   compaction...  
6600: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
6610: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
6620: 61 6d 65 3d 22 6e 46 72 65 65 22 3e 0d 0a 20 20  ame="nFree">..  
6630: 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
6640: 20 6f 66 20 62 79 74 65 73 20 61 63 74 75 61 6c   of bytes actual
6650: 6c 79 20 66 72 65 65 64 2e 20 20 54 68 69 73 20  ly freed.  This 
6660: 76 61 6c 75 65 20 6d 61 79 20 62 65 20 7a 65 72  value may be zer
6670: 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  o...    /// </pa
6680: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
6690: 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74  aram name="reset
66a0: 4f 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  Ok">..    /// Th
66b0: 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  is value will be
66c0: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
66d0: 20 68 65 61 70 20 72 65 73 65 74 20 77 61 73 20   heap reset was 
66e0: 73 75 63 63 65 73 73 66 75 6c 2e 0d 0a 20 20 20  successful...   
66f0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
6700: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6710: 6d 65 3d 22 6e 4c 61 72 67 65 73 74 22 3e 0d 0a  me="nLargest">..
6720: 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65      /// The size
6730: 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   of the largest 
6740: 63 6f 6d 6d 69 74 74 65 64 20 66 72 65 65 20 62  committed free b
6750: 6c 6f 63 6b 20 69 6e 20 74 68 65 20 68 65 61 70  lock in the heap
6760: 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20  , in bytes...   
6770: 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20   /// This value 
6780: 77 69 6c 6c 20 62 65 20 7a 65 72 6f 20 75 6e 6c  will be zero unl
6790: 65 73 73 20 68 65 61 70 20 63 6f 6d 70 61 63 74  ess heap compact
67a0: 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d  ion is enabled..
67b0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
67c0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
67d0: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
67e0: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
67f0: 72 65 74 75 72 6e 20 63 6f 64 65 20 28 69 2e 65  return code (i.e
6800: 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75 63 63 65  . zero for succe
6810: 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 0d  ss and non-zero.
6820: 0a 20 20 20 20 2f 2f 2f 20 66 6f 72 20 66 61 69  .    /// for fai
6830: 6c 75 72 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lure)...    /// 
6840: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
6850: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
6860: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6870: 53 74 61 74 69 63 52 65 6c 65 61 73 65 4d 65 6d  StaticReleaseMem
6880: 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 69 6e  ory(..        in
6890: 74 20 6e 42 79 74 65 73 2c 0d 0a 20 20 20 20 20  t nBytes,..     
68a0: 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a     bool reset,..
68b0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
68c0: 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 72  pact,..        r
68d0: 65 66 20 69 6e 74 20 6e 46 72 65 65 2c 0d 0a 20  ef int nFree,.. 
68e0: 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
68f0: 72 65 73 65 74 4f 6b 2c 0d 0a 20 20 20 20 20 20  resetOk,..      
6900: 20 20 72 65 66 20 75 69 6e 74 20 6e 4c 61 72 67    ref uint nLarg
6910: 65 73 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  est..        )..
6920: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
6930: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
6940: 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  c = SQLiteErrorC
6950: 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20  ode.Ok;....     
6960: 20 20 20 69 6e 74 20 6e 46 72 65 65 4c 6f 63 61     int nFreeLoca
6970: 6c 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  l = UnsafeNative
6980: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6990: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6e  release_memory(n
69a0: 42 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  Bytes);..       
69b0: 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74 4c 6f   uint nLargestLo
69c0: 63 61 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  cal = 0;..      
69d0: 20 20 62 6f 6f 6c 20 72 65 73 65 74 4f 6b 4c 6f    bool resetOkLo
69e0: 63 61 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  cal = false;....
69f0: 23 69 66 20 21 44 45 42 55 47 20 26 26 20 57 49  #if !DEBUG && WI
6a00: 4e 44 4f 57 53 20 2f 2f 20 4e 4f 54 45 3a 20 53  NDOWS // NOTE: S
6a10: 68 6f 75 6c 64 20 62 65 20 22 57 49 4e 33 32 48  hould be "WIN32H
6a20: 45 41 50 20 26 26 20 21 4d 45 4d 44 45 42 55 47  EAP && !MEMDEBUG
6a30: 20 26 26 20 57 49 4e 44 4f 57 53 22 0d 0a 20 20   && WINDOWS"..  
6a40: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
6a50: 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e 64 6f 77  Methods.IsWindow
6a60: 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  s())..        {.
6a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
6a80: 28 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72  ((rc == SQLiteEr
6a90: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 72  rorCode.Ok) && r
6aa0: 65 73 65 74 29 0d 0a 20 20 20 20 20 20 20 20 20  eset)..         
6ab0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6ac0: 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
6ad0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6ae0: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 72 65 73  qlite3_win32_res
6af0: 65 74 5f 68 65 61 70 28 29 3b 0d 0a 0d 0a 20 20  et_heap();....  
6b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
6b10: 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72   (rc == SQLiteEr
6b20: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b40: 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 20 3d 20   resetOkLocal = 
6b50: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
6b60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6b70: 20 20 20 20 69 66 20 28 28 72 63 20 3d 3d 20 53      if ((rc == S
6b80: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6b90: 6b 29 20 26 26 20 63 6f 6d 70 61 63 74 29 0d 0a  k) && compact)..
6ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6bb0: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
6bc0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6bd0: 5f 77 69 6e 33 32 5f 63 6f 6d 70 61 63 74 5f 68  _win32_compact_h
6be0: 65 61 70 28 72 65 66 20 6e 4c 61 72 67 65 73 74  eap(ref nLargest
6bf0: 4c 6f 63 61 6c 29 3b 0d 0a 20 20 20 20 20 20 20  Local);..       
6c00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
6c10: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
6c20: 20 20 69 66 20 28 72 65 73 65 74 20 7c 7c 20 63    if (reset || c
6c30: 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20  ompact)..       
6c40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6c50: 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  rc = SQLiteError
6c60: 43 6f 64 65 2e 4e 6f 74 46 6f 75 6e 64 3b 0d 0a  Code.NotFound;..
6c70: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6c80: 20 20 20 20 20 6e 46 72 65 65 20 3d 20 6e 46 72       nFree = nFr
6c90: 65 65 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20 20 20  eeLocal;..      
6ca0: 20 20 6e 4c 61 72 67 65 73 74 20 3d 20 6e 4c 61    nLargest = nLa
6cb0: 72 67 65 73 74 4c 6f 63 61 6c 3b 0d 0a 20 20 20  rgestLocal;..   
6cc0: 20 20 20 20 20 72 65 73 65 74 4f 6b 20 3d 20 72       resetOk = r
6cd0: 65 73 65 74 4f 6b 4c 6f 63 61 6c 3b 0d 0a 0d 0a  esetOkLocal;....
6ce0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
6cf0: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
6d00: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6d10: 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e      /// Shutdown
6d20: 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69   the SQLite engi
6d30: 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ne so that it ca
6d40: 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77  n be restarted w
6d50: 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d 0a 20  ith different.. 
6d60: 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61     /// configura
6d70: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 20 57  tion options.  W
6d80: 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f  e depend on auto
6d90: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
6da0: 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20  to recover...   
6db0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6dc0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
6dd0: 73 3e 52 65 74 75 72 6e 73 20 61 20 73 74 61 6e  s>Returns a stan
6de0: 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 73 75  dard SQLite resu
6df0: 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75 72 6e  lt code.</return
6e00: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
6e10: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
6e20: 45 72 72 6f 72 43 6f 64 65 20 53 68 75 74 64 6f  ErrorCode Shutdo
6e30: 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  wn()..    {..   
6e40: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74       return Stat
6e50: 69 63 53 68 75 74 64 6f 77 6e 28 66 61 6c 73 65  icShutdown(false
6e60: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6e70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6e80: 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e      /// Shutdown
6e90: 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69   the SQLite engi
6ea0: 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ne so that it ca
6eb0: 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77  n be restarted w
6ec0: 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d 0a 20  ith different.. 
6ed0: 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61     /// configura
6ee0: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 20 57  tion options.  W
6ef0: 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f  e depend on auto
6f00: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
6f10: 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20  to recover...   
6f20: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6f30: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6f40: 6e 61 6d 65 3d 22 64 69 72 65 63 74 6f 72 69 65  name="directorie
6f50: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  s">..    /// Non
6f60: 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65 74 20 74  -zero to reset t
6f70: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
6f80: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
6f90: 6f 72 69 65 73 20 74 6f 20 74 68 65 69 72 0d 0a  ories to their..
6fa0: 20 20 20 20 2f 2f 2f 20 64 65 66 61 75 6c 74 20      /// default 
6fb0: 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68  values, which sh
6fc0: 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72  ould be null for
6fd0: 20 62 6f 74 68 2e 20 20 54 68 69 73 20 70 61 72   both.  This par
6fe0: 61 6d 65 74 65 72 20 68 61 73 20 6e 6f 0d 0a 20  ameter has no.. 
6ff0: 20 20 20 2f 2f 2f 20 65 66 66 65 63 74 20 6f 6e     /// effect on
7000: 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73 20 6f 70 65   non-Windows ope
7010: 72 61 74 69 6e 67 20 73 79 73 74 65 6d 73 2e 0d  rating systems..
7020: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
7030: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
7040: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 73 74  rns>Returns a st
7050: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
7060: 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75  sult code.</retu
7070: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
7080: 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65  al static SQLite
7090: 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69 63  ErrorCode Static
70a0: 53 68 75 74 64 6f 77 6e 28 0d 0a 20 20 20 20 20  Shutdown(..     
70b0: 20 20 20 62 6f 6f 6c 20 64 69 72 65 63 74 6f 72     bool director
70c0: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ies..        )..
70d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
70e0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
70f0: 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  c = SQLiteErrorC
7100: 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20  ode.Ok;....     
7110: 20 20 20 69 66 20 28 64 69 72 65 63 74 6f 72 69     if (directori
7120: 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  es)..        {..
7130: 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20  #if WINDOWS..   
7140: 20 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c           if (Hel
7150: 70 65 72 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e  perMethods.IsWin
7160: 64 6f 77 73 28 29 29 0d 0a 20 20 20 20 20 20 20  dows())..       
7170: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7180: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
7190: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
71a0: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
71b0: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
71c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
71d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33  ods.sqlite3_win3
71e0: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28  2_set_directory(
71f0: 31 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  1, null);....   
7200: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7210: 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
7220: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
7230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7240: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
7250: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7260: 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
7270: 74 6f 72 79 28 32 2c 20 6e 75 6c 6c 29 3b 0d 0a  tory(2, null);..
7280: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7290: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
72a0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
72b0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54       {..#if !NET
72c0: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
72d0: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
72e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
72f0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
7300: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7310: 20 20 20 20 20 20 20 22 53 68 75 74 64 6f 77 6e         "Shutdown
7320: 3a 20 43 61 6e 6e 6f 74 20 72 65 73 65 74 20 64  : Cannot reset d
7330: 69 72 65 63 74 6f 72 69 65 73 20 6f 6e 20 74 68  irectories on th
7340: 69 73 20 70 6c 61 74 66 6f 72 6d 2e 22 29 3b 0d  is platform.");.
7350: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
7360: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7370: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
7380: 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
7390: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
73a0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73          rc = Uns
73b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
73c0: 2e 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77  .sqlite3_shutdow
73d0: 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
73e0: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
73f0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
7400: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
7410: 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68  Determines if th
7420: 65 20 61 73 73 6f 63 69 61 74 65 64 20 6e 61 74  e associated nat
7430: 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ive connection h
7440: 61 6e 64 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a  andle is open...
7450: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7460: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
7470: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
7480: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 61  on-zero if the a
7490: 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65  ssociated native
74a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
74b0: 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20  le is open...   
74c0: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
74d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
74e0: 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4f 70  erride bool IsOp
74f0: 65 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  en()..    {..   
7500: 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f 73 71       return (_sq
7510: 6c 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 21 5f  l != null) && !_
7520: 73 71 6c 2e 49 73 49 6e 76 61 6c 69 64 20 26 26  sql.IsInvalid &&
7530: 20 21 5f 73 71 6c 2e 49 73 43 6c 6f 73 65 64 3b   !_sql.IsClosed;
7540: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
7550: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
7560: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
7570: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65  e fully qualifie
7580: 64 20 70 61 74 68 20 61 6e 64 20 66 69 6c 65 20  d path and file 
7590: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 75 72  name for the cur
75a0: 72 65 6e 74 6c 79 20 6f 70 65 6e 0d 0a 20 20 20  rently open..   
75b0: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 2c 20 69   /// database, i
75c0: 66 20 61 6e 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  f any...    /// 
75d0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
75e0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
75f0: 22 64 62 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f  "dbName">..    /
7600: 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
7610: 68 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61  he attached data
7620: 62 61 73 65 20 74 6f 20 71 75 65 72 79 2e 0d 0a  base to query...
7630: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
7640: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
7650: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
7660: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
7670: 20 70 61 74 68 20 61 6e 64 20 66 69 6c 65 20 6e   path and file n
7680: 61 6d 65 20 66 6f 72 20 74 68 65 20 63 75 72 72  ame for the curr
7690: 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
76a0: 61 73 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 66  ase,..    /// if
76b0: 20 61 6e 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c   any...    /// <
76c0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
76d0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
76e0: 20 73 74 72 69 6e 67 20 47 65 74 46 69 6c 65 4e   string GetFileN
76f0: 61 6d 65 28 73 74 72 69 6e 67 20 64 62 4e 61 6d  ame(string dbNam
7700: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
7710: 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
7720: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7730: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
7740: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
7750: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
7760: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7770: 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c  s.sqlite3_db_fil
7780: 65 6e 61 6d 65 5f 62 79 74 65 73 28 0d 0a 20 20  ename_bytes(..  
7790: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
77a0: 54 6f 55 54 46 38 28 64 62 4e 61 6d 65 29 29 2c  ToUTF8(dbName)),
77b0: 20 2d 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   -1);..    }....
77c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
77d0: 72 72 69 64 65 20 76 6f 69 64 20 4f 70 65 6e 28  rride void Open(
77e0: 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65 6e 61  string strFilena
77f0: 6d 65 2c 20 73 74 72 69 6e 67 20 76 66 73 4e 61  me, string vfsNa
7800: 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  me, SQLiteConnec
7810: 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65 63  tionFlags connec
7820: 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69 74  tionFlags, SQLit
7830: 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20 6f  eOpenFlagsEnum o
7840: 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d 61  penFlags, int ma
7850: 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20  xPoolSize, bool 
7860: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d  usePool)..    {.
7870: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
7880: 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
7890: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
78a0: 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
78b0: 79 20 6f 70 65 6e 2c 20 61 74 74 65 6d 70 74 20  y open, attempt 
78c0: 74 6f 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  to..      //    
78d0: 20 20 20 63 6c 6f 73 65 20 69 74 20 6e 6f 77 2e     close it now.
78e0: 20 20 54 68 69 73 20 6d 75 73 74 20 62 65 20 64    This must be d
78f0: 6f 6e 65 20 62 65 63 61 75 73 65 20 74 68 65 20  one because the 
7900: 66 69 6c 65 20 6e 61 6d 65 20 6f 72 0d 0a 20 20  file name or..  
7910: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68      //       oth
7920: 65 72 20 70 61 72 61 6d 65 74 65 72 73 20 74 68  er parameters th
7930: 61 74 20 6d 61 79 20 69 6d 70 61 63 74 20 74 68  at may impact th
7940: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
7950: 61 62 61 73 65 0d 0a 20 20 20 20 20 20 2f 2f 20  abase..      // 
7960: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
7970: 20 6d 61 79 20 68 61 76 65 20 63 68 61 6e 67 65   may have change
7980: 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  d...      //..  
7990: 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20      if (_sql != 
79a0: 6e 75 6c 6c 29 20 43 6c 6f 73 65 28 66 61 6c 73  null) Close(fals
79b0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d  e);....      //.
79c0: 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20  .      // NOTE: 
79d0: 49 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  If the connectio
79e0: 6e 20 77 61 73 20 6e 6f 74 20 63 6c 6f 73 65 64  n was not closed
79f0: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2c 20 74   successfully, t
7a00: 68 72 6f 77 20 61 6e 0d 0a 20 20 20 20 20 20 2f  hrow an..      /
7a10: 2f 20 20 20 20 20 20 20 65 78 63 65 70 74 69 6f  /       exceptio
7a20: 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 2f 2f  n now...      //
7a30: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c  ..      if (_sql
7a40: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
7a50: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
7a60: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22  QLiteException("
7a70: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
7a80: 65 20 69 73 20 73 74 69 6c 6c 20 61 63 74 69 76  e is still activ
7a90: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 75  e");....      _u
7aa0: 73 65 50 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c  sePool = usePool
7ab0: 3b 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65 4e 61  ;..      _fileNa
7ac0: 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65  me = strFilename
7ad0: 3b 0d 0a 20 20 20 20 20 20 5f 66 6c 61 67 73 20  ;..      _flags 
7ae0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  = connectionFlag
7af0: 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  s;....      if (
7b00: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20  usePool)..      
7b10: 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 20  {..        _sql 
7b20: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7b30: 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73 74  onPool.Remove(st
7b40: 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50 6f  rFilename, maxPo
7b50: 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f  olSize, out _poo
7b60: 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20  lVersion);....  
7b70: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
7b80: 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64  ection.OnChanged
7b90: 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65  (null, new Conne
7ba0: 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d  ctionEventArgs(.
7bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
7bc0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  iteConnectionEve
7bd0: 6e 74 54 79 70 65 2e 4f 70 65 6e 65 64 46 72 6f  ntType.OpenedFro
7be0: 6d 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c  mPool, null, nul
7bf0: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
7c00: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c  null, null, _sql
7c10: 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e  , strFilename, n
7c20: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20  ew object[] {.. 
7c30: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
7c40: 66 28 53 51 4c 69 74 65 33 29 2c 20 73 74 72 46  f(SQLite3), strF
7c50: 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65  ilename, vfsName
7c60: 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  , connectionFlag
7c70: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
7c80: 6f 70 65 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f  openFlags, maxPo
7c90: 6f 6c 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 2c  olSize, usePool,
7ca0: 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29   _poolVersion })
7cb0: 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  );....#if !NET_C
7cc0: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
7cd0: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
7ce0: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
7cf0: 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74  teLine(HelperMet
7d00: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
7d10: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
7d20: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
7d30: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
7d40: 20 20 20 20 20 20 20 20 20 22 4f 70 65 6e 20 28           "Open (
7d50: 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 48 61 6e  Pool): {0}", Han
7d60: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
7d70: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
7d80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  }....      if (_
7d90: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
7da0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
7db0: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
7dc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
7dd0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
7de0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
7df0: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
7e00: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
7e10: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
7e20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7e30: 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20 49     IntPtr db = I
7e40: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
7e50: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
7e60: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
7e70: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
7e80: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  D..          int
7e90: 20 65 78 74 46 75 6e 63 73 20 3d 20 28 28 63 6f   extFuncs = ((co
7ea0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26 20  nnectionFlags & 
7eb0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7ec0: 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f  Flags.NoExtensio
7ed0: 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53  nFunctions) != S
7ee0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7ef0: 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e  lags.NoExtension
7f00: 46 75 6e 63 74 69 6f 6e 73 29 20 3f 20 31 20 3a  Functions) ? 1 :
7f10: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
7f20: 20 69 66 20 28 65 78 74 46 75 6e 63 73 20 21 3d   if (extFuncs !=
7f30: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b   0)..          {
7f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
7f50: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7f60: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70  thods.sqlite3_op
7f70: 65 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54 46  en_interop(ToUTF
7f80: 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20  8(strFilename), 
7f90: 54 6f 55 54 46 38 28 76 66 73 4e 61 6d 65 29 2c  ToUTF8(vfsName),
7fa0: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 65 78 74 46   openFlags, extF
7fb0: 75 6e 63 73 2c 20 72 65 66 20 64 62 29 3b 0d 0a  uncs, ref db);..
7fc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7fd0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e         else..#en
7fe0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  dif..          {
7ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
8000: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
8010: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70  thods.sqlite3_op
8020: 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74 72  en_v2(ToUTF8(str
8030: 46 69 6c 65 6e 61 6d 65 29 2c 20 72 65 66 20 64  Filename), ref d
8040: 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 54 6f  b, openFlags, To
8050: 55 54 46 38 28 76 66 73 4e 61 6d 65 29 29 3b 0d  UTF8(vfsName));.
8060: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
8070: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
8080: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
8090: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
80a0: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
80b0: 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
80c0: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
80e0: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
80f0: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
8100: 20 20 20 20 20 20 20 20 20 22 4f 70 65 6e 3a 20           "Open: 
8110: 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e  {0}", db));..#en
8120: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  dif....         
8130: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
8140: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
8150: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8160: 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29  ception(n, null)
8170: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71  ;..          _sq
8180: 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  l = new SQLiteCo
8190: 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64  nnectionHandle(d
81a0: 62 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20  b, true);..     
81b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 6c 6f     }..        lo
81c0: 63 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a 20 48  ck (_sql) { /* H
81d0: 41 43 4b 3a 20 46 6f 72 63 65 20 74 68 65 20 53  ACK: Force the S
81e0: 79 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65 20 22  yncBlock to be "
81f0: 63 72 65 61 74 65 64 22 20 6e 6f 77 2e 20 2a 2f  created" now. */
8200: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51   }....        SQ
8210: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f  LiteConnection.O
8220: 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e  nChanged(null, n
8230: 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  ew ConnectionEve
8240: 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
8250: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
8260: 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e  ctionEventType.N
8270: 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65  ewCriticalHandle
8280: 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
8290: 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c       null, null,
82a0: 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74 72   null, _sql, str
82b0: 46 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f 62  Filename, new ob
82c0: 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ject[] {..      
82d0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
82e0: 69 74 65 33 29 2c 20 73 74 72 46 69 6c 65 6e 61  ite3), strFilena
82f0: 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 63 6f 6e  me, vfsName, con
8300: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a 20  nectionFlags,.. 
8310: 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e 46             openF
8320: 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a  lags, maxPoolSiz
8330: 65 2c 20 75 73 65 50 6f 6f 6c 20 7d 29 29 3b 0d  e, usePool }));.
8340: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
8350: 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69    // Bind functi
8360: 6f 6e 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e  ons to this conn
8370: 65 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20  ection.  If any 
8380: 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f  previous functio
8390: 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e  ns of the same n
83a0: 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65  ame..      // we
83b0: 72 65 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64  re already bound
83c0: 2c 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62  , then the new b
83d0: 69 6e 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20  indings replace 
83e0: 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20  the old...      
83f0: 69 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46  if ((connectionF
8400: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
8410: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42  nectionFlags.NoB
8420: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d  indFunctions) !=
8430: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8440: 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e  nFlags.NoBindFun
8450: 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 7b  ctions)..      {
8460: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
8470: 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75  _functions == nu
8480: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
8490: 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20     _functions = 
84a0: 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 53  new Dictionary<S
84b0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
84c0: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
84d0: 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20  nction>();....  
84e0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
84f0: 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 53 51  (KeyValuePair<SQ
8500: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
8510: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
8520: 63 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20 20 20  ction> pair..   
8530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8540: 6e 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  n SQLiteFunction
8550: 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74  .BindFunctions(t
8560: 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46  his, connectionF
8570: 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  lags))..        
8580: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8590: 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 70 61     _functions[pa
85a0: 69 72 2e 4b 65 79 5d 20 3d 20 70 61 69 72 2e 56  ir.Key] = pair.V
85b0: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
85c0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }.... 
85d0: 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75 74 28       SetTimeout(
85e0: 30 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e 4b 65  0);..      GC.Ke
85f0: 65 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b 0d 0a  epAlive(_sql);..
8600: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
8610: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
8620: 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29 0d  oid ClearPool().
8630: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
8640: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f  LiteConnectionPo
8650: 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66 69  ol.ClearPool(_fi
8660: 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d  leName);..    }.
8670: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8680: 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 75  override int Cou
8690: 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d  ntPool()..    {.
86a0: 0a 20 20 20 20 20 20 20 20 44 69 63 74 69 6f 6e  .        Diction
86b0: 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e  ary<string, int>
86c0: 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b 0d   counts = null;.
86d0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70 65  .        int ope
86e0: 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20  nCount = 0;..   
86f0: 20 20 20 20 20 69 6e 74 20 63 6c 6f 73 65 43 6f       int closeCo
8700: 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  unt = 0;..      
8710: 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e 74    int totalCount
8720: 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   = 0;....       
8730: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8740: 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73 28  nPool.GetCounts(
8750: 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  _fileName,..    
8760: 20 20 20 20 20 20 20 20 72 65 66 20 63 6f 75 6e          ref coun
8770: 74 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f 75 6e  ts, ref openCoun
8780: 74 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f 75 6e  t, ref closeCoun
8790: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
87a0: 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74 29 3b  ref totalCount);
87b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
87c0: 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d 0a  rn totalCount;..
87d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
87e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
87f0: 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28 69  oid SetTimeout(i
8800: 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a  nt nTimeoutMS)..
8810: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74      {..      Int
8820: 50 74 72 20 64 62 20 3d 20 5f 73 71 6c 3b 0d 0a  Ptr db = _sql;..
8830: 20 20 20 20 20 20 69 66 20 28 64 62 20 3d 3d 20        if (db == 
8840: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 74 68 72  IntPtr.Zero) thr
8850: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
8860: 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65  eption("no conne
8870: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76 61  ction handle ava
8880: 69 6c 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20  ilable");..     
8890: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
88a0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
88b0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
88c0: 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62  _busy_timeout(db
88d0: 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a  , nTimeoutMS);..
88e0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
88f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
8900: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
8910: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
8920: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
8930: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8940: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8950: 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74   bool Step(SQLit
8960: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29  eStatement stmt)
8970: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
8980: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
8990: 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20  ;..      Random 
89a0: 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  rnd = null;..   
89b0: 20 20 20 75 69 6e 74 20 73 74 61 72 74 74 69 63     uint starttic
89c0: 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f  k = (uint)Enviro
89d0: 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b  nment.TickCount;
89e0: 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 74 69 6d  ..      uint tim
89f0: 65 6f 75 74 20 3d 20 28 75 69 6e 74 29 28 73 74  eout = (uint)(st
8a00: 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d  mt._command._com
8a10: 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30  mandTimeout * 10
8a20: 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65  00);....      Re
8a30: 73 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29  setCancelCount()
8a40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65  ;....      while
8a50: 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b   (true)..      {
8a60: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
8a70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8a80: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
8a90: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
8aa0: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
8ab0: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
8ac0: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
8ad0: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
8ae0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20   {..          n 
8af0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
8b00: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 74  thods.sqlite3_st
8b10: 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  ep(stmt._sqlite_
8b20: 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  stmt);..        
8b30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
8b40: 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72 43  (ShouldThrowForC
8b50: 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20 20  ancel())..      
8b60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8b70: 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74   if ((n == SQLit
8b80: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c  eErrorCode.Ok) |
8b90: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
8ba0: 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45     (n == SQLiteE
8bb0: 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c  rrorCode.Row) ||
8bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8bd0: 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72    (n == SQLiteEr
8be0: 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a  rorCode.Done))..
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
8c10: 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
8c20: 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20  de.Interrupt;.. 
8c30: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
8c50: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
8c60: 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d  ption(n, null);.
8c70: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
8c80: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
8c90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49  QLiteErrorCode.I
8ca0: 6e 74 65 72 72 75 70 74 29 20 72 65 74 75 72 6e  nterrupt) return
8cb0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
8cc0: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
8cd0: 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 72  ErrorCode.Row) r
8ce0: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
8cf0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
8d00: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f  LiteErrorCode.Do
8d10: 6e 65 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65  ne) return false
8d20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
8d30: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
8d40: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
8d50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8d60: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
8d70: 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  r;....          
8d80: 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63 63 75  // An error occu
8d90: 72 72 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f  rred, attempt to
8da0: 20 72 65 73 65 74 20 74 68 65 20 73 74 61 74 65   reset the state
8db0: 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20 72 65  ment.  If the re
8dc0: 73 65 74 20 77 6f 72 6b 65 64 20 62 65 63 61 75  set worked becau
8dd0: 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  se the..        
8de0: 20 20 2f 2f 20 73 63 68 65 6d 61 20 68 61 73 20    // schema has 
8df0: 63 68 61 6e 67 65 64 2c 20 72 65 2d 74 72 79 20  changed, re-try 
8e00: 74 68 65 20 73 74 65 70 20 61 67 61 69 6e 2e 20  the step again. 
8e10: 20 49 66 20 69 74 20 65 72 72 6f 72 65 64 20 6f   If it errored o
8e20: 75 72 20 62 65 63 61 75 73 65 20 74 68 65 20 64  ur because the d
8e30: 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20  atabase..       
8e40: 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64 2c     // is locked,
8e50: 20 74 68 65 6e 20 6b 65 65 70 20 72 65 74 72 79   then keep retry
8e60: 69 6e 67 20 75 6e 74 69 6c 20 74 68 65 20 63 6f  ing until the co
8e70: 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f 63  mmand timeout oc
8e80: 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  curs...         
8e90: 20 72 20 3d 20 52 65 73 65 74 28 73 74 6d 74 29   r = Reset(stmt)
8ea0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
8eb0: 66 20 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (r == SQLiteEr
8ec0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
8ed0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
8ee0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
8ef0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
8f00: 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
8f10: 20 20 20 20 65 6c 73 65 20 69 66 20 28 28 72 20      else if ((r 
8f20: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
8f30: 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20 3d  de.Locked || r =
8f40: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
8f50: 65 2e 42 75 73 79 29 20 26 26 20 73 74 6d 74 2e  e.Busy) && stmt.
8f60: 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c  _command != null
8f70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b              // K
8f90: 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20  eep trying..    
8fa0: 20 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20          if (rnd 
8fb0: 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73  == null) // Firs
8fc0: 74 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63  t time we've enc
8fd0: 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63  ountered the loc
8fe0: 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  k..             
8ff0: 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f   rnd = new Rando
9000: 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  m();....        
9010: 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20      // If we've 
9020: 65 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d  exceeded the com
9030: 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20  mand's timeout, 
9040: 67 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f  give up and thro
9050: 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20  w an error..    
9060: 20 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e          if ((uin
9070: 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69  t)Environment.Ti
9080: 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74  ckCount - startt
9090: 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a  ick > timeout)..
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
90c0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
90d0: 65 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61 73  eption(r, GetLas
90e0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
90f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9100: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
9110: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9120: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68            // Oth
9130: 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72  erwise sleep for
9140: 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74   a random amount
9150: 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31   of time up to 1
9160: 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20  50ms..          
9170: 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61      System.Threa
9180: 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65  ding.Thread.Slee
9190: 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35  p(rnd.Next(1, 15
91a0: 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  0));..          
91b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
91c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
91d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
91e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
91f0: 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20 74 68  ..    /// Has th
9200: 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72  e sqlite3_errstr
9210: 28 29 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  () core library 
9220: 41 50 49 20 62 65 65 6e 20 63 68 65 63 6b 65 64  API been checked
9230: 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20 2f   for yet?..    /
9240: 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20 69 74 20  // If so, is it 
9250: 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f 2f  present?..    //
9260: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9270: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
9280: 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 65 72 72 73   bool? have_errs
9290: 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  tr = null;....  
92a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
92b0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
92c0: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
92d0: 67 65 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  ge for the speci
92e0: 66 69 65 64 20 53 51 4c 69 74 65 20 72 65 74 75  fied SQLite retu
92f0: 72 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d 0a 20  rn code using.. 
9300: 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74     /// the sqlit
9310: 65 33 5f 65 72 72 73 74 72 28 29 20 66 75 6e 63  e3_errstr() func
9320: 74 69 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20 62 61  tion, falling ba
9330: 63 6b 20 74 6f 20 74 68 65 20 69 6e 74 65 72 6e  ck to the intern
9340: 61 6c 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20 20 2f  al lookup..    /
9350: 2f 2f 20 74 61 62 6c 65 20 69 66 20 6e 65 63 65  // table if nece
9360: 73 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 0d  ssary...    ///.
9370: 0a 20 20 20 20 2f 2f 2f 20 57 41 52 4e 49 4e 47  .    /// WARNING
9380: 3a 20 44 6f 20 6e 6f 74 20 72 65 6d 6f 76 65 20  : Do not remove 
9390: 74 68 69 73 20 6d 65 74 68 6f 64 2c 20 69 74 20  this method, it 
93a0: 69 73 20 75 73 65 64 20 76 69 61 20 72 65 66 6c  is used via refl
93b0: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
93c0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
93d0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
93e0: 3d 22 72 63 22 3e 54 68 65 20 53 51 4c 69 74 65  ="rc">The SQLite
93f0: 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 3c 2f 70   return code.</p
9400: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
9410: 72 65 74 75 72 6e 73 3e 54 68 65 20 65 72 72 6f  returns>The erro
9420: 72 20 6d 65 73 73 61 67 65 20 6f 72 20 6e 75 6c  r message or nul
9430: 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62  l if it cannot b
9440: 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e  e found.</return
9450: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
9460: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
9470: 65 74 45 72 72 6f 72 53 74 72 69 6e 67 28 53 51  etErrorString(SQ
9480: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
9490: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
94a0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
94b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
94c0: 20 28 68 61 76 65 5f 65 72 72 73 74 72 20 3d 3d   (have_errstr ==
94d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
94e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
94f0: 20 20 20 20 20 20 20 69 6e 74 20 76 65 72 73 69         int versi
9500: 6f 6e 4e 75 6d 62 65 72 20 3d 20 53 51 4c 69 74  onNumber = SQLit
9510: 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d  eVersionNumber;.
9520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9530: 20 68 61 76 65 5f 65 72 72 73 74 72 20 3d 20 28   have_errstr = (
9540: 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d  versionNumber >=
9550: 20 33 30 30 37 30 31 35 29 3b 0d 0a 20 20 20 20   3007015);..    
9560: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9570: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 62 6f           if ((bo
9580: 6f 6c 29 68 61 76 65 5f 65 72 72 73 74 72 29 0d  ol)have_errstr).
9590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
95a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95b0: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
95c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
95d0: 2e 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28  .sqlite3_errstr(
95e0: 72 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rc);....        
95f0: 20 20 20 20 20 20 20 20 69 66 20 28 70 74 72 20          if (ptr 
9600: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
9610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9620: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
9630: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
9640: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
9650: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
9660: 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 69  arshal.PtrToStri
9670: 6e 67 41 6e 73 69 28 70 74 72 29 3b 0d 0a 23 65  ngAnsi(ptr);..#e
9680: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
9690: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
96a0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72  UTF8ToString(ptr
96b0: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
96c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
96e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
96f0: 20 20 20 20 20 63 61 74 63 68 20 28 45 6e 74 72       catch (Entr
9700: 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78  yPointNotFoundEx
9710: 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  ception)..      
9720: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9730: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
9740: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
9750: 20 20 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c        return Fal
9760: 6c 62 61 63 6b 47 65 74 45 72 72 6f 72 53 74 72  lbackGetErrorStr
9770: 69 6e 67 28 72 63 29 3b 0d 0a 20 20 20 20 7d 0d  ing(rc);..    }.
9780: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
9790: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61  ary>..    /// Ha
97a0: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
97b0: 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 29 20 63 6f  mt_readonly() co
97c0: 72 65 20 6c 69 62 72 61 72 79 20 41 50 49 20 62  re library API b
97d0: 65 65 6e 20 63 68 65 63 6b 65 64 20 66 6f 72 20  een checked for 
97e0: 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66  yet?..    /// If
97f0: 20 73 6f 2c 20 69 73 20 69 74 20 70 72 65 73 65   so, is it prese
9800: 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt?..    /// </s
9810: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
9820: 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
9830: 3f 20 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64  ? have_stmt_read
9840: 6f 6e 6c 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  only = null;....
9850: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9860: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
9870: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
9880: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 74 61  he specified sta
9890: 74 65 6d 65 6e 74 20 69 73 20 72 65 61 64 2d 6f  tement is read-o
98a0: 6e 6c 79 20 69 6e 20 6e 61 74 75 72 65 2e 0d 0a  nly in nature...
98b0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
98c0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
98d0: 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54  am name="stmt">T
98e0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  he statement to 
98f0: 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  check.</param>..
9900: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
9910: 3e 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74  >True if the out
9920: 65 72 20 71 75 65 72 79 20 69 73 20 72 65 61 64  er query is read
9930: 2d 6f 6e 6c 79 2e 3c 2f 72 65 74 75 72 6e 73 3e  -only.</returns>
9940: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9950: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 52  verride bool IsR
9960: 65 61 64 4f 6e 6c 79 28 0d 0a 20 20 20 20 20 20  eadOnly(..      
9970: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
9980: 74 20 73 74 6d 74 0d 0a 20 20 20 20 20 20 20 20  t stmt..        
9990: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
99a0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
99b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
99c0: 20 28 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64   (have_stmt_read
99d0: 6f 6e 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  only == null).. 
99e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
9a00: 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20  t versionNumber 
9a10: 3d 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  = SQLiteVersionN
9a20: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
9a30: 20 20 20 20 20 20 20 20 68 61 76 65 5f 73 74 6d          have_stm
9a40: 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 28 76 65  t_readonly = (ve
9a50: 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33  rsionNumber >= 3
9a60: 30 30 37 30 30 34 29 3b 0d 0a 20 20 20 20 20 20  007004);..      
9a70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9a80: 20 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c         if ((bool
9a90: 29 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f  )have_stmt_reado
9aa0: 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nly)..          
9ab0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9ac0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
9ad0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9ae0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65 61  sqlite3_stmt_rea
9af0: 64 6f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  donly(..        
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74              stmt
9b10: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 20 21  ._sqlite_stmt) !
9b20: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
9b30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
9b40: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
9b50: 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e  ntryPointNotFoun
9b60: 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20  dException)..   
9b70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9b80: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
9b90: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
9ba0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
9bb0: 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 45 3a 20  false; /* NOTE: 
9bc0: 55 6e 6b 6e 6f 77 6e 2c 20 61 73 73 75 6d 65 20  Unknown, assume 
9bd0: 66 61 6c 73 65 2e 20 2a 2f 0d 0a 20 20 20 20 7d  false. */..    }
9be0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
9bf0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
9c00: 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28  ErrorCode Reset(
9c10: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
9c20: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
9c30: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
9c40: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
9c50: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
9c60: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
9c70: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9c80: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
9c90: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
9ca0: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a  _stmt);..#else..
9cb0: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
9cc0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9cd0: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
9ce0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
9cf0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
9d00: 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d   // If the schem
9d10: 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61  a changed, try a
9d20: 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69 74  nd re-prepare it
9d30: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
9d40: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9d50: 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20  .Schema)..      
9d60: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65  {..        // Re
9d70: 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73  create a dummy s
9d80: 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
9d90: 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20 6e    string str = n
9da0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 75 73  ull;..        us
9db0: 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74 65  ing (SQLiteState
9dc0: 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61  ment tmp = Prepa
9dd0: 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73  re(null, stmt._s
9de0: 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c  qlStatement, nul
9df0: 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f  l, (uint)(stmt._
9e00: 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64  command._command
9e10: 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c  Timeout * 1000),
9e20: 20 72 65 66 20 73 74 72 29 29 0d 0a 20 20 20 20   ref str))..    
9e30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9e40: 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65   // Finalize the
9e50: 20 65 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d   existing statem
9e60: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ent..          s
9e70: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9e80: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
9e90: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69         // Reassi
9ea0: 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65  gn a new stateme
9eb0: 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  nt pointer to th
9ec0: 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20  e old statement 
9ed0: 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74 65  and clear the te
9ee0: 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20  mporary one..   
9ef0: 20 20 20 20 20 20 20 69 66 20 28 74 6d 70 20 21         if (tmp !
9f00: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9f10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9f20: 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73    stmt._sqlite_s
9f30: 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74  tmt = tmp._sqlit
9f40: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
9f50: 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65       tmp._sqlite
9f60: 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  _stmt = null;.. 
9f70: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9f80: 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70          // Reapp
9f90: 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20  ly parameters.. 
9fa0: 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69           stmt.Bi
9fb0: 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d  ndParameters();.
9fc0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
9fd0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
9fe0: 65 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f  eErrorCode.Unkno
9ff0: 77 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73  wn; // Reset was
a000: 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61   OK, with schema
a010: 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d   change..      }
a020: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ..      else if 
a030: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
a040: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
a050: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
a060: 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20  Code.Busy)..    
a070: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d      return n;...
a080: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
a090: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a0a0: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72  Ok)..        thr
a0b0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
a0c0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
a0d0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
a0e0: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f      return n; //
a0f0: 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f   We reset OK, no
a100: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d   schema changes.
a110: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
a120: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a130: 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72  string GetLastEr
a140: 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ror()..    {..  
a150: 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
a160: 4c 61 73 74 45 72 72 6f 72 28 6e 75 6c 6c 29 3b  LastError(null);
a170: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a180: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a190: 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45   string GetLastE
a1a0: 72 72 6f 72 28 73 74 72 69 6e 67 20 64 65 66 56  rror(string defV
a1b0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
a1c0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73        string res
a1d0: 75 6c 74 20 3d 20 53 51 4c 69 74 65 42 61 73 65  ult = SQLiteBase
a1e0: 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28 5f 73  .GetLastError(_s
a1f0: 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ql, _sql);..    
a200: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
a210: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73  sNullOrEmpty(res
a220: 75 6c 74 29 29 20 72 65 73 75 6c 74 20 3d 20 64  ult)) result = d
a230: 65 66 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  efValue;..      
a240: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
a250: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
a260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a2c0: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 51 75  ..    #region Qu
a2d0: 65 72 79 20 44 69 61 67 6e 6f 73 74 69 63 73 20  ery Diagnostics 
a2e0: 53 75 70 70 6f 72 74 0d 0a 23 69 66 20 21 50 4c  Support..#if !PL
a2f0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
a300: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f 2f  AMEWORK..    ///
a310: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
a320: 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69  /// This field i
a330: 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74  s used to keep t
a340: 72 61 63 6b 20 6f 66 20 77 68 65 74 68 65 72 20  rack of whether 
a350: 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20  or not the..    
a360: 2f 2f 2f 20 22 53 51 4c 69 74 65 5f 46 6f 72 63  /// "SQLite_Forc
a370: 65 4c 6f 67 50 72 65 70 61 72 65 22 20 65 6e 76  eLogPrepare" env
a380: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
a390: 65 20 68 61 73 20 62 65 65 6e 20 71 75 65 72 69  e has been queri
a3a0: 65 64 2e 20 20 49 66 20 73 6f 2c 0d 0a 20 20 20  ed.  If so,..   
a3b0: 20 2f 2f 2f 20 69 74 20 77 69 6c 6c 20 6f 6e 6c   /// it will onl
a3c0: 79 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  y be non-zero if
a3d0: 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74   the environment
a3e0: 20 76 61 72 69 61 62 6c 65 20 77 61 73 20 70 72   variable was pr
a3f0: 65 73 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  esent...    /// 
a400: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
a410: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
a420: 6f 6f 6c 3f 20 66 6f 72 63 65 4c 6f 67 50 72 65  ool? forceLogPre
a430: 70 61 72 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  pare = null;....
a440: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
a4b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
a4c0: 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
a4d0: 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65  all calls to pre
a4e0: 70 61 72 65 20 61 20 53 51 4c 20 71 75 65 72 79  pare a SQL query
a4f0: 20 77 69 6c 6c 20 62 65 20 6c 6f 67 67 65 64 2c   will be logged,
a500: 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 67 61 72 64  ..    /// regard
a510: 6c 65 73 73 20 6f 66 20 74 68 65 20 66 6c 61 67  less of the flag
a520: 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69  s for the associ
a530: 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  ated connection.
a540: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
a550: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
a560: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
a570: 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6c 6f 67   Non-zero to log
a580: 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72   all calls to pr
a590: 65 70 61 72 65 20 61 20 53 51 4c 20 71 75 65 72  epare a SQL quer
a5a0: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  y...    /// </re
a5b0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76  turns>..    priv
a5c0: 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
a5d0: 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28  ForceLogPrepare(
a5e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a5f0: 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
a600: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
a610: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 6f            if (fo
a620: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 3d  rceLogPrepare ==
a630: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
a640: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a650: 20 20 20 20 20 20 20 69 66 20 28 55 6e 73 61 66         if (Unsaf
a660: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47  eNativeMethods.G
a670: 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65 28 0d  etSettingValue(.
a680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a690: 20 20 20 20 20 20 20 20 20 22 53 51 4c 69 74 65           "SQLite
a6a0: 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65  _ForceLogPrepare
a6b0: 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c 6c  ", null) != null
a6c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a6d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a6e0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 63 65 4c            forceL
a6f0: 6f 67 50 72 65 70 61 72 65 20 3d 20 74 72 75 65  ogPrepare = true
a700: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a710: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
a720: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
a730: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a750: 20 20 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61     forceLogPrepa
a760: 72 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  re = false;..   
a770: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
a780: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
a7a0: 75 72 6e 20 28 62 6f 6f 6c 29 66 6f 72 63 65 4c  urn (bool)forceL
a7b0: 6f 67 50 72 65 70 61 72 65 3b 0d 0a 20 20 20 20  ogPrepare;..    
a7c0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
a7d0: 6e 64 69 66 0d 0a 20 20 20 20 23 65 6e 64 72 65  ndif..    #endre
a7e0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a850: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
a860: 72 69 64 65 20 53 51 4c 69 74 65 53 74 61 74 65  ride SQLiteState
a870: 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c  ment Prepare(SQL
a880: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e  iteConnection cn
a890: 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c  n, string strSql
a8a0: 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  , SQLiteStatemen
a8b0: 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74  t previous, uint
a8c0: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20   timeoutMS, ref 
a8d0: 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e  string strRemain
a8e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a8f0: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
a900: 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c  llOrEmpty(strSql
a910: 29 29 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53  )) strSql = strS
a920: 71 6c 2e 54 72 69 6d 28 29 3b 0d 0a 20 20 20 20  ql.Trim();..    
a930: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
a940: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53  NullOrEmpty(strS
a950: 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ql))..      {.. 
a960: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
a970: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c 69     // NOTE: SQLi
a980: 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70  te does not supp
a990: 6f 72 74 20 74 68 65 20 63 6f 6e 63 65 70 74 20  ort the concept 
a9a0: 6f 66 20 73 65 70 61 72 61 74 65 20 73 63 68 65  of separate sche
a9b0: 6d 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  mas..        // 
a9c0: 20 20 20 20 20 20 69 6e 20 6f 6e 65 20 64 61 74        in one dat
a9d0: 61 62 61 73 65 3b 20 74 68 65 72 65 66 6f 72 65  abase; therefore
a9e0: 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 62 61 73  , remove the bas
a9f0: 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a 20  e schema name.. 
aa00: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
aa10: 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20 69  used to smooth i
aa20: 6e 74 65 67 72 61 74 69 6f 6e 20 77 69 74 68 20  ntegration with 
aa30: 74 68 65 20 62 61 73 65 20 2e 4e 45 54 20 46 72  the base .NET Fr
aa40: 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20 20  amework..       
aa50: 20 2f 2f 20 20 20 20 20 20 20 64 61 74 61 20 63   //       data c
aa60: 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20 20 20 20  lasses...       
aa70: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   //..        str
aa80: 69 6e 67 20 62 61 73 65 53 63 68 65 6d 61 4e 61  ing baseSchemaNa
aa90: 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c  me = (cnn != nul
aaa0: 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53 63  l) ? cnn._baseSc
aab0: 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c 3b  hemaName : null;
aac0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
aad0: 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
aae0: 45 6d 70 74 79 28 62 61 73 65 53 63 68 65 6d 61  Empty(baseSchema
aaf0: 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
ab00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  {..          str
ab10: 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70  Sql = strSql.Rep
ab20: 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  lace(..         
ab30: 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f       HelperMetho
ab40: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
ab50: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
ab60: 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  riantCulture,.. 
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5b 7b               "[{
ab80: 30 7d 5d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d  0}].", baseSchem
ab90: 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45  aName), String.E
aba0: 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mpty);....      
abb0: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
abc0: 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20  Sql.Replace(..  
abd0: 20 20 20 20 20 20 20 20 20 20 20 20 48 65 6c 70              Help
abe0: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
abf0: 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e  Format(CultureIn
ac00: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
ac10: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
ac20: 20 20 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65      "{0}.", base
ac30: 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72  SchemaName), Str
ac40: 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20  ing.Empty);..   
ac50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
ac60: 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43  ...      SQLiteC
ac70: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
ac80: 6c 61 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20  lags =..        
ac90: 20 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20    (cnn != null) 
aca0: 3f 20 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51  ? cnn.Flags : SQ
acb0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
acc0: 61 67 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a  ags.Default;....
acd0: 20 20 20 20 20 20 69 66 20 28 0d 0a 23 69 66 20        if (..#if 
ace0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
acf0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
ad00: 20 20 20 20 20 20 46 6f 72 63 65 4c 6f 67 50 72        ForceLogPr
ad10: 65 70 61 72 65 28 29 20 7c 7c 0d 0a 23 65 6e 64  epare() ||..#end
ad20: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 48 65  if..          He
ad30: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 50  lperMethods.LogP
ad40: 72 65 70 61 72 65 28 66 6c 61 67 73 29 29 0d 0a  repare(flags))..
ad50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ad60: 20 20 20 69 66 20 28 28 73 74 72 53 71 6c 20 3d     if ((strSql =
ad70: 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53  = null) || (strS
ad80: 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20  ql.Length == 0) 
ad90: 7c 7c 20 28 73 74 72 53 71 6c 2e 54 72 69 6d 28  || (strSql.Trim(
ada0: 29 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d  ).Length == 0)).
adb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
adc0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
add0: 61 67 65 28 22 50 72 65 70 61 72 69 6e 67 20 7b  age("Preparing {
ade0: 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b  <nothing>}...");
adf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
ae00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ae10: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
ae20: 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  sage(HelperMetho
ae30: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
ae40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ae50: 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
ae60: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 20  CurrentCulture, 
ae70: 22 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30 7d  "Preparing {{{0}
ae80: 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29 29  }}...", strSql))
ae90: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
aea0: 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74 20      IntPtr stmt 
aeb0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
aec0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
aed0: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
aee0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
aef0: 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74   0;..      SQLit
af00: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53  eErrorCode n = S
af10: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
af20: 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69 6e  chema;..      in
af30: 74 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a  t retries = 0;..
af40: 20 20 20 20 20 20 69 6e 74 20 6d 61 78 69 6d 75        int maximu
af50: 6d 52 65 74 72 69 65 73 20 3d 20 28 63 6e 6e 20  mRetries = (cnn 
af60: 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f  != null) ? cnn._
af70: 70 72 65 70 61 72 65 52 65 74 72 69 65 73 20 3a  prepareRetries :
af80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
af90: 6e 2e 44 65 66 61 75 6c 74 50 72 65 70 61 72 65  n.DefaultPrepare
afa0: 52 65 74 72 69 65 73 3b 0d 0a 20 20 20 20 20 20  Retries;..      
afb0: 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46  byte[] b = ToUTF
afc0: 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20 20  8(strSql);..    
afd0: 20 20 73 74 72 69 6e 67 20 74 79 70 65 64 65 66    string typedef
afe0: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
aff0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
b000: 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20   cmd = null;..  
b010: 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d      Random rnd =
b020: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69   null;..      ui
b030: 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28  nt starttick = (
b040: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
b050: 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a 20  .TickCount;.... 
b060: 20 20 20 20 20 52 65 73 65 74 43 61 6e 63 65 6c       ResetCancel
b070: 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  Count();....    
b080: 20 20 47 43 48 61 6e 64 6c 65 20 68 61 6e 64 6c    GCHandle handl
b090: 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c 6c  e = GCHandle.All
b0a0: 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c 65 54 79  oc(b, GCHandleTy
b0b0: 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20 20  pe.Pinned);..   
b0c0: 20 20 20 49 6e 74 50 74 72 20 70 73 71 6c 20 3d     IntPtr psql =
b0d0: 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50 69   handle.AddrOfPi
b0e0: 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a 20  nnedObject();.. 
b0f0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
b100: 6d 65 6e 74 48 61 6e 64 6c 65 20 73 74 61 74 65  mentHandle state
b110: 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75 6c  mentHandle = nul
b120: 6c 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20  l;..      try.. 
b130: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b140: 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51 4c  while ((n == SQL
b150: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68  iteErrorCode.Sch
b160: 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69  ema || n == SQLi
b170: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b  teErrorCode.Lock
b180: 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74  ed || n == SQLit
b190: 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29  eErrorCode.Busy)
b1a0: 20 26 26 20 72 65 74 72 69 65 73 20 3c 20 6d 61   && retries < ma
b1b0: 78 69 6d 75 6d 52 65 74 72 69 65 73 29 0d 0a 20  ximumRetries).. 
b1c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b1d0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
b1e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b1f0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
b200: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
b210: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
b220: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
b230: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
b240: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
b250: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b260: 20 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e    stmt = IntPtr.
b270: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
b280: 20 20 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e     ptr = IntPtr.
b290: 5a 65 72 6f 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  Zero;....#if !SQ
b2a0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
b2b0: 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d             len =
b2c0: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
b2d0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
b2e0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
b2f0: 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70  _prepare_interop
b300: 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c  (_sql, psql, b.L
b310: 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20 73  ength - 1, ref s
b320: 74 6d 74 2c 20 72 65 66 20 70 74 72 2c 20 72 65  tmt, ref ptr, re
b330: 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  f len);..#else..
b340: 23 69 66 20 55 53 45 5f 50 52 45 50 41 52 45 5f  #if USE_PREPARE_
b350: 56 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  V2..            
b360: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
b370: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
b380: 70 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c  prepare_v2(_sql,
b390: 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20   psql, b.Length 
b3a0: 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20 72  - 1, ref stmt, r
b3b0: 65 66 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d  ef ptr);..#else.
b3c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
b3d0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
b3e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65  hods.sqlite3_pre
b3f0: 70 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c  pare(_sql, psql,
b400: 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72   b.Length - 1, r
b410: 65 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72  ef stmt, ref ptr
b420: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
b430: 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31          len = -1
b440: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  ;..#endif....#if
b450: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
b460: 20 26 26 20 54 52 41 43 45 5f 53 54 41 54 45 4d   && TRACE_STATEM
b470: 45 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ENT..           
b480: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
b490: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
b4a0: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
b4c0: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
b4d0: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
b4e0: 20 20 20 20 20 20 20 20 20 20 20 22 50 72 65 70             "Prep
b4f0: 61 72 65 20 28 7b 30 7d 29 3a 20 7b 31 7d 22 2c  are ({0}): {1}",
b500: 20 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65 6e   n, stmt));..#en
b510: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  dif....         
b520: 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c     if ((n == SQL
b530: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
b540: 20 26 26 20 28 73 74 6d 74 20 21 3d 20 49 6e 74   && (stmt != Int
b550: 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20  Ptr.Zero))..    
b560: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b570: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61           if (sta
b580: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20  tementHandle != 
b590: 6e 75 6c 6c 29 20 73 74 61 74 65 6d 65 6e 74 48  null) statementH
b5a0: 61 6e 64 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b  andle.Dispose();
b5b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b5c0: 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  statementHandle 
b5d0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74  = new SQLiteStat
b5e0: 65 6d 65 6e 74 48 61 6e 64 6c 65 28 5f 73 71 6c  ementHandle(_sql
b5f0: 2c 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20  , stmt);..      
b600: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
b610: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b620: 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48    if (statementH
b630: 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  andle != null)..
b640: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b650: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
b660: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e  onnection.OnChan
b670: 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f  ged(null, new Co
b680: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
b690: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
b6a0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
b6b0: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 43  onEventType.NewC
b6c0: 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e  riticalHandle, n
b6d0: 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20  ull, null,..    
b6e0: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
b6f0: 6e 75 6c 6c 2c 20 73 74 61 74 65 6d 65 6e 74 48  null, statementH
b700: 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2c 20 6e  andle, strSql, n
b710: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20  ew object[] {.. 
b720: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
b730: 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 63 6e  eof(SQLite3), cn
b740: 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69  n, strSql, previ
b750: 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 20 7d  ous, timeoutMS }
b760: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ));..          }
b770: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
b780: 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72   (ShouldThrowFor
b790: 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20  Cancel())..     
b7a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b7b0: 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20        if ((n == 
b7c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
b7d0: 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  Ok) ||..        
b7e0: 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20            (n == 
b7f0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
b800: 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  Row) ||..       
b810: 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d             (n ==
b820: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
b830: 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20  .Done))..       
b840: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b850: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
b860: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
b870: 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20 20 20  Interrupt;..    
b880: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
b8a0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
b8b0: 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b  eption(n, null);
b8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
b8d0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e  .          if (n
b8e0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
b8f0: 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 29 0d 0a  ode.Interrupt)..
b900: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
b910: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  k;..          el
b920: 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
b930: 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65  teErrorCode.Sche
b940: 6d 61 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ma)..           
b950: 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20   retries++;..   
b960: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
b970: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
b980: 43 6f 64 65 2e 45 72 72 6f 72 29 0d 0a 20 20 20  Code.Error)..   
b990: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b9a0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
b9b0: 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73 74  .Compare(GetLast
b9c0: 45 72 72 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c  Error(), "near \
b9d0: 22 54 59 50 45 53 5c 22 3a 20 73 79 6e 74 61 78  "TYPES\": syntax
b9e0: 20 65 72 72 6f 72 22 2c 20 53 74 72 69 6e 67 43   error", StringC
b9f0: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
ba00: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
ba10: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
ba20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ba30: 20 69 6e 74 20 70 6f 73 20 3d 20 73 74 72 53 71   int pos = strSq
ba40: 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d  l.IndexOf(';');.
ba50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
ba60: 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f  f (pos == -1) po
ba70: 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74  s = strSql.Lengt
ba80: 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20  h - 1;....      
ba90: 20 20 20 20 20 20 20 20 74 79 70 65 64 65 66 73          typedefs
baa0: 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72   = strSql.Substr
bab0: 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b  ing(0, pos + 1);
bac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bad0: 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e  strSql = strSql.
bae0: 53 75 62 73 74 72 69 6e 67 28 70 6f 73 20 2b 20  Substring(pos + 
baf0: 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  1);....         
bb00: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
bb10: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
bb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bb30: 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75  while (cmd == nu
bb40: 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e  ll && strSql.Len
bb50: 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
bb60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bb70: 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20 3d             cmd =
bb80: 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73 74   Prepare(cnn, st
bb90: 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20  rSql, previous, 
bba0: 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20 73  timeoutMS, ref s
bbb0: 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20  trRemain);..    
bbc0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53              strS
bbd0: 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d  ql = strRemain;.
bbe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
bbf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bc00: 20 20 69 66 20 28 63 6d 64 20 21 3d 20 6e 75 6c    if (cmd != nul
bc10: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
bc20: 20 20 20 20 63 6d 64 2e 53 65 74 54 79 70 65 73      cmd.SetTypes
bc30: 28 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d 0a 20  (typedefs);.... 
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
bc50: 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20  urn cmd;..      
bc60: 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 28 4e 45        }..#if (NE
bc70: 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20 7c  T_35 || NET_40 |
bc80: 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f  | NET_45 || NET_
bc90: 34 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32 20 7c  451 || NET_452 |
bca0: 7c 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45 54 5f  | NET_46 || NET_
bcb0: 34 36 31 20 7c 7c 20 4e 45 54 5f 34 36 32 20 7c  461 || NET_462 |
bcc0: 7c 20 4e 45 54 5f 34 37 20 7c 7c 20 4e 45 54 5f  | NET_47 || NET_
bcd0: 34 37 31 29 20 26 26 20 21 50 4c 41 54 46 4f 52  471) && !PLATFOR
bce0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
bcf0: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
bd00: 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64 69  else if (_buildi
bd10: 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73  ngSchema == fals
bd20: 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70  e && String.Comp
bd30: 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72  are(GetLastError
bd40: 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68 20  (), 0, "no such 
bd50: 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45  table: TEMP.SCHE
bd60: 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72 69  MA", 0, 26, Stri
bd70: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
bd80: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
bd90: 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
bda0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bdb0: 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20      strRemain = 
bdc0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20  String.Empty;.. 
bdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 75               _bu
bde0: 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74  ildingSchema = t
bdf0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
be00: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
be10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
be20: 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74            ISQLit
be30: 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e  eSchemaExtension
be40: 73 20 65 78 74 20 3d 20 28 28 49 53 65 72 76 69  s ext = ((IServi
be50: 63 65 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74  ceProvider)SQLit
be60: 65 46 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63  eFactory.Instanc
be70: 65 29 2e 47 65 74 53 65 72 76 69 63 65 28 74 79  e).GetService(ty
be80: 70 65 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65  peof(ISQLiteSche
be90: 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61  maExtensions)) a
bea0: 73 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45  s ISQLiteSchemaE
beb0: 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20  xtensions;....  
bec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
bed0: 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a   (ext != null)..
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bef0: 20 20 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53    ext.BuildTempS
bf00: 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20  chema(cnn);.... 
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
bf20: 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c  hile (cmd == nul
bf30: 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67  l && strSql.Leng
bf40: 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  th > 0)..       
bf50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
bf70: 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c  d = Prepare(cnn,
bf80: 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75   strSql, previou
bf90: 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65  s, timeoutMS, re
bfa0: 66 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20  f strRemain);.. 
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfc0: 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d   strSql = strRem
bfd0: 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ain;..          
bfe0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
bff0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c000: 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20  n cmd;..        
c010: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c020: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
c030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
c040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c050: 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61   _buildingSchema
c060: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
c070: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c080: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
c090: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  f..          }..
c0a0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
c0b0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
c0c0: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c  rorCode.Locked |
c0d0: 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | n == SQLiteErr
c0e0: 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20  orCode.Busy) // 
c0f0: 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20  Locked -- delay 
c100: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62  a small amount b
c110: 65 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a  efore retrying..
c120: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c130: 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70           // Keep
c140: 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20   trying..       
c150: 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20       if (rnd == 
c160: 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74  null) // First t
c170: 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e  ime we've encoun
c180: 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a  tered the lock..
c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e                rn
c1a0: 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29  d = new Random()
c1b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c1c0: 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63   // If we've exc
c1d0: 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e  eeded the comman
c1e0: 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76  d's timeout, giv
c1f0: 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61  e up and throw a
c200: 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  n error..       
c210: 20 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45       if ((uint)E
c220: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43  nvironment.TickC
c230: 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b  ount - starttick
c240: 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20   > timeoutMS).. 
c250: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c260: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
c270: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
c280: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
c290: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
c2a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c2b0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
c2c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c2d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65           // Othe
c2e0: 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20  rwise sleep for 
c2f0: 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20  a random amount 
c300: 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35  of time up to 15
c310: 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  0ms..           
c320: 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64     System.Thread
c330: 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70  ing.Thread.Sleep
c340: 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30  (rnd.Next(1, 150
c350: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
c360: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
c370: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
c380: 20 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64        if (Should
c390: 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29  ThrowForCancel()
c3a0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
c3b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
c3c0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
c3d0: 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20  ode.Ok) ||..    
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d              (n =
c3f0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
c400: 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20  e.Row) ||..     
c410: 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d             (n ==
c420: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
c430: 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20  .Done))..       
c440: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c450: 20 20 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69          n = SQLi
c460: 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65  teErrorCode.Inte
c470: 72 72 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20  rrupt;..        
c480: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c490: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
c4a0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
c4b0: 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
c4c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
c4d0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
c4e0: 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70  rorCode.Interrup
c4f0: 74 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d  t) return null;.
c500: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
c510: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
c520: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
c530: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
c540: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
c550: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  ));....        s
c560: 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54  trRemain = UTF8T
c570: 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e  oString(ptr, len
c580: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
c590: 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c   (statementHandl
c5a0: 65 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64 20 3d  e != null) cmd =
c5b0: 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65   new SQLiteState
c5c0: 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c 61 67 73  ment(this, flags
c5d0: 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  , statementHandl
c5e0: 65 2c 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72  e, strSql.Substr
c5f0: 69 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e 4c 65  ing(0, strSql.Le
c600: 6e 67 74 68 20 2d 20 73 74 72 52 65 6d 61 69 6e  ngth - strRemain
c610: 2e 4c 65 6e 67 74 68 29 2c 20 70 72 65 76 69 6f  .Length), previo
c620: 75 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  us);....        
c630: 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20  return cmd;..   
c640: 20 20 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61     }..      fina
c650: 6c 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  lly..      {..  
c660: 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 46 72 65        handle.Fre
c670: 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  e();..      }.. 
c680: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
c690: 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69  ected static voi
c6a0: 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65  d LogBind(SQLite
c6b0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
c6c0: 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65  handle, int inde
c6d0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
c6e0: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
c6f0: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
c700: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
c710: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
c720: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
c730: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
c740: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
c750: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
c760: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
c770: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
c780: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
c790: 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e  er #{1} as NULL.
c7a0: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
c7b0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
c7c0: 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d  index));..    }.
c7d0: 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ...    protected
c7e0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67   static void Log
c7f0: 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65  Bind(SQLiteState
c800: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
c810: 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61  e, int index, Va
c820: 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a  lueType value)..
c830: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49      {..        I
c840: 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50  ntPtr handleIntP
c850: 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a  tr = handle;....
c860: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
c870: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c  g.LogMessage(Hel
c880: 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
c890: 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
c8a0: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
c8b0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
c8c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  ,..            "
c8d0: 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e  Binding statemen
c8e0: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23  t {0} paramter #
c8f0: 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20  {1} as type {2} 
c900: 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d  with value {{{3}
c910: 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  }}...",..       
c920: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
c930: 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 2e  r, index, value.
c940: 47 65 74 54 79 70 65 28 29 2c 20 76 61 6c 75 65  GetType(), value
c950: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
c960: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
c970: 20 73 74 72 69 6e 67 20 46 6f 72 6d 61 74 44 61   string FormatDa
c980: 74 65 54 69 6d 65 28 44 61 74 65 54 69 6d 65 20  teTime(DateTime 
c990: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
c9a0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69         StringBui
c9b0: 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65  lder result = ne
c9c0: 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28  w StringBuilder(
c9d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
c9e0: 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75  sult.Append(valu
c9f0: 65 2e 54 6f 53 74 72 69 6e 67 28 22 79 79 79 79  e.ToString("yyyy
ca00: 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e  -MM-ddTHH:mm:ss.
ca10: 46 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20 20  FFFFFFFK"));..  
ca20: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
ca30: 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20  end(' ');..     
ca40: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
ca50: 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20  (value.Kind);.. 
ca60: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70         result.Ap
ca70: 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20  pend(' ');..    
ca80: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
ca90: 64 28 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b 0d  d(value.Ticks);.
caa0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
cab0: 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e  n result.ToStrin
cac0: 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  g();..    }.... 
cad0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61     protected sta
cae0: 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64  tic void LogBind
caf0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
cb00: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69  Handle handle, i
cb10: 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69  nt index, DateTi
cb20: 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  me value)..    {
cb30: 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
cb40: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
cb50: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
cb60: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
cb70: 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65  Message(HelperMe
cb80: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
cb90: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
cba0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
cbb0: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
cbc0: 20 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69            "Bindi
cbd0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d  ng statement {0}
cbe0: 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61   paramter #{1} a
cbf0: 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20  s type {2} with 
cc00: 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e  value {{{3}}}...
cc10: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
cc20: 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e  handleIntPtr, in
cc30: 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61 74 65  dex, typeof(Date
cc40: 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61 74  Time), FormatDat
cc50: 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29 3b 0d  eTime(value)));.
cc60: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
cc70: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
cc80: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
cc90: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
cca0: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
ccb0: 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  dex, string valu
ccc0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
ccd0: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
cce0: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
ccf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
cd00: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
cd10: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
cd20: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
cd30: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
cd40: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
cd50: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
cd60: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
cd70: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
cd80: 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20  er #{1} as type 
cd90: 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b  {2} with value {
cda0: 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20  {{3}}}...",..   
cdb0: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
cdc0: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79  ntPtr, index, ty
cdd0: 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76  peof(String), (v
cde0: 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  alue != null) ? 
cdf0: 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22  value : "<null>"
ce00: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
ce10: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
ce20: 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65   string ToHexade
ce30: 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20  cimalString(..  
ce40: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72        byte[] arr
ce50: 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ay..        ).. 
ce60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
ce70: 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29   (array == null)
ce80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
ce90: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
cea0: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
ceb0: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
cec0: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61   StringBuilder(a
ced0: 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29  rray.Length * 2)
cee0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ;....        int
cef0: 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e   length = array.
cf00: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
cf10: 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
cf20: 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c  x = 0; index < l
cf30: 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d  ength; index++).
cf40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73  .            res
cf50: 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79  ult.Append(array
cf60: 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67  [index].ToString
cf70: 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20  ("x2"));....    
cf80: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
cf90: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
cfa0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74     }....    prot
cfb0: 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69  ected static voi
cfc0: 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65  d LogBind(SQLite
cfd0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
cfe0: 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65  handle, int inde
cff0: 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29  x, byte[] value)
d000: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
d010: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
d020: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
d030: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d040: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48  Log.LogMessage(H
d050: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
d060: 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
d070: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
d080: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
d090: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
d0a0: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
d0b0: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
d0c0: 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32   #{1} as type {2
d0d0: 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b  } with value {{{
d0e0: 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  3}}}...",..     
d0f0: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
d100: 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65  Ptr, index, type
d110: 6f 66 28 42 79 74 65 5b 5d 29 2c 20 28 76 61 6c  of(Byte[]), (val
d120: 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f  ue != null) ? To
d130: 48 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e  HexadecimalStrin
d140: 67 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e 75 6c  g(value) : "<nul
d150: 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  l>"));..    }...
d160: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d170: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
d180: 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74  _Double(SQLiteSt
d190: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
d1a0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
d1b0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
d1c0: 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c  ndex, double val
d1d0: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
d1e0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
d1f0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
d200: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
d210: 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  stmt;....       
d220: 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f   if (HelperMetho
d230: 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73  ds.LogBind(flags
d240: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
d250: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
d260: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
d270: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
d280: 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41     }....#if !PLA
d290: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
d2a0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
d2b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
d2c0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
d2d0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d2e0: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64  bind_double(hand
d2f0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
d300: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
d310: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
d320: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
d330: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
d340: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
d350: 6f 72 28 29 29 3b 0d 0a 23 65 6c 69 66 20 21 53  or());..#elif !S
d360: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
d370: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
d380: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
d390: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d3a0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
d3b0: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  ble_interop(hand
d3c0: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
d3d0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
d3e0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
d3f0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
d400: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
d410: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
d420: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 73  tError());..#els
d430: 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  e..        throw
d440: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
d450: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
d460: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
d470: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d480: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
d490: 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  d_Int32(SQLiteSt
d4a0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
d4b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
d4c0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
d4d0: 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c 75 65 29  ndex, int value)
d4e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
d4f0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
d500: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
d510: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
d520: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  t;....        if
d530: 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e   (HelperMethods.
d540: 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d  LogBind(flags)).
d550: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d560: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
d570: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
d580: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
d590: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
d5a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
d5b0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d5c0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
d5d0: 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e  d_int(handle, in
d5e0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
d5f0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
d600: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
d610: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
d620: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
d630: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
d640: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
d650: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
d660: 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 33   void Bind_UInt3
d670: 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  2(SQLiteStatemen
d680: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
d690: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
d6a0: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
d6b0: 75 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20  uint value)..   
d6c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
d6d0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
d6e0: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
d6f0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
d700: 0a 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c  .        if (Hel
d710: 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69  perMethods.LogBi
d720: 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20  nd(flags))..    
d730: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d740: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
d750: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  e, index, value)
d760: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
d770: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
d780: 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20  rorCode n;....  
d790: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
d7a0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
d7b0: 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55 49 6e  ionFlags.BindUIn
d7c0: 74 33 32 41 73 49 6e 74 36 34 29 20 3d 3d 20 53  t32AsInt64) == S
d7d0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
d7e0: 6c 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32 41  lags.BindUInt32A
d7f0: 73 49 6e 74 36 34 29 0d 0a 20 20 20 20 20 20 20  sInt64)..       
d800: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d810: 6c 6f 6e 67 20 76 61 6c 75 65 32 20 3d 20 76 61  long value2 = va
d820: 6c 75 65 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  lue;....#if !PLA
d830: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
d840: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
d850: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
d860: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d870: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68  te3_bind_int64(h
d880: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
d890: 6c 75 65 32 29 3b 0d 0a 23 65 6c 69 66 20 21 53  lue2);..#elif !S
d8a0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
d8c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d8d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
d8e0: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  _int64_interop(h
d8f0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
d900: 66 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65 6c 73  f value2);..#els
d910: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  e..            t
d920: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
d930: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
d940: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
d950: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d960: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
d970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
d980: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
d990: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
d9a0: 64 5f 75 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69  d_uint(handle, i
d9b0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
d9c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d9d0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
d9e0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
d9f0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
da00: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
da10: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
da20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
da30: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
da40: 64 20 42 69 6e 64 5f 49 6e 74 36 34 28 53 51 4c  d Bind_Int64(SQL
da50: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
da60: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
da70: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
da80: 69 6e 74 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20  int index, long 
da90: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
daa0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
dab0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
dac0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
dad0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20  te_stmt;....    
dae0: 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65      if (HelperMe
daf0: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
db00: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ags))..        {
db10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
db20: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
db30: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
db40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
db50: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
db60: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
db70: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
db80: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
db90: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
dba0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61  e3_bind_int64(ha
dbb0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
dbc0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ue);..        if
dbd0: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
dbe0: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
dbf0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
dc00: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
dc10: 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69 66 20  rror());..#elif 
dc20: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
dc30: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
dc40: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
dc50: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
dc60: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
dc70: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
dc80: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
dc90: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
dca0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
dcb0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
dcc0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
dcd0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
dce0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c  stError());..#el
dcf0: 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  se..        thro
dd00: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
dd10: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
dd20: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
dd30: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
dd40: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
dd50: 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65  nd_UInt64(SQLite
dd60: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
dd70: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
dd80: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
dd90: 20 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20 76 61   index, ulong va
dda0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
ddb0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
ddc0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
ddd0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
dde0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
ddf0: 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68    if (HelperMeth
de00: 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67  ods.LogBind(flag
de10: 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s))..        {..
de20: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
de30: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
de40: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
de50: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c      }....#if !PL
de60: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
de70: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
de80: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
de90: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
dea0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
deb0: 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28 68 61 6e  _bind_uint64(han
dec0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
ded0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
dee0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
def0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
df00: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
df10: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
df20: 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69 66 20 21  ror());..#elif !
df30: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
df40: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
df50: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
df60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
df70: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69  .sqlite3_bind_ui
df80: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
df90: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
dfa0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
dfb0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
dfc0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
dfd0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
dfe0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
dff0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c  stError());..#el
e000: 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  se..        thro
e010: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
e020: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
e030: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
e040: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
e050: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
e060: 6e 64 5f 42 6f 6f 6c 65 61 6e 28 53 51 4c 69 74  nd_Boolean(SQLit
e070: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
e080: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e090: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
e0a0: 74 20 69 6e 64 65 78 2c 20 62 6f 6f 6c 20 76 61  t index, bool va
e0b0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
e0c0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
e0d0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
e0e0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
e0f0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
e100: 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68    if (HelperMeth
e110: 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67  ods.LogBind(flag
e120: 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s))..        {..
e130: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
e140: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
e150: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
e160: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
e170: 20 69 6e 74 20 76 61 6c 75 65 32 20 3d 20 76 61   int value2 = va
e180: 6c 75 65 20 3f 20 31 20 3a 20 30 3b 0d 0a 0d 0a  lue ? 1 : 0;....
e190: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
e1a0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
e1b0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e1c0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
e1d0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
e1e0: 76 61 6c 75 65 32 29 3b 0d 0a 20 20 20 20 20 20  value2);..      
e1f0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
e200: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
e210: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
e220: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
e230: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
e240: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
e250: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
e260: 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69  d Bind_Text(SQLi
e270: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
e280: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
e290: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
e2a0: 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  nt index, string
e2b0: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
e2c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
e2d0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
e2e0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
e2f0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
e300: 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d       if (HelperM
e310: 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66  ethods.LogBind(f
e320: 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  lags))..        
e330: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
e340: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
e350: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
e360: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e370: 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54      byte[] b = T
e380: 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d  oUTF8(value);...
e390: 0a 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c  .        if (Hel
e3a0: 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69  perMethods.LogBi
e3b0: 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20  nd(flags))..    
e3c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e3d0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
e3e0: 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20  e, index, b);.. 
e3f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e400: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
e410: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
e420: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
e430: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 68 61  te3_bind_text(ha
e440: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 2c 20  ndle, index, b, 
e450: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 28 49  b.Length - 1, (I
e460: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
e470: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
e480: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
e490: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
e4a0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
e4b0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
e4c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
e4d0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
e4e0: 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65 54   void Bind_DateT
e4f0: 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
e500: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
e510: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
e520: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
e530: 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29 0d 0a  , DateTime dt)..
e540: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
e550: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
e560: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
e570: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
e580: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
e590: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
e5a0: 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20  gBind(flags)).. 
e5b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e5c0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
e5d0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 64 74 29  ndle, index, dt)
e5e0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
e5f0: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
e600: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
e610: 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 44  ctionFlags.BindD
e620: 61 74 65 54 69 6d 65 57 69 74 68 4b 69 6e 64 29  ateTimeWithKind)
e630: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
e640: 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 44 61  tionFlags.BindDa
e650: 74 65 54 69 6d 65 57 69 74 68 4b 69 6e 64 29 0d  teTimeWithKind).
e660: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e670: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 64 61          if ((_da
e680: 74 65 74 69 6d 65 4b 69 6e 64 20 21 3d 20 44 61  tetimeKind != Da
e690: 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65  teTimeKind.Unspe
e6a0: 63 69 66 69 65 64 29 20 26 26 0d 0a 20 20 20 20  cified) &&..    
e6b0: 20 20 20 20 20 20 20 20 20 20 20 20 28 64 74 2e              (dt.
e6c0: 4b 69 6e 64 20 21 3d 20 44 61 74 65 54 69 6d 65  Kind != DateTime
e6d0: 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64  Kind.Unspecified
e6e0: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
e6f0: 20 20 20 20 20 20 28 64 74 2e 4b 69 6e 64 20 21        (dt.Kind !
e700: 3d 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29  = _datetimeKind)
e710: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e730: 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 4b    if (_datetimeK
e740: 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b  ind == DateTimeK
e750: 69 6e 64 2e 55 74 63 29 0d 0a 20 20 20 20 20 20  ind.Utc)..      
e760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 74                dt
e770: 20 3d 20 64 74 2e 54 6f 55 6e 69 76 65 72 73 61   = dt.ToUniversa
e780: 6c 54 69 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20  lTime();..      
e790: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
e7a0: 66 20 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  f (_datetimeKind
e7b0: 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64   == DateTimeKind
e7c0: 2e 4c 6f 63 61 6c 29 0d 0a 20 20 20 20 20 20 20  .Local)..       
e7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 74 20               dt 
e7e0: 3d 20 64 74 2e 54 6f 4c 6f 63 61 6c 54 69 6d 65  = dt.ToLocalTime
e7f0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
e800: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
e810: 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
e820: 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74  (_datetimeFormat
e830: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
e840: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
e850: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
e860: 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20  .Ticks:..       
e870: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e890: 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 64 74 2e  long value = dt.
e8a0: 54 69 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20  Ticks;....      
e8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e8c0: 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e   (HelperMethods.
e8d0: 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d  LogBind(flags)).
e8e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e8f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e910: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
e920: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
e930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e940: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c      }....#if !PL
e950: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
e960: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
e970: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
e980: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
e990: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e9a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
e9b0: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
e9c0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
e9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9e0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
e9f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
ea00: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
ea10: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
ea20: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea40: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 69      break;..#eli
ea50: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
ea60: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
ea70: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
ea80: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
ea90: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
eaa0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
eab0: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
eac0: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
ead0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
eae0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
eaf0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
eb00: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
eb10: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
eb20: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
eb30: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
eb40: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
eb50: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
eb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
eb70: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
eb80: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
eb90: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
eba0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ebb0: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
ebc0: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
ebd0: 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20  s.JulianDay:..  
ebe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
ebf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ec00: 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
ec10: 65 20 3d 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28  e = ToJulianDay(
ec20: 64 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dt);....        
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ec40: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
ec50: 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20  gBind(flags)).. 
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ec80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
ec90: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
eca0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
ecb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecc0: 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54    }....#if !PLAT
ecd0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
ece0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
ecf0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
ed00: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
ed10: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ed20: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
ed30: 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69  double(handle, i
ed40: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed60: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
ed70: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
ed80: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
ed90: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
eda0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edc0: 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 69 66     break;..#elif
edd0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
ede0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  D..             
edf0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
ee00: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
ee10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ee20: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
ee30: 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  le_interop(handl
ee40: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
ee50: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
ee60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
ee70: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
ee80: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
ee90: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
eea0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
eeb0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
eec0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
eed0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
eee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
eef0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
ef00: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
ef10: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ef30: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
ef40: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
ef50: 73 2e 55 6e 69 78 45 70 6f 63 68 3a 0d 0a 20 20  s.UnixEpoch:..  
ef60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
ef70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ef80: 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20       long value 
ef90: 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36  = Convert.ToInt6
efa0: 34 28 64 74 2e 53 75 62 74 72 61 63 74 28 55 6e  4(dt.Subtract(Un
efb0: 69 78 45 70 6f 63 68 29 2e 54 6f 74 61 6c 53 65  ixEpoch).TotalSe
efc0: 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  conds);....     
efd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
efe0: 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  f (HelperMethods
eff0: 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29  .LogBind(flags))
f000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f010: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f030: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
f040: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
f050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f060: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50       }....#if !P
f070: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
f080: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
f090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
f0a0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
f0b0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
f0c0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
f0d0: 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  nd_int64(handle,
f0e0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
f0f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f100: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
f110: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
f120: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
f130: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
f140: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
f150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f160: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c       break;..#el
f170: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
f180: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
f190: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
f1a0: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
f1b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f1c0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
f1d0: 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  t64_interop(hand
f1e0: 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  le, index, ref v
f1f0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
f200: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
f210: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
f220: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
f230: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
f240: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
f250: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
f260: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
f270: 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  k;..#else..     
f280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f290: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
f2a0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
f2b0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
f2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
f2d0: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
f2e0: 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ult:..          
f2f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f300: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74               byt
f310: 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64  e[] b = ToUTF8(d
f320: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
f330: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 48             if (H
f340: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67  elperMethods.Log
f350: 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20  Bind(flags))..  
f360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f370: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67               Log
f390: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
f3a0: 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20 20 20  ex, b);..       
f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
f3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f3d0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
f3e0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
f3f0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f400: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
f410: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
f420: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
f430: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
f440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f450: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
f460: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
f470: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
f480: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
f490: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
f4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4b0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
f4d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
f4e0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
f4f0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
f500: 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65 53 74  nd_Blob(SQLiteSt
f510: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
f520: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
f530: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
f540: 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62 6c 6f  ndex, byte[] blo
f550: 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20  bData)..    {.. 
f560: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
f570: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
f580: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
f590: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20  te_stmt;....    
f5a0: 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65      if (HelperMe
f5b0: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
f5c0: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ags))..        {
f5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
f5e0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
f5f0: 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d  dex, blobData);.
f600: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
f610: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
f620: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
f630: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
f640: 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28  lite3_bind_blob(
f650: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
f660: 6c 6f 62 44 61 74 61 2c 20 62 6c 6f 62 44 61 74  lobData, blobDat
f670: 61 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74  a.Length, (IntPt
f680: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r)(-1));..      
f690: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
f6a0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
f6b0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
f6c0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
f6d0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
f6e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f6f0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
f700: 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69  d Bind_Null(SQLi
f710: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
f720: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
f730: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
f740: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
f750: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
f760: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
f770: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
f780: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
f790: 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65         if (Helpe
f7a0: 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64  rMethods.LogBind
f7b0: 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  (flags))..      
f7c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f7d0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
f7e0: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
f7f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
f800: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
f810: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
f820: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
f830: 69 6e 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c  ind_null(handle,
f840: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
f850: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
f860: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
f870: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
f880: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
f890: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
f8a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f8b0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
f8c0: 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74   Bind_ParamCount
f8d0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
f8e0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
f8f0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
f900: 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  gs)..    {..    
f910: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
f920: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
f930: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
f940: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69  stmt;..        i
f950: 6e 74 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66  nt value = Unsaf
f960: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
f970: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
f980: 6d 65 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64  meter_count(hand
f990: 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le);....        
f9a0: 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
f9b0: 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29  s.LogBind(flags)
f9c0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
f9d0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
f9e0: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
f9f0: 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
fa00: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
fa10: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70  .LogMessage(Help
fa20: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
fa30: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
fa40: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
fa50: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
fa60: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
fa70: 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
fa80: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 63 6f   {0} paramter co
fa90: 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c 0d 0a 20  unt is {1}.",.. 
faa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
fab0: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 76 61 6c  andleIntPtr, val
fac0: 75 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ue));..        }
fad0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
fae0: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 7d  rn value;..    }
faf0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
fb00: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
fb10: 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61 6d 65 28   Bind_ParamName(
fb20: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
fb30: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
fb40: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
fb50: 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  s, int index).. 
fb60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
fb70: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
fb80: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
fb90: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
fba0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
fbb0: 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 21 53 51  name;....#if !SQ
fbc0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
fbd0: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d         int len =
fbe0: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d   0;..        nam
fbf0: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
fc00: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
fc10: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
fc20: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
fc30: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
fc40: 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29   index, ref len)
fc50: 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
fc60: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 55          name = U
fc70: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
fc80: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
fc90: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
fca0: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 68 61 6e 64  ameter_name(hand
fcb0: 6c 65 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  le, index), -1);
fcc0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
fcd0: 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65      if (HelperMe
fce0: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
fcf0: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ags))..        {
fd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
fd10: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
fd20: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
fd30: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
fd40: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
fd50: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
fd60: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
fd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
fd80: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
fd90: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
fda0: 20 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65            "State
fdb0: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
fdc0: 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73 20 7b  r #{1} name is {
fdd0: 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20 20 20  {{2}}}.",..     
fde0: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
fdf0: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
fe00: 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20  name));..       
fe10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
fe20: 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20 20 20  turn name;..    
fe30: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
fe40: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42  l override int B
fe50: 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53  ind_ParamIndex(S
fe60: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
fe70: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
fe80: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
fe90: 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d 4e 61  , string paramNa
fea0: 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  me)..    {..    
feb0: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
fec0: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
fed0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
fee0: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69  stmt;..        i
fef0: 6e 74 20 69 6e 64 65 78 20 3d 20 55 6e 73 61 66  nt index = Unsaf
ff00: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ff10: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
ff20: 6d 65 74 65 72 5f 69 6e 64 65 78 28 68 61 6e 64  meter_index(hand
ff30: 6c 65 2c 20 54 6f 55 54 46 38 28 70 61 72 61 6d  le, ToUTF8(param
ff40: 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name));....     
ff50: 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74     if (HelperMet
ff60: 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61  hods.LogBind(fla
ff70: 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  gs))..        {.
ff80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
ff90: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
ffa0: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
ffb0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
ffc0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48  Log.LogMessage(H
ffd0: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
ffe0: 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
10000 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
10010 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
10020 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d           "Statem
10030 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
10040 20 69 6e 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b   index of name {
10050 7b 7b 31 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22  {{1}}} is #{2}."
10060 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10070 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
10080 20 70 61 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65   paramName, inde
10090 78 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  x));..        }.
100a0 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
100b0 6e 20 69 6e 64 65 78 3b 0d 0a 20 20 20 20 7d 0d  n index;..    }.
100c0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
100d0 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c  override int Col
100e0 75 6d 6e 43 6f 75 6e 74 28 53 51 4c 69 74 65 53  umnCount(SQLiteS
100f0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a  tatement stmt)..
10100 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
10110 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
10120 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10130 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d  column_count(stm
10140 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b  t._sqlite_stmt);
10150 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10160 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10170 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61   string ColumnNa
10180 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
10190 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
101a0 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
101b0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
101c0 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
101d0 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50  = 0;..      IntP
101e0 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
101f0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10200 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69  e3_column_name_i
10210 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
10220 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
10230 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73   ref len);..#els
10240 65 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  e..      IntPtr 
10250 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
10260 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10270 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74  column_name(stmt
10280 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
10290 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ndex);..#endif..
102a0 20 20 20 20 20 20 69 66 20 28 70 20 3d 3d 20 49        if (p == I
102b0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
102c0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
102d0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 53  QLiteException(S
102e0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e  QLiteErrorCode.N
102f0 6f 4d 65 6d 2c 20 47 65 74 4c 61 73 74 45 72 72  oMem, GetLastErr
10300 6f 72 28 29 29 3b 0d 0a 23 69 66 20 21 53 51 4c  or());..#if !SQL
10310 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
10320 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
10330 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b  oString(p, len);
10340 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
10350 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
10360 6e 67 28 70 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64  ng(p, -1);..#end
10370 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
10380 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
10390 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  de TypeAffinity 
103a0 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53  ColumnAffinity(S
103b0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
103c0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
103d0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
103e0 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
103f0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10400 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d  _column_type(stm
10410 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
10420 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a  index);..    }..
10430 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10440 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
10450 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65  olumnType(SQLite
10460 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
10470 69 6e 74 20 69 6e 64 65 78 2c 20 72 65 66 20 54  int index, ref T
10480 79 70 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66  ypeAffinity nAff
10490 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20  inity)..    {.. 
104a0 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d         int len;.
104b0 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
104c0 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 6c  NDARD..        l
104d0 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  en = 0;..       
104e0 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61   IntPtr p = Unsa
104f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10500 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
10510 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70 28  ecltype_interop(
10520 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
10530 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65  t, index, ref le
10540 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
10550 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20      len = -1;.. 
10560 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20         IntPtr p 
10570 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
10580 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
10590 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74  lumn_decltype(st
105a0 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
105b0 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66   index);..#endif
105c0 0d 0a 20 20 20 20 20 20 20 20 6e 41 66 66 69 6e  ..        nAffin
105d0 69 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69  ity = ColumnAffi
105e0 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78  nity(stmt, index
105f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
10600 20 28 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a   ((p != IntPtr.Z
10610 65 72 6f 29 20 26 26 20 28 28 6c 65 6e 20 3e 20  ero) && ((len > 
10620 30 29 20 7c 7c 20 28 6c 65 6e 20 3d 3d 20 2d 31  0) || (len == -1
10630 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  )))..        {..
10640 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
10650 6e 67 20 64 65 63 6c 54 79 70 65 20 3d 20 55 54  ng declType = UT
10660 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
10670 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
10680 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
10690 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 63  sNullOrEmpty(dec
106a0 6c 54 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20  lType))..       
106b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
106c0 64 65 63 6c 54 79 70 65 3b 0d 0a 20 20 20 20 20  declType;..     
106d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
106e0 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74  string[] ar = st
106f0 6d 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f  mt.TypeDefinitio
10700 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ns;....        i
10710 66 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a  f (ar != null)..
10720 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10730 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78         if (index
10740 20 3c 20 61 72 2e 4c 65 6e 67 74 68 20 26 26 20   < ar.Length && 
10750 61 72 5b 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c  ar[index] != nul
10760 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
10770 20 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69 6e      return ar[in
10780 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d  dex];..        }
10790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
107a0 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b  rn String.Empty;
107b0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
107c0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
107d0 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78   int ColumnIndex
107e0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
107f0 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f   stmt, string co
10800 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  lumnName)..    {
10810 0d 0a 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20  ..      int x = 
10820 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74  ColumnCount(stmt
10830 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20  );....      for 
10840 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20  (int n = 0; n < 
10850 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b  x; n++)..      {
10860 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74  ..        if (St
10870 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c  ring.Compare(col
10880 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e  umnName, ColumnN
10890 61 6d 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74  ame(stmt, n), St
108a0 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
108b0 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
108c0 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) == 0)..       
108d0 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20     return n;..  
108e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74      }..      ret
108f0 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a  urn -1;..    }..
10900 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10910 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
10920 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d  olumnOriginalNam
10930 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
10940 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
10950 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
10960 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
10970 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
10980 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72   0;..      retur
10990 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
109a0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
109b0 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
109c0 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e  n_origin_name_in
109d0 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
109e0 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
109f0 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  ref len), len);.
10a00 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
10a10 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
10a20 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
10a30 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
10a40 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
10a50 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
10a60 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
10a70 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
10a80 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
10a90 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
10aa0 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61  ColumnDatabaseNa
10ab0 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
10ac0 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
10ad0 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
10ae0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
10af0 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
10b00 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
10b10 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
10b20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10b30 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
10b40 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
10b50 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
10b60 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
10b70 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e  x, ref len), len
10b80 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
10b90 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
10ba0 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
10bb0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10bc0 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
10bd0 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
10be0 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
10bf0 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
10c00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10c10 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
10c20 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65  ring ColumnTable
10c30 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Name(SQLiteState
10c40 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
10c50 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ndex)..    {..#i
10c60 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
10c70 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65  RD..      int le
10c80 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65  n = 0;..      re
10c90 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
10ca0 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
10cb0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
10cc0 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f  lumn_table_name_
10cd0 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
10ce0 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
10cf0 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29  , ref len), len)
10d00 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
10d10 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
10d20 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
10d30 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10d40 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
10d50 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
10d60 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29  tmt, index), -1)
10d70 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
10d80 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
10d90 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 44   override bool D
10da0 6f 65 73 54 61 62 6c 65 45 78 69 73 74 28 0d 0a  oesTableExist(..
10db0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
10dc0 61 74 61 42 61 73 65 2c 0d 0a 20 20 20 20 20 20  ataBase,..      
10dd0 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65 0d 0a    string table..
10de0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
10df0 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
10e00 20 64 61 74 61 54 79 70 65 20 3d 20 6e 75 6c 6c   dataType = null
10e10 3b 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f  ; /* NOT USED */
10e20 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
10e30 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65   collateSequence
10e40 20 3d 20 6e 75 6c 6c 3b 20 2f 2a 20 4e 4f 54 20   = null; /* NOT 
10e50 55 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20  USED */..       
10e60 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 20 3d 20   bool notNull = 
10e70 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 20 55 53  false; /* NOT US
10e80 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  ED */..        b
10e90 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 20 3d  ool primaryKey =
10ea0 20 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 20 55   false; /* NOT U
10eb0 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  SED */..        
10ec0 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65  bool autoIncreme
10ed0 6e 74 20 3d 20 66 61 6c 73 65 3b 20 2f 2a 20 4e  nt = false; /* N
10ee0 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 0d 0a 20 20  OT USED */....  
10ef0 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6c        return Col
10f00 75 6d 6e 4d 65 74 61 44 61 74 61 28 0d 0a 20 20  umnMetaData(..  
10f10 20 20 20 20 20 20 20 20 20 20 64 61 74 61 42 61            dataBa
10f20 73 65 2c 20 74 61 62 6c 65 2c 20 6e 75 6c 6c 2c  se, table, null,
10f30 20 66 61 6c 73 65 2c 20 72 65 66 20 64 61 74 61   false, ref data
10f40 54 79 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Type,..         
10f50 20 20 20 72 65 66 20 63 6f 6c 6c 61 74 65 53 65     ref collateSe
10f60 71 75 65 6e 63 65 2c 20 72 65 66 20 6e 6f 74 4e  quence, ref notN
10f70 75 6c 6c 2c 20 72 65 66 20 70 72 69 6d 61 72 79  ull, ref primary
10f80 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
10f90 20 20 72 65 66 20 61 75 74 6f 49 6e 63 72 65 6d    ref autoIncrem
10fa0 65 6e 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ent);..    }....
10fb0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10fc0 72 72 69 64 65 20 62 6f 6f 6c 20 43 6f 6c 75 6d  rride bool Colum
10fd0 6e 4d 65 74 61 44 61 74 61 28 73 74 72 69 6e 67  nMetaData(string
10fe0 20 64 61 74 61 42 61 73 65 2c 20 73 74 72 69 6e   dataBase, strin
10ff0 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67 20  g table, string 
11000 63 6f 6c 75 6d 6e 2c 20 62 6f 6f 6c 20 63 61 6e  column, bool can
11010 54 68 72 6f 77 2c 20 72 65 66 20 73 74 72 69 6e  Throw, ref strin
11020 67 20 64 61 74 61 54 79 70 65 2c 20 72 65 66 20  g dataType, ref 
11030 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65  string collateSe
11040 71 75 65 6e 63 65 2c 20 72 65 66 20 62 6f 6f 6c  quence, ref bool
11050 20 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62 6f   notNull, ref bo
11060 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20 72  ol primaryKey, r
11070 65 66 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72  ef bool autoIncr
11080 65 6d 65 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ement)..    {.. 
11090 20 20 20 20 20 49 6e 74 50 74 72 20 64 61 74 61       IntPtr data
110a0 54 79 70 65 50 74 72 20 3d 20 49 6e 74 50 74 72  TypePtr = IntPtr
110b0 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e  .Zero;..      In
110c0 74 50 74 72 20 63 6f 6c 6c 53 65 71 50 74 72 20  tPtr collSeqPtr 
110d0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
110e0 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75        int nnotNu
110f0 6c 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69  ll = 0;..      i
11100 6e 74 20 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d  nt nprimaryKey =
11110 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e   0;..      int n
11120 61 75 74 6f 49 6e 63 20 3d 20 30 3b 0d 0a 20 20  autoInc = 0;..  
11130 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
11140 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e  ode n;..      in
11150 74 20 64 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20  t dtLen;..      
11160 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69  int csLen;....#i
11170 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
11180 52 44 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20  RD..      dtLen 
11190 3d 20 30 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65  = 0;..      csLe
111a0 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6e 20  n = 0;..      n 
111b0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
111c0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61  thods.sqlite3_ta
111d0 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
111e0 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ata_interop(_sql
111f0 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42 61 73  , ToUTF8(dataBas
11200 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65  e), ToUTF8(table
11210 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e  ), ToUTF8(column
11220 29 2c 20 72 65 66 20 64 61 74 61 54 79 70 65 50  ), ref dataTypeP
11230 74 72 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50  tr, ref collSeqP
11240 74 72 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c  tr, ref nnotNull
11250 2c 20 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65  , ref nprimaryKe
11260 79 2c 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 2c  y, ref nautoInc,
11270 20 72 65 66 20 64 74 4c 65 6e 2c 20 72 65 66 20   ref dtLen, ref 
11280 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  csLen);..#else..
11290 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31        dtLen = -1
112a0 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d  ;..      csLen =
112b0 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20   -1;....      n 
112c0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
112d0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61  thods.sqlite3_ta
112e0 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
112f0 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ata(_sql, ToUTF8
11300 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54  (dataBase), ToUT
11310 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46  F8(table), ToUTF
11320 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64  8(column), ref d
11330 61 74 61 54 79 70 65 50 74 72 2c 20 72 65 66 20  ataTypePtr, ref 
11340 63 6f 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20  collSeqPtr, ref 
11350 6e 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70  nnotNull, ref np
11360 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e  rimaryKey, ref n
11370 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69  autoInc);..#endi
11380 66 0d 0a 20 20 20 20 20 20 69 66 20 28 63 61 6e  f..      if (can
11390 54 68 72 6f 77 20 26 26 20 28 6e 20 21 3d 20 53  Throw && (n != S
113a0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
113b0 6b 29 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  k)) throw new SQ
113c0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
113d0 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
113e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 64 61 74 61 54  ;....      dataT
113f0 79 70 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ype = UTF8ToStri
11400 6e 67 28 64 61 74 61 54 79 70 65 50 74 72 2c 20  ng(dataTypePtr, 
11410 64 74 4c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 63  dtLen);..      c
11420 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 20 3d  ollateSequence =
11430 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f   UTF8ToString(co
11440 6c 6c 53 65 71 50 74 72 2c 20 63 73 4c 65 6e 29  llSeqPtr, csLen)
11450 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 6f 74 4e 75  ;....      notNu
11460 6c 6c 20 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d  ll = (nnotNull =
11470 3d 20 31 29 3b 0d 0a 20 20 20 20 20 20 70 72 69  = 1);..      pri
11480 6d 61 72 79 4b 65 79 20 3d 20 28 6e 70 72 69 6d  maryKey = (nprim
11490 61 72 79 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a 20  aryKey == 1);.. 
114a0 20 20 20 20 20 61 75 74 6f 49 6e 63 72 65 6d 65       autoIncreme
114b0 6e 74 20 3d 20 28 6e 61 75 74 6f 49 6e 63 20 3d  nt = (nautoInc =
114c0 3d 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  = 1);....      r
114d0 65 74 75 72 6e 20 28 6e 20 3d 3d 20 53 51 4c 69  eturn (n == SQLi
114e0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 3b  teErrorCode.Ok);
114f0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
11500 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
11510 20 6f 62 6a 65 63 74 20 47 65 74 4f 62 6a 65 63   object GetObjec
11520 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
11530 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
11540 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
11550 20 20 20 73 77 69 74 63 68 20 28 43 6f 6c 75 6d     switch (Colum
11560 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20  nAffinity(stmt, 
11570 69 6e 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20  index))..       
11580 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11590 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
115a0 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20  y.Int64:..      
115b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
115c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115d0 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34   return GetInt64
115e0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11600 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
11610 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
11620 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20  .Double:..      
11630 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11650 20 72 65 74 75 72 6e 20 47 65 74 44 6f 75 62 6c   return GetDoubl
11660 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e(stmt, index);.
11670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11680 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11690 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
116a0 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20 20 20 20  y.Text:..       
116b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
116c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116d0 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28 73  return GetText(s
116e0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11700 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
11710 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  e TypeAffinity.B
11720 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  lob:..          
11730 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e               lon
11750 67 20 73 69 7a 65 20 3d 20 47 65 74 42 79 74 65  g size = GetByte
11760 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
11770 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a  , null, 0, 0);..
11780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11790 20 20 20 20 20 20 69 66 20 28 28 73 69 7a 65 20        if ((size 
117a0 3e 20 30 29 20 26 26 20 28 73 69 7a 65 20 3c 3d  > 0) && (size <=
117b0 20 69 6e 74 2e 4d 61 78 56 61 6c 75 65 29 29 0d   int.MaxValue)).
117c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
117d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
117e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117f0 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e  byte[] bytes = n
11800 65 77 20 62 79 74 65 5b 28 69 6e 74 29 73 69 7a  ew byte[(int)siz
11810 65 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e];....         
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
11830 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e  etBytes(stmt, in
11840 64 65 78 2c 20 30 2c 20 62 79 74 65 73 2c 20 30  dex, 0, bytes, 0
11850 2c 20 28 69 6e 74 29 73 69 7a 65 29 3b 0d 0a 0d  , (int)size);...
11860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11870 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11880 62 79 74 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  bytes;..        
11890 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
118a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118b0 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
118c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
118d0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
118e0 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c  ypeAffinity.Null
118f0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
11900 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11910 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11920 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a   DBNull.Value;..
11930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11940 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
11950 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
11960 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
11970 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20  Exception();..  
11980 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
11990 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75  nal override dou
119a0 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 53 51  ble GetDouble(SQ
119b0 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
119c0 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
119d0 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
119e0 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
119f0 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 72 65 74  EWORK..      ret
11a00 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
11a10 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11a20 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74  column_double(st
11a30 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
11a40 20 69 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20   index);..#elif 
11a50 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
11a60 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76  ..      double v
11a70 61 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20  alue = 0.0;..   
11a80 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
11a90 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
11aa0 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74  olumn_double_int
11ab0 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
11ac0 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
11ad0 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ef value);..    
11ae0 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
11af0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
11b00 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
11b10 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
11b20 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
11b30 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
11b40 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
11b50 47 65 74 42 6f 6f 6c 65 61 6e 28 53 51 4c 69 74  GetBoolean(SQLit
11b60 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
11b70 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
11b80 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
11b90 20 54 6f 42 6f 6f 6c 65 61 6e 28 47 65 74 4f 62   ToBoolean(GetOb
11ba0 6a 65 63 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  ject(stmt, index
11bb0 29 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  ), CultureInfo.I
11bc0 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c  nvariantCulture,
11bd0 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d   false);..    }.
11be0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11bf0 6f 76 65 72 72 69 64 65 20 73 62 79 74 65 20 47  override sbyte G
11c00 65 74 53 42 79 74 65 28 53 51 4c 69 74 65 53 74  etSByte(SQLiteSt
11c10 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
11c20 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
11c30 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e  .      return un
11c40 63 68 65 63 6b 65 64 28 28 73 62 79 74 65 29 28  checked((sbyte)(
11c50 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
11c60 6e 64 65 78 29 20 26 20 62 79 74 65 2e 4d 61 78  ndex) & byte.Max
11c70 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d  Value));..    }.
11c80 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11c90 6f 76 65 72 72 69 64 65 20 62 79 74 65 20 47 65  override byte Ge
11ca0 74 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74  tByte(SQLiteStat
11cb0 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
11cc0 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
11cd0 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
11ce0 65 63 6b 65 64 28 28 62 79 74 65 29 28 47 65 74  ecked((byte)(Get
11cf0 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
11d00 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c  x) & byte.MaxVal
11d10 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
11d20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11d30 72 72 69 64 65 20 73 68 6f 72 74 20 47 65 74 49  rride short GetI
11d40 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74 65  nt16(SQLiteState
11d50 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
11d60 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
11d70 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
11d80 63 6b 65 64 28 28 73 68 6f 72 74 29 28 47 65 74  cked((short)(Get
11d90 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
11da0 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56  x) & ushort.MaxV
11db0 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
11dc0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11dd0 76 65 72 72 69 64 65 20 75 73 68 6f 72 74 20 47  verride ushort G
11de0 65 74 55 49 6e 74 31 36 28 53 51 4c 69 74 65 53  etUInt16(SQLiteS
11df0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
11e00 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
11e10 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 75  ..      return u
11e20 6e 63 68 65 63 6b 65 64 28 28 75 73 68 6f 72 74  nchecked((ushort
11e30 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  )(GetInt32(stmt,
11e40 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f 72 74   index) & ushort
11e50 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20  .MaxValue));..  
11e60 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
11e70 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
11e80 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65   GetInt32(SQLite
11e90 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
11ea0 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
11eb0 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
11ec0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
11ed0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
11ee0 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c  mn_int(stmt._sql
11ef0 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
11f00 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
11f10 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
11f20 65 20 75 69 6e 74 20 47 65 74 55 49 6e 74 33 32  e uint GetUInt32
11f30 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
11f40 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
11f50 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11f60 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
11f70 28 28 75 69 6e 74 29 47 65 74 49 6e 74 33 32 28  ((uint)GetInt32(
11f80 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
11f90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11fa0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
11fb0 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 53 51 4c  ong GetInt64(SQL
11fc0 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
11fd0 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
11fe0 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
11ff0 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
12000 57 4f 52 4b 0d 0a 20 20 20 20 20 20 72 65 74 75  WORK..      retu
12010 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
12020 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
12030 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74  olumn_int64(stmt
12040 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
12050 6e 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53  ndex);..#elif !S
12060 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
12070 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
12080 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73   = 0;..      Uns
12090 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
120a0 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
120b0 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74  int64_interop(st
120c0 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
120d0 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
120e0 65 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  e);..      retur
120f0 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d  n value;..#else.
12100 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
12110 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
12120 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
12130 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
12140 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12150 69 64 65 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e  ide ulong GetUIn
12160 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
12170 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
12180 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
12190 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
121a0 6b 65 64 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e  ked((ulong)GetIn
121b0 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
121c0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
121d0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
121e0 64 65 20 73 74 72 69 6e 67 20 47 65 74 54 65 78  de string GetTex
121f0 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
12200 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
12210 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
12220 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
12230 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
12240 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72   0;..      retur
12250 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
12260 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12270 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
12280 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73  n_text_interop(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 2c 20 72 65 66 20 6c 65 6e  , index, ref len
122b0 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
122c0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
122d0 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
122e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
122f0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
12300 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  xt(stmt._sqlite_
12310 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20  stmt, index),.. 
12320 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
12330 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
12340 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28  e3_column_bytes(
12350 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
12360 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e  t, index));..#en
12370 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
12380 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12390 69 64 65 20 44 61 74 65 54 69 6d 65 20 47 65 74  ide DateTime Get
123a0 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53  DateTime(SQLiteS
123b0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
123c0 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
123d0 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 64 61 74  ..      if (_dat
123e0 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53  etimeFormat == S
123f0 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
12400 2e 54 69 63 6b 73 29 0d 0a 20 20 20 20 20 20 20  .Ticks)..       
12410 20 72 65 74 75 72 6e 20 54 69 63 6b 73 54 6f 44   return TicksToD
12420 61 74 65 54 69 6d 65 28 47 65 74 49 6e 74 36 34  ateTime(GetInt64
12430 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f  (stmt, index), _
12440 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a  datetimeKind);..
12450 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
12460 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d  datetimeFormat =
12470 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  = SQLiteDateForm
12480 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 29 0d 0a  ats.JulianDay)..
12490 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
124a0 6f 44 61 74 65 54 69 6d 65 28 47 65 74 44 6f 75  oDateTime(GetDou
124b0 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ble(stmt, index)
124c0 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29  , _datetimeKind)
124d0 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  ;..      else if
124e0 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61   (_datetimeForma
124f0 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46  t == SQLiteDateF
12500 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68  ormats.UnixEpoch
12510 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  )..        retur
12520 6e 20 55 6e 69 78 45 70 6f 63 68 54 6f 44 61 74  n UnixEpochToDat
12530 65 54 69 6d 65 28 47 65 74 49 6e 74 36 34 28 73  eTime(GetInt64(s
12540 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61  tmt, index), _da
12550 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a  tetimeKind);....
12560 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
12570 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74 20  DARD..      int 
12580 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  len = 0;..      
12590 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
125a0 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
125b0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
125c0 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f  lumn_text_intero
125d0 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
125e0 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
125f0 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
12600 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
12610 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61   ToDateTime(Unsa
12620 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12630 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
12640 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ext(stmt._sqlite
12650 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a  _stmt, index),..
12660 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
12670 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12680 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
12690 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
126a0 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65  mt, index));..#e
126b0 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
126c0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
126d0 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74  ride long GetByt
126e0 65 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  es(SQLiteStateme
126f0 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
12700 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66  ex, int nDataOff
12710 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
12720 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
12730 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  nt nLength)..   
12740 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c   {..      int nl
12750 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  en = UnsafeNativ
12760 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12770 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74  _column_bytes(st
12780 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
12790 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
127a0 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69    // If no desti
127b0 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72  nation buffer, r
127c0 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e  eturn the size n
127d0 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66  eeded...      if
127e0 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29   (bDest == null)
127f0 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d   return nlen;...
12800 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
12810 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
12820 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
12830 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44  ed + nStart > bD
12840 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70  est.Length) nCop
12850 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67  ied = bDest.Leng
12860 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20  th - nStart;..  
12870 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
12880 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20  + nDataOffset > 
12890 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20  nlen) nCopied = 
128a0 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73  nlen - nDataOffs
128b0 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  et;....      if 
128c0 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20  (nCopied > 0).. 
128d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
128e0 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
128f0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12900 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
12910 62 6c 6f 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74  blob(stmt._sqlit
12920 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e_stmt, index);.
12930 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68  ...        Marsh
12940 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29  al.Copy((IntPtr)
12950 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b  (ptr.ToInt64() +
12960 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62   nDataOffset), b
12970 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43  Dest, nStart, nC
12980 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d  opied);..      }
12990 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
129a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
129b0 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20  Copied = 0;..   
129c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
129d0 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
129e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
129f0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 63 68  rnal override ch
12a00 61 72 20 47 65 74 43 68 61 72 28 53 51 4c 69 74  ar GetChar(SQLit
12a10 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
12a20 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
12a30 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
12a40 20 43 6f 6e 76 65 72 74 2e 54 6f 43 68 61 72 28   Convert.ToChar(
12a50 47 65 74 55 49 6e 74 31 36 28 73 74 6d 74 2c 20  GetUInt16(stmt, 
12a60 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d  index));..    }.
12a70 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
12a80 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
12a90 74 43 68 61 72 73 28 53 51 4c 69 74 65 53 74 61  tChars(SQLiteSta
12aa0 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
12ab0 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74   index, int nDat
12ac0 61 4f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20  aOffset, char[] 
12ad0 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72  bDest, int nStar
12ae0 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d  t, int nLength).
12af0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
12b00 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69  t nlen;..      i
12b10 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
12b20 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73  ngth;....      s
12b30 74 72 69 6e 67 20 73 74 72 20 3d 20 47 65 74 54  tring str = GetT
12b40 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
12b50 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20  ;..      nlen = 
12b60 73 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20  str.Length;.... 
12b70 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d       if (bDest =
12b80 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e  = null) return n
12b90 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  len;....      if
12ba0 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61   (nCopied + nSta
12bb0 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74  rt > bDest.Lengt
12bc0 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65  h) nCopied = bDe
12bd0 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61  st.Length - nSta
12be0 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  rt;..      if (n
12bf0 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66  Copied + nDataOf
12c00 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f  fset > nlen) nCo
12c10 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44  pied = nlen - nD
12c20 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20  ataOffset;....  
12c30 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
12c40 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 73 74  > 0)..        st
12c50 72 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66  r.CopyTo(nDataOf
12c60 66 73 65 74 2c 20 62 44 65 73 74 2c 20 6e 53 74  fset, bDest, nSt
12c70 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a  art, nCopied);..
12c80 20 20 20 20 20 20 65 6c 73 65 20 6e 43 6f 70 69        else nCopi
12c90 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  ed = 0;....     
12ca0 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b   return nCopied;
12cb0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12cc0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12cd0 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c   bool IsNull(SQL
12ce0 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
12cf0 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
12d00 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
12d10 72 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  rn (ColumnAffini
12d20 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  ty(stmt, index) 
12d30 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
12d40 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Null);..    }...
12d50 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
12d60 65 72 72 69 64 65 20 69 6e 74 20 41 67 67 72 65  erride int Aggre
12d70 67 61 74 65 43 6f 75 6e 74 28 49 6e 74 50 74 72  gateCount(IntPtr
12d80 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
12d90 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
12da0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12db0 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65  ds.sqlite3_aggre
12dc0 67 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65  gate_count(conte
12dd0 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  xt);..    }.... 
12de0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
12df0 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
12e00 43 6f 64 65 20 43 72 65 61 74 65 46 75 6e 63 74  Code CreateFunct
12e10 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 46 75  ion(string strFu
12e20 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67  nction, int nArg
12e30 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c  s, bool needColl
12e40 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62  Seq, SQLiteCallb
12e50 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74 65  ack func, SQLite
12e60 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74 65  Callback funcste
12e70 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c 43 61  p, SQLiteFinalCa
12e80 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c  llback funcfinal
12e90 2c 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29  , bool canThrow)
12ea0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
12eb0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
12ec0 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
12ed0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
12ee0 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
12ef0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12f00 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
12f10 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
12f20 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
12f30 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e  n), nArgs, 4, In
12f40 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
12f50 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
12f60 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53  inal, (needCollS
12f70 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20  eq == true) ? 1 
12f80 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  : 0);..      if 
12f90 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
12fa0 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e  rCode.Ok) n = Un
12fb0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12fc0 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
12fd0 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f  _function_intero
12fe0 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  p(_sql, ToUTF8(s
12ff0 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72  trFunction), nAr
13000 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65  gs, 1, IntPtr.Ze
13010 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74  ro, func, funcst
13020 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28  ep, funcfinal, (
13030 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74  needCollSeq == t
13040 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a  rue) ? 1 : 0);..
13050 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d  #else..      n =
13060 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13070 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
13080 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71  ate_function(_sq
13090 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
130a0 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34  ction), nArgs, 4
130b0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
130c0 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
130d0 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20  uncfinal);..    
130e0 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
130f0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e  eErrorCode.Ok) n
13100 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
13110 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
13120 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f  reate_function(_
13130 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
13140 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
13150 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
13160 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
13170 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65   funcfinal);..#e
13180 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
13190 63 61 6e 54 68 72 6f 77 20 26 26 20 28 6e 20 21  canThrow && (n !
131a0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
131b0 65 2e 4f 6b 29 29 20 74 68 72 6f 77 20 6e 65 77  e.Ok)) throw new
131c0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
131d0 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
131e0 28 29 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  ());..      retu
131f0 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  rn n;..    }....
13200 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
13210 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
13220 72 43 6f 64 65 20 43 72 65 61 74 65 43 6f 6c 6c  rCode CreateColl
13230 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72  ation(string str
13240 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74  Collation, SQLit
13250 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 2c  eCollation func,
13260 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e   SQLiteCollation
13270 20 66 75 6e 63 31 36 2c 20 62 6f 6f 6c 20 63 61   func16, bool ca
13280 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a  nThrow)..    {..
13290 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
132a0 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
132b0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
132c0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
132d0 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  lation(_sql, ToU
132e0 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e  TF8(strCollation
132f0 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e 5a 65 72  ), 2, IntPtr.Zer
13300 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20 20  o, func16);..   
13310 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
13320 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
13330 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
13340 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13350 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
13360 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
13370 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c 20  rCollation), 1, 
13380 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
13390 63 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 63  c);..      if (c
133a0 61 6e 54 68 72 6f 77 20 26 26 20 28 6e 20 21 3d  anThrow && (n !=
133b0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
133c0 2e 4f 6b 29 29 20 74 68 72 6f 77 20 6e 65 77 20  .Ok)) throw new 
133d0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
133e0 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
133f0 29 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ));..      retur
13400 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  n n;..    }.... 
13410 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13420 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74  ride int Context
13430 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43  CollateCompare(C
13440 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
13450 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72  Enum enc, IntPtr
13460 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
13470 20 73 31 2c 20 73 74 72 69 6e 67 20 73 32 29 0d   s1, string s2).
13480 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
13490 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
134a0 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a      byte[] b1;..
134b0 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b        byte[] b2;
134c0 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54  ..      System.T
134d0 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e  ext.Encoding con
134e0 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a  verter = null;..
134f0 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
13500 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  enc)..      {.. 
13510 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
13520 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
13530 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20  m.UTF8:..       
13540 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
13550 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
13560 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20  ing.UTF8;..     
13570 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
13580 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
13590 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
135a0 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20  UTF16LE:..      
135b0 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
135c0 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
135d0 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ding.Unicode;.. 
135e0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
135f0 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
13600 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
13610 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20  num.UTF16BE:..  
13620 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
13630 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
13640 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69  Encoding.BigEndi
13650 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  anUnicode;..    
13660 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
13670 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62      }....      b
13680 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  1 = converter.Ge
13690 74 42 79 74 65 73 28 73 31 29 3b 0d 0a 20 20 20  tBytes(s1);..   
136a0 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65     b2 = converte
136b0 72 2e 47 65 74 42 79 74 65 73 28 73 32 29 3b 0d  r.GetBytes(s2);.
136c0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
136d0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
136e0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ods.sqlite3_cont
136f0 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f  ext_collcompare_
13700 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
13710 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20   b1, b1.Length, 
13720 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d  b2, b2.Length);.
13730 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
13740 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
13750 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
13760 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
13770 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13780 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
13790 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d  ontextCollateCom
137a0 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  pare(CollationEn
137b0 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20  codingEnum enc, 
137c0 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
137d0 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b  char[] c1, char[
137e0 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ] c2)..    {..#i
137f0 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
13800 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  RD..      byte[]
13810 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65   b1;..      byte
13820 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79  [] b2;..      Sy
13830 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
13840 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e  ng converter = n
13850 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ull;....      sw
13860 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20  itch (enc)..    
13870 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
13880 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
13890 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20  ingEnum.UTF8:.. 
138a0 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
138b0 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
138c0 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d  .Encoding.UTF8;.
138d0 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
138e0 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
138f0 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
13900 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a  gEnum.UTF16LE:..
13910 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
13920 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
13930 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f  t.Encoding.Unico
13940 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
13950 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
13960 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
13970 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42  odingEnum.UTF16B
13980 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
13990 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
139a0 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42  .Text.Encoding.B
139b0 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b  igEndianUnicode;
139c0 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
139d0 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  k;..      }.... 
139e0 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72       b1 = conver
139f0 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 31 29  ter.GetBytes(c1)
13a00 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f  ;..      b2 = co
13a10 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
13a20 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  (c2);....      r
13a30 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
13a40 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13a50 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f  3_context_collco
13a60 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f  mpare_interop(co
13a70 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65  ntext, b1, b1.Le
13a80 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e  ngth, b2, b2.Len
13a90 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  gth);..#else..  
13aa0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
13ab0 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
13ac0 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
13ad0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
13ae0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
13af0 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
13b00 63 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53  ce GetCollationS
13b10 65 71 75 65 6e 63 65 28 53 51 4c 69 74 65 46 75  equence(SQLiteFu
13b20 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74  nction func, Int
13b30 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20  Ptr context)..  
13b40 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
13b50 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
13b60 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
13b70 63 65 20 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c  ce seq = new Col
13b80 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 29  lationSequence()
13b90 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  ;..      int len
13ba0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74   = 0;..      int
13bb0 20 74 79 70 65 20 3d 20 30 3b 0d 0a 20 20 20 20   type = 0;..    
13bc0 20 20 69 6e 74 20 65 6e 63 20 3d 20 30 3b 0d 0a    int enc = 0;..
13bd0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
13be0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13bf0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
13c00 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74  text_collseq_int
13c10 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65  erop(context, re
13c20 66 20 74 79 70 65 2c 20 72 65 66 20 65 6e 63 2c  f type, ref enc,
13c30 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20   ref len);....  
13c40 20 20 20 20 69 66 20 28 70 20 21 3d 20 6e 75 6c      if (p != nul
13c50 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54  l) seq.Name = UT
13c60 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
13c70 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 54  n);..      seq.T
13c80 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ype = (Collation
13c90 54 79 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a  TypeEnum)type;..
13ca0 20 20 20 20 20 20 73 65 71 2e 5f 66 75 6e 63 20        seq._func 
13cb0 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73  = func;..      s
13cc0 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43  eq.Encoding = (C
13cd0 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
13ce0 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20  Enum)enc;....   
13cf0 20 20 20 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a     return seq;..
13d00 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
13d10 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
13d20 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
13d30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
13d40 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
13d50 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
13d60 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65  etParamValueByte
13d70 73 28 49 6e 74 50 74 72 20 70 2c 20 69 6e 74 20  s(IntPtr p, int 
13d80 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74  nDataOffset, byt
13d90 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  e[] bDest, int n
13da0 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
13db0 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
13dc0 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73    int nlen = Uns
13dd0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13de0 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
13df0 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20  ytes(p);....    
13e00 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69    // If no desti
13e10 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72  nation buffer, r
13e20 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e  eturn the size n
13e30 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66  eeded...      if
13e40 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29   (bDest == null)
13e50 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d   return nlen;...
13e60 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
13e70 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
13e80 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
13e90 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44  ed + nStart > bD
13ea0 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70  est.Length) nCop
13eb0 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67  ied = bDest.Leng
13ec0 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20  th - nStart;..  
13ed0 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
13ee0 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20  + nDataOffset > 
13ef0 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20  nlen) nCopied = 
13f00 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73  nlen - nDataOffs
13f10 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  et;....      if 
13f20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20  (nCopied > 0).. 
13f30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13f40 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
13f50 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13f60 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
13f70 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20  lob(p);....     
13f80 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
13f90 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49  (IntPtr)(ptr.ToI
13fa0 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66  nt64() + nDataOf
13fb0 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53  fset), bDest, nS
13fc0 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
13fd0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
13fe0 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
13ff0 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d         nCopied =
14000 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   0;..      }....
14010 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
14020 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
14030 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14040 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
14050 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65  ParamValueDouble
14060 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
14070 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
14080 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
14090 4f 52 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ORK..      retur
140a0 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
140b0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
140c0 6c 75 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b  lue_double(ptr);
140d0 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
140e0 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
140f0 64 6f 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 30  double value = 0
14100 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  .0;..      Unsaf
14110 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
14120 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
14130 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c  ble_interop(ptr,
14140 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
14150 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
14160 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
14170 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
14180 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
14190 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
141a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
141b0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
141c0 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
141d0 74 33 32 28 49 6e 74 50 74 72 20 70 74 72 29 0d  t32(IntPtr ptr).
141e0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
141f0 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
14200 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
14210 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b  _value_int(ptr);
14220 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
14230 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
14240 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61   long GetParamVa
14250 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20  lueInt64(IntPtr 
14260 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ptr)..    {..#if
14270 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
14280 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
14290 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
142a0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
142b0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
142c0 34 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21  4(ptr);..#elif !
142d0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
142e0 0a 20 20 20 20 20 20 49 6e 74 36 34 20 76 61 6c  .      Int64 val
142f0 75 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55  ue = 0;..      U
14300 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14310 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
14320 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70  _int64_interop(p
14330 74 72 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  tr, ref value);.
14340 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
14350 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  lue;..#else..   
14360 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
14370 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
14380 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
14390 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
143a0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
143b0 73 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56  string GetParamV
143c0 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72 20  alueText(IntPtr 
143d0 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ptr)..    {..#if
143e0 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
143f0 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
14400 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
14410 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
14420 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
14430 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
14440 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  ue_text_interop(
14450 70 74 72 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c  ptr, ref len), l
14460 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
14470 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
14480 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
14490 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
144a0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74  e3_value_text(pt
144b0 72 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  r),..        Uns
144c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
144d0 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
144e0 79 74 65 73 28 70 74 72 29 29 3b 0d 0a 23 65 6e  ytes(ptr));..#en
144f0 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
14500 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
14510 69 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ide TypeAffinity
14520 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79   GetParamValueTy
14530 70 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  pe(IntPtr ptr)..
14540 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
14550 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
14560 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14570 76 61 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b  value_type(ptr);
14580 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
14590 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
145a0 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62   void ReturnBlob
145b0 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
145c0 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a   byte[] value)..
145d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
145e0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
145f0 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
14600 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61  blob(context, va
14610 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  lue, value.Lengt
14620 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
14630 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
14640 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
14650 65 20 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75  e void ReturnDou
14660 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ble(IntPtr conte
14670 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65  xt, double value
14680 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
14690 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
146a0 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
146b0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
146c0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
146d0 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78  lt_double(contex
146e0 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69  t, value);..#eli
146f0 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
14700 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RD..      Unsafe
14710 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14720 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
14730 62 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  ble_interop(cont
14740 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  ext, ref value);
14750 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
14760 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
14770 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
14780 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
14790 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
147a0 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
147b0 20 52 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74   ReturnError(Int
147c0 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
147d0 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
147e0 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
147f0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
14800 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
14810 72 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46  r(context, ToUTF
14820 38 28 76 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e  8(value), value.
14830 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d  Length);..    }.
14840 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
14850 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
14860 74 75 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72  turnInt32(IntPtr
14870 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 76 61   context, int va
14880 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
14890 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
148a0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
148b0 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78  esult_int(contex
148c0 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  t, value);..    
148d0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
148e0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
148f0 52 65 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50  ReturnInt64(IntP
14900 74 72 20 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67  tr context, long
14910 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
14920 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
14930 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
14940 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
14950 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
14960 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63  3_result_int64(c
14970 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
14980 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
14990 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55  TANDARD..      U
149a0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
149b0 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
149c0 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  t_int64_interop(
149d0 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c  context, ref val
149e0 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
149f0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
14a00 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
14a10 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
14a20 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
14a30 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
14a40 76 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28  void ReturnNull(
14a50 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
14a60 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
14a70 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
14a80 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
14a90 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d  _null(context);.
14aa0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
14ab0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
14ac0 76 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74 28  void ReturnText(
14ad0 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
14ae0 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
14af0 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65     {..      byte
14b00 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61  [] b = ToUTF8(va
14b10 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73  lue);..      Uns
14b20 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
14b30 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
14b40 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f  text(context, To
14b50 55 54 46 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c  UTF8(value), b.L
14b60 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50  ength - 1, (IntP
14b70 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d  tr)(-1));..    }
14b80 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
14b90 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20  VIRTUAL_TABLE.. 
14ba0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
14bb0 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
14bc0 69 6e 65 73 20 74 68 65 20 66 69 6c 65 20 6e 61  ines the file na
14bd0 6d 65 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65  me of the native
14be0 20 6c 69 62 72 61 72 79 20 63 6f 6e 74 61 69 6e   library contain
14bf0 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 0d 0a  ing the native..
14c00 20 20 20 20 2f 2f 2f 20 22 76 74 73 68 69 6d 22      /// "vtshim"
14c10 20 65 78 74 65 6e 73 69 6f 6e 20 2d 41 4e 44 2d   extension -AND-
14c20 20 77 68 65 74 68 65 72 20 69 74 20 73 68 6f 75   whether it shou
14c30 6c 64 20 62 65 20 64 79 6e 61 6d 69 63 61 6c 6c  ld be dynamicall
14c40 79 20 6c 6f 61 64 65 64 20 62 79 0d 0a 20 20 20  y loaded by..   
14c50 20 2f 2f 2f 20 74 68 69 73 20 63 6c 61 73 73 2e   /// this class.
14c60 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
14c70 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
14c80 61 72 61 6d 20 6e 61 6d 65 3d 22 69 73 4c 6f 61  aram name="isLoa
14c90 64 4e 65 65 64 65 64 22 3e 0d 0a 20 20 20 20 2f  dNeeded">..    /
14ca0 2f 2f 20 54 68 69 73 20 6f 75 74 70 75 74 20 70  // This output p
14cb0 61 72 61 6d 65 74 65 72 20 77 69 6c 6c 20 62 65  arameter will be
14cc0 20 73 65 74 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f   set to non-zero
14cd0 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64   if the returned
14ce0 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f   native..    ///
14cf0 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61   library file na
14d00 6d 65 20 73 68 6f 75 6c 64 20 62 65 20 64 79 6e  me should be dyn
14d10 61 6d 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20  amically loaded 
14d20 70 72 69 6f 72 20 74 6f 20 61 74 74 65 6d 70 74  prior to attempt
14d30 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  ing..    /// the
14d40 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 6e 61 74   creation of nat
14d50 69 76 65 20 64 69 73 70 6f 73 61 62 6c 65 20 65  ive disposable e
14d60 78 74 65 6e 73 69 6f 6e 20 6d 6f 64 75 6c 65 73  xtension modules
14d70 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
14d80 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
14d90 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
14da0 54 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 66  The file name of
14db0 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72   the native libr
14dc0 61 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ary containing t
14dd0 68 65 20 6e 61 74 69 76 65 20 22 76 74 73 68 69  he native "vtshi
14de0 6d 22 0d 0a 20 20 20 20 2f 2f 2f 20 65 78 74 65  m"..    /// exte
14df0 6e 73 69 6f 6e 20 2d 4f 52 2d 20 6e 75 6c 6c 20  nsion -OR- null 
14e00 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  if it cannot be 
14e10 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20  determined...   
14e20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
14e30 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72  .    private str
14e40 69 6e 67 20 47 65 74 53 68 69 6d 45 78 74 65 6e  ing GetShimExten
14e50 73 69 6f 6e 46 69 6c 65 4e 61 6d 65 28 0d 0a 20  sionFileName(.. 
14e60 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
14e70 69 73 4c 6f 61 64 4e 65 65 64 65 64 20 2f 2a 20  isLoadNeeded /* 
14e80 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
14e90 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14ea0 20 20 69 66 20 28 5f 73 68 69 6d 49 73 4c 6f 61    if (_shimIsLoa
14eb0 64 4e 65 65 64 65 64 20 21 3d 20 6e 75 6c 6c 29  dNeeded != null)
14ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 73  ..            is
14ed0 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 28 62 6f  LoadNeeded = (bo
14ee0 6f 6c 29 5f 73 68 69 6d 49 73 4c 6f 61 64 4e 65  ol)_shimIsLoadNe
14ef0 65 64 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 65  eded;..        e
14f00 6c 73 65 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  lse..#if SQLITE_
14f10 53 54 41 4e 44 41 52 44 20 7c 7c 20 55 53 45 5f  STANDARD || USE_
14f20 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 7c 7c 20 50  INTEROP_DLL || P
14f30 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
14f40 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
14f50 20 20 20 20 20 20 69 73 4c 6f 61 64 4e 65 65 64        isLoadNeed
14f60 65 64 20 3d 20 48 65 6c 70 65 72 4d 65 74 68 6f  ed = HelperMetho
14f70 64 73 2e 49 73 57 69 6e 64 6f 77 73 28 29 3b 20  ds.IsWindows(); 
14f80 2f 2a 20 43 4f 4d 50 41 54 20 2a 2f 0d 0a 23 65  /* COMPAT */..#e
14f90 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
14fa0 20 69 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20   isLoadNeeded = 
14fb0 66 61 6c 73 65 3b 20 2f 2a 20 6d 69 78 65 64 2d  false; /* mixed-
14fc0 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 2a 2f  mode assembly */
14fd0 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
14fe0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
14ff0 61 6d 65 20 3d 20 5f 73 68 69 6d 45 78 74 65 6e  ame = _shimExten
15000 73 69 6f 6e 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  sionFileName;...
15010 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c  .        if (fil
15020 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eName != null)..
15030 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
15040 72 6e 20 66 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  rn fileName;....
15050 23 69 66 20 28 53 51 4c 49 54 45 5f 53 54 41 4e  #if (SQLITE_STAN
15060 44 41 52 44 20 7c 7c 20 55 53 45 5f 49 4e 54 45  DARD || USE_INTE
15070 52 4f 50 5f 44 4c 4c 20 7c 7c 20 50 4c 41 54 46  ROP_DLL || PLATF
15080 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
15090 57 4f 52 4b 29 20 26 26 20 50 52 45 4c 4f 41 44  WORK) && PRELOAD
150a0 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59 0d  _NATIVE_LIBRARY.
150b0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
150c0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
150d0 6f 64 73 2e 47 65 74 4e 61 74 69 76 65 4c 69 62  ods.GetNativeLib
150e0 72 61 72 79 46 69 6c 65 4e 61 6d 65 4f 6e 6c 79  raryFileNameOnly
150f0 28 29 3b 20 2f 2a 20 43 4f 4d 50 41 54 20 2a 2f  (); /* COMPAT */
15100 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
15110 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23   return null;..#
15120 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
15130 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
15140 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73  >..    /// Calls
15150 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69   the native SQLi
15160 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
15170 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 72 65 61  in order to crea
15180 74 65 20 61 20 64 69 73 70 6f 73 61 62 6c 65 0d  te a disposable.
15190 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20  .    /// module 
151a0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69  containing the i
151b0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
151c0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
151d0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
151e0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
151f0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75  param name="modu
15200 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  le">..    /// Th
15210 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20  e module object 
15220 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
15230 63 72 65 61 74 69 6e 67 20 74 68 65 20 6e 61 74  creating the nat
15240 69 76 65 20 64 69 73 70 6f 73 61 62 6c 65 20 6d  ive disposable m
15250 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  odule...    /// 
15260 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
15270 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
15280 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
15290 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68  The flags for th
152a0 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65  e associated <se
152b0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
152c0 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a  nnection" /> obj
152d0 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
152e0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
152f0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
15300 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61  erride void Crea
15310 74 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d  teModule(SQLiteM
15320 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51  odule module, SQ
15330 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
15340 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20  ags flags)..    
15350 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d  {..        if (m
15360 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
15370 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
15380 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
15390 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64  llException("mod
153a0 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ule");....      
153b0 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68    if (HelperMeth
153c0 6f 64 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 28  ods.NoLogModule(
153d0 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  flags))..       
153e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
153f0 6d 6f 64 75 6c 65 2e 4c 6f 67 45 72 72 6f 72 73  module.LogErrors
15400 20 3d 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73   = HelperMethods
15410 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f 72 28  .LogModuleError(
15420 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20  flags);..       
15430 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45       module.LogE
15440 78 63 65 70 74 69 6f 6e 73 20 3d 20 48 65 6c 70  xceptions = Help
15450 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 4d 6f 64  erMethods.LogMod
15460 75 6c 65 45 78 63 65 70 74 69 6f 6e 28 66 6c 61  uleException(fla
15470 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gs);..        }.
15480 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  ...        if (_
15490 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
154a0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
154b0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
154c0 69 6f 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20  ion("connection 
154d0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
154e0 61 6e 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  andle");....    
154f0 20 20 20 20 62 6f 6f 6c 20 69 73 4c 6f 61 64 4e      bool isLoadN
15500 65 65 64 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a  eeded = false;..
15510 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
15520 69 6c 65 4e 61 6d 65 20 3d 20 47 65 74 53 68 69  ileName = GetShi
15530 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61  mExtensionFileNa
15540 6d 65 28 72 65 66 20 69 73 4c 6f 61 64 4e 65 65  me(ref isLoadNee
15550 64 65 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ded);....       
15560 20 69 66 20 28 69 73 4c 6f 61 64 4e 65 65 64 65   if (isLoadNeede
15570 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
15580 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
15590 69 6c 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  ileName == null)
155a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
155b0 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
155c0 74 65 45 78 63 65 70 74 69 6f 6e 28 22 74 68 65  teException("the
155d0 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74   file name for t
155e0 68 65 20 5c 22 76 74 73 68 69 6d 5c 22 20 65 78  he \"vtshim\" ex
155f0 74 65 6e 73 69 6f 6e 20 69 73 20 75 6e 6b 6e 6f  tension is unkno
15600 77 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  wn");....       
15610 20 20 20 20 20 69 66 20 28 5f 73 68 69 6d 45 78       if (_shimEx
15620 74 65 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 20  tensionProcName 
15630 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15640 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
15650 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
15660 69 6f 6e 28 22 74 68 65 20 65 6e 74 72 79 20 70  ion("the entry p
15670 6f 69 6e 74 20 66 6f 72 20 74 68 65 20 5c 22 76  oint for the \"v
15680 74 73 68 69 6d 5c 22 20 65 78 74 65 6e 73 69 6f  tshim\" extensio
15690 6e 20 69 73 20 75 6e 6b 6e 6f 77 6e 22 29 3b 0d  n is unknown");.
156a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
156b0 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28  etLoadExtension(
156c0 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
156d0 20 20 20 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f      LoadExtensio
156e0 6e 28 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 68 69  n(fileName, _shi
156f0 6d 45 78 74 65 6e 73 69 6f 6e 50 72 6f 63 4e 61  mExtensionProcNa
15700 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  me);..        }.
15710 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d  ...        if (m
15720 6f 64 75 6c 65 2e 43 72 65 61 74 65 44 69 73 70  odule.CreateDisp
15730 6f 73 61 62 6c 65 4d 6f 64 75 6c 65 28 5f 73 71  osableModule(_sq
15740 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  l))..        {..
15750 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15760 5f 6d 6f 64 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c  _modules == null
15770 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15780 20 20 20 5f 6d 6f 64 75 6c 65 73 20 3d 20 6e 65     _modules = ne
15790 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  w Dictionary<str
157a0 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c  ing, SQLiteModul
157b0 65 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e>();....       
157c0 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73 2e 41 64       _modules.Ad
157d0 64 28 6d 6f 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d  d(module.Name, m
157e0 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  odule);....     
157f0 20 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50         if (_useP
15800 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ool)..          
15810 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15820 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20       _usePool = 
15830 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e  false;....#if !N
15840 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
15850 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
15860 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N..             
15870 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
15880 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
15890 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158b0 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
158c0 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
158d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
158e0 20 20 20 20 20 22 43 72 65 61 74 65 4d 6f 64 75       "CreateModu
158f0 6c 65 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c  le (Pool) Disabl
15900 65 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ed: {0}",..     
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48                 H
15920 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29  andleToString())
15930 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
15940 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
15950 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
15960 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
15970 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
15980 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
15990 74 69 6f 6e 28 47 65 74 4c 61 73 74 45 72 72 6f  tion(GetLastErro
159a0 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  r());..        }
159b0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
159c0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
159d0 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
159e0 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f  native SQLite co
159f0 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72  re library in or
15a00 64 65 72 20 74 6f 20 63 6c 65 61 6e 75 70 20 74  der to cleanup t
15a10 68 65 20 72 65 73 6f 75 72 63 65 73 0d 0a 20 20  he resources..  
15a20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
15a30 20 77 69 74 68 20 61 20 6d 6f 64 75 6c 65 20 63   with a module c
15a40 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d  ontaining the im
15a50 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
15a60 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
15a70 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
15a80 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
15a90 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
15aa0 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
15ab0 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 70   module object p
15ac0 72 65 76 69 6f 75 73 6c 79 20 70 61 73 73 65 64  reviously passed
15ad0 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65   to the <see cre
15ae0 66 3d 22 43 72 65 61 74 65 4d 6f 64 75 6c 65 22  f="CreateModule"
15af0 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 74   />..    /// met
15b00 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  hod...    /// </
15b10 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
15b20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
15b30 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  gs">..    /// Th
15b40 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20  e flags for the 
15b50 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20  associated <see 
15b60 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e  cref="SQLiteConn
15b70 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63  ection" /> objec
15b80 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
15b90 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
15ba0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
15bb0 72 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73  ride void Dispos
15bc0 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f  eModule(SQLiteMo
15bd0 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c  dule module, SQL
15be0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
15bf0 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b  gs flags)..    {
15c00 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f  ..        if (mo
15c10 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
15c20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
15c30 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
15c40 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75  lException("modu
15c50 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le");....       
15c60 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28   module.Dispose(
15c70 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69  );..    }..#endi
15c80 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  f....    interna
15c90 6c 20 6f 76 65 72 72 69 64 65 20 49 6e 74 50 74  l override IntPt
15ca0 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65  r AggregateConte
15cb0 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  xt(IntPtr contex
15cc0 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
15cd0 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
15ce0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
15cf0 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f  te3_aggregate_co
15d00 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 31  ntext(context, 1
15d10 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66  );..    }....#if
15d20 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c   INTEROP_VIRTUAL
15d30 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20  _TABLE..    /// 
15d40 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
15d50 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74  // Calls the nat
15d60 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  ive SQLite core 
15d70 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72  library in order
15d80 20 74 6f 20 64 65 63 6c 61 72 65 20 61 20 76 69   to declare a vi
15d90 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
15da0 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65   /// in response
15db0 20 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20   to a call into 
15dc0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
15dd0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
15de0 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a  le.xCreate" />..
15df0 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20      /// or <see 
15e00 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
15e10 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65  iveModule.xConne
15e20 63 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74  ct" /> virtual t
15e30 61 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20  able methods... 
15e40 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
15e50 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
15e60 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e  m name="module">
15e70 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69  ..    /// The vi
15e80 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
15e90 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65  le that is to be
15ea0 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
15eb0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
15ec0 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 69 6e  le..    /// bein
15ed0 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20  g declared...   
15ee0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
15ef0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
15f00 6d 65 3d 22 73 74 72 53 71 6c 22 3e 0d 0a 20 20  me="strSql">..  
15f10 20 20 2f 2f 2f 20 54 68 65 20 73 74 72 69 6e 67    /// The string
15f20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
15f30 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 64 65  SQL statement de
15f40 73 63 72 69 62 69 6e 67 20 74 68 65 20 76 69 72  scribing the vir
15f50 74 75 61 6c 20 74 61 62 6c 65 20 74 6f 0d 0a 20  tual table to.. 
15f60 20 20 20 2f 2f 2f 20 62 65 20 64 65 63 6c 61 72     /// be declar
15f70 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
15f80 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
15f90 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f  param name="erro
15fa0 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f  r">..    /// Upo
15fb0 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65 20 63  n success, the c
15fc0 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20  ontents of this 
15fd0 70 61 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e  parameter are un
15fe0 64 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66  defined.  Upon f
15ff0 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f  ailure,..    ///
16000 20 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61   it should conta
16010 69 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  in an appropriat
16020 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  e error message.
16030 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
16040 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
16050 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
16060 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
16070 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
16080 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
16090 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
160a0 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
160b0 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65  rrorCode Declare
160c0 56 69 72 74 75 61 6c 54 61 62 6c 65 28 0d 0a 20  VirtualTable(.. 
160d0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64         SQLiteMod
160e0 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20  ule module,..   
160f0 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 53       string strS
16100 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66  ql,..        ref
16110 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
16120 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
16130 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71  .        if (_sq
16140 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l == null)..    
16150 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16160 20 20 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e     error = "conn
16170 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e  ection has an in
16180 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a  valid handle";..
16190 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
161a0 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
161b0 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
161c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
161d0 49 6e 74 50 74 72 20 70 53 71 6c 20 3d 20 49 6e  IntPtr pSql = In
161e0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
161f0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
16200 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16210 20 20 70 53 71 6c 20 3d 20 53 51 4c 69 74 65 53    pSql = SQLiteS
16220 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
16230 46 72 6f 6d 53 74 72 69 6e 67 28 73 74 72 53 71  FromString(strSq
16240 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
16250 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
16260 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
16270 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
16280 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
16290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
162a0 20 20 5f 73 71 6c 2c 20 70 53 71 6c 29 3b 0d 0a    _sql, pSql);..
162b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
162c0 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((n == SQLiteEr
162d0 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28  rorCode.Ok) && (
162e0 6d 6f 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 29  module != null))
162f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16300 20 20 6d 6f 64 75 6c 65 2e 44 65 63 6c 61 72 65    module.Declare
16310 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  d = true;....   
16320 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
16330 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
16340 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65  e.Ok) error = Ge
16350 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d  tLastError();...
16360 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
16370 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20  urn n;..        
16380 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
16390 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
163a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
163b0 53 71 6c 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  Sql != IntPtr.Ze
163c0 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
163d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
163e0 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79      SQLiteMemory
163f0 2e 46 72 65 65 28 70 53 71 6c 29 3b 0d 0a 20 20  .Free(pSql);..  
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 53                pS
16410 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ql = IntPtr.Zero
16420 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
16430 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
16440 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
16450 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
16460 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76   Calls the nativ
16470 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
16480 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  brary in order t
16490 6f 20 64 65 63 6c 61 72 65 20 61 20 76 69 72 74  o declare a virt
164a0 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  ual table..    /
164b0 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 72  // function in r
164c0 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c  esponse to a cal
164d0 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20  l into the <see 
164e0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
164f0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
16500 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f  e" />..    /// o
16510 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  r <see cref="ISQ
16520 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
16530 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69  .xConnect" /> vi
16540 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68  rtual table meth
16550 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ods...    /// </
16560 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
16570 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
16580 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  odule">..    ///
16590 20 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   The virtual tab
165a0 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69  le module that i
165b0 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69  s to be responsi
165c0 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72 74  ble for the virt
165d0 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  ual table..    /
165e0 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e  // function bein
165f0 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20  g declared...   
16600 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
16610 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
16620 6d 65 3d 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e  me="argumentCoun
16630 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  t">..    /// The
16640 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
16650 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63  ents to the func
16660 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61  tion being decla
16670 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
16680 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
16690 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d  <param name="nam
166a0 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
166b0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
166c0 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c  ction being decl
166d0 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ared...    /// <
166e0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
166f0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72   <param name="er
16700 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55  ror">..    /// U
16710 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65  pon success, the
16720 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 69   contents of thi
16730 73 20 70 61 72 61 6d 65 74 65 72 20 61 72 65 20  s parameter are 
16740 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e  undefined.  Upon
16750 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f   failure,..    /
16760 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e  // it should con
16770 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72 69  tain an appropri
16780 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ate error messag
16790 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
167a0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
167b0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
167c0 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
167d0 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
167e0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
167f0 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
16800 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
16810 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61  eErrorCode Decla
16820 72 65 56 69 72 74 75 61 6c 46 75 6e 63 74 69 6f  reVirtualFunctio
16830 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  n(..        SQLi
16840 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c  teModule module,
16850 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 61 72  ..        int ar
16860 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20  gumentCount,..  
16870 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
16880 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  e,..        ref 
16890 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
168a0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
168b0 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
168c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
168d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
168e0 20 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65    error = "conne
168f0 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76  ction has an inv
16900 61 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20  alid handle";.. 
16910 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
16920 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
16930 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20  e.Error;..      
16940 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49    }....        I
16950 6e 74 50 74 72 20 70 4e 61 6d 65 20 3d 20 49 6e  ntPtr pName = In
16960 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
16970 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
16980 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16990 20 20 70 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65    pName = SQLite
169a0 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74  String.Utf8IntPt
169b0 72 46 72 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65  rFromString(name
169c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
169d0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
169e0 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
169f0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
16a00 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74  3_overload_funct
16a10 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
16a20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 4e 61 6d        _sql, pNam
16a30 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74  e, argumentCount
16a40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16a50 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
16a60 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65  eErrorCode.Ok) e
16a70 72 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72  rror = GetLastEr
16a80 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ror();....      
16a90 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
16aa0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
16ab0 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
16ac0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16ad0 20 20 20 20 69 66 20 28 70 4e 61 6d 65 20 21 3d      if (pName !=
16ae0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
16af0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
16b10 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
16b20 70 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  pName);..       
16b30 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d           pName =
16b40 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
16b50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16b60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
16b70 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f  #endif....    //
16b80 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
16b90 20 2f 2f 2f 20 42 75 69 6c 64 73 20 61 6e 20 65   /// Builds an e
16ba0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72  rror message str
16bb0 69 6e 67 20 66 72 61 67 6d 65 6e 74 20 63 6f 6e  ing fragment con
16bc0 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20  taining the..   
16bd0 20 2f 2f 2f 20 64 65 66 69 6e 65 64 20 76 61 6c   /// defined val
16be0 75 65 73 20 6f 66 20 74 68 65 20 3c 73 65 65 20  ues of the <see 
16bf0 63 72 65 66 3d 22 53 51 4c 69 74 65 53 74 61 74  cref="SQLiteStat
16c00 75 73 4f 70 73 45 6e 75 6d 22 20 2f 3e 0d 0a 20  usOpsEnum" />.. 
16c10 20 20 20 2f 2f 2f 20 65 6e 75 6d 65 72 61 74 69     /// enumerati
16c20 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
16c30 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
16c40 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
16c50 2f 2f 2f 20 54 68 65 20 62 75 69 6c 74 20 73 74  /// The built st
16c60 72 69 6e 67 20 66 72 61 67 6d 65 6e 74 2e 0d 0a  ring fragment...
16c70 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
16c80 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  s>..    private 
16c90 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
16ca0 74 53 74 61 74 75 73 44 62 4f 70 73 4e 61 6d 65  tStatusDbOpsName
16cb0 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  s()..    {..    
16cc0 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
16cd0 72 20 62 75 69 6c 64 65 72 20 3d 20 6e 65 77 20  r builder = new 
16ce0 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
16cf0 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
16d00 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
16d10 52 4b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65  RK..        fore
16d20 61 63 68 20 28 73 74 72 69 6e 67 20 6e 61 6d 65  ach (string name
16d30 20 69 6e 20 45 6e 75 6d 2e 47 65 74 4e 61 6d 65   in Enum.GetName
16d40 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
16d50 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
16d60 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 29 29  eStatusOpsEnum))
16d70 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
16d80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
16d90 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
16da0 74 79 28 6e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ty(name))..     
16db0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
16dc0 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
16dd0 20 20 20 20 69 66 20 28 62 75 69 6c 64 65 72 2e      if (builder.
16de0 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69               bui
16e00 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 2c 20 22  lder.Append(", "
16e10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16e20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
16e30 28 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  (name);..       
16e40 20 7d 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20   }..#else..     
16e50 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
16e60 2f 20 54 4f 44 4f 3a 20 55 70 64 61 74 65 20 74  / TODO: Update t
16e70 68 69 73 20 6c 69 73 74 20 69 66 20 74 68 65 20  his list if the 
16e80 61 76 61 69 6c 61 62 6c 65 20 76 61 6c 75 65 73  available values
16e90 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20   in the..       
16ea0 20 2f 2f 20 20 20 20 20 20 20 22 53 51 4c 69 74   //       "SQLit
16eb0 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
16ec0 22 20 65 6e 75 6d 65 72 61 74 69 6f 6e 20 63 68  " enumeration ch
16ed0 61 6e 67 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ange...        /
16ee0 2f 0d 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64  /..        build
16ef0 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74 28  er.AppendFormat(
16f00 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
16f10 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  riantCulture,.. 
16f20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2c             "{0},
16f30 20 7b 31 7d 2c 20 7b 32 7d 2c 20 7b 33 7d 2c 20   {1}, {2}, {3}, 
16f40 7b 34 7d 2c 20 7b 35 7d 2c 20 7b 36 7d 2c 20 7b  {4}, {5}, {6}, {
16f50 37 7d 2c 20 7b 38 7d 2c 20 7b 39 7d 2c 20 7b 31  7}, {8}, {9}, {1
16f60 30 7d 2c 20 7b 31 31 7d 22 2c 0d 0a 20 20 20 20  0}, {11}",..    
16f70 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
16f80 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  atusOpsEnum.SQLI
16f90 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b  TE_DBSTATUS_LOOK
16fa0 41 53 49 44 45 5f 55 53 45 44 2c 0d 0a 20 20 20  ASIDE_USED,..   
16fb0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53           SQLiteS
16fc0 74 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c  tatusOpsEnum.SQL
16fd0 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43  ITE_DBSTATUS_CAC
16fe0 48 45 5f 55 53 45 44 2c 0d 0a 20 20 20 20 20 20  HE_USED,..      
16ff0 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
17000 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  usOpsEnum.SQLITE
17010 5f 44 42 53 54 41 54 55 53 5f 53 43 48 45 4d 41  _DBSTATUS_SCHEMA
17020 5f 55 53 45 44 2c 0d 0a 20 20 20 20 20 20 20 20  _USED,..        
17030 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 75 73      SQLiteStatus
17040 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44  OpsEnum.SQLITE_D
17050 42 53 54 41 54 55 53 5f 53 54 4d 54 5f 55 53 45  BSTATUS_STMT_USE
17060 44 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  D,..            
17070 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45  SQLiteStatusOpsE
17080 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41  num.SQLITE_DBSTA
17090 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 48 49  TUS_LOOKASIDE_HI
170a0 54 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  T,..            
170b0 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45  SQLiteStatusOpsE
170c0 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41  num.SQLITE_DBSTA
170d0 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49  TUS_LOOKASIDE_MI
170e0 53 53 5f 53 49 5a 45 2c 0d 0a 20 20 20 20 20 20  SS_SIZE,..      
170f0 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
17100 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  usOpsEnum.SQLITE
17110 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53  _DBSTATUS_LOOKAS
17120 49 44 45 5f 4d 49 53 53 5f 46 55 4c 4c 2c 0d 0a  IDE_MISS_FULL,..
17130 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
17140 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 2e  teStatusOpsEnum.
17150 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
17160 43 41 43 48 45 5f 48 49 54 2c 0d 0a 20 20 20 20  CACHE_HIT,..    
17170 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
17180 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  atusOpsEnum.SQLI
17190 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48  TE_DBSTATUS_CACH
171a0 45 5f 4d 49 53 53 2c 0d 0a 20 20 20 20 20 20 20  E_MISS,..       
171b0 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 75       SQLiteStatu
171c0 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  sOpsEnum.SQLITE_
171d0 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f 57  DBSTATUS_CACHE_W
171e0 52 49 54 45 2c 0d 0a 20 20 20 20 20 20 20 20 20  RITE,..         
171f0 20 20 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f     SQLiteStatusO
17200 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
17210 53 54 41 54 55 53 5f 44 45 46 45 52 52 45 44 5f  STATUS_DEFERRED_
17220 46 4b 53 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  FKS,..          
17230 20 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70    SQLiteStatusOp
17240 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53  sEnum.SQLITE_DBS
17250 54 41 54 55 53 5f 43 41 43 48 45 5f 55 53 45 44  TATUS_CACHE_USED
17260 5f 53 48 41 52 45 44 29 3b 0d 0a 23 65 6e 64 69  _SHARED);..#endi
17270 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  f....        ret
17280 75 72 6e 20 62 75 69 6c 64 65 72 2e 54 6f 53 74  urn builder.ToSt
17290 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ring();..    }..
172a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
172b0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 42 75 69  ry>..    /// Bui
172c0 6c 64 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  lds an error mes
172d0 73 61 67 65 20 73 74 72 69 6e 67 20 66 72 61 67  sage string frag
172e0 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ment containing 
172f0 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 65 66  the..    /// def
17300 69 6e 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  ined values of t
17310 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
17320 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
17330 6e 75 6d 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  num" />..    ///
17340 20 65 6e 75 6d 65 72 61 74 69 6f 6e 2e 0d 0a 20   enumeration... 
17350 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
17360 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
17370 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  rns>..    /// Th
17380 65 20 62 75 69 6c 74 20 73 74 72 69 6e 67 20 66  e built string f
17390 72 61 67 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f  ragment...    //
173a0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
173b0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
173c0 20 73 74 72 69 6e 67 20 47 65 74 43 6f 6e 66 69   string GetConfi
173d0 67 44 62 4f 70 73 4e 61 6d 65 73 28 29 0d 0a 20  gDbOpsNames().. 
173e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74     {..        St
173f0 72 69 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c  ringBuilder buil
17400 64 65 72 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  der = new String
17410 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 23 69  Builder();....#i
17420 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
17430 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
17440 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73        foreach (s
17450 74 72 69 6e 67 20 6e 61 6d 65 20 69 6e 20 45 6e  tring name in En
17460 75 6d 2e 47 65 74 4e 61 6d 65 73 28 0d 0a 20 20  um.GetNames(..  
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
17480 70 65 6f 66 28 53 51 4c 69 74 65 43 6f 6e 66 69  peof(SQLiteConfi
17490 67 44 62 4f 70 73 45 6e 75 6d 29 29 29 0d 0a 20  gDbOpsEnum))).. 
174a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
174b0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
174c0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6e  .IsNullOrEmpty(n
174d0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
174e0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
174f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17500 69 66 20 28 62 75 69 6c 64 65 72 2e 4c 65 6e 67  if (builder.Leng
17510 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  th > 0)..       
17520 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72           builder
17530 2e 41 70 70 65 6e 64 28 22 2c 20 22 29 3b 0d 0a  .Append(", ");..
17540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75  ..            bu
17550 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 6e 61 6d  ilder.Append(nam
17560 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
17570 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 2f  #else..        /
17580 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 54 4f  /..        // TO
17590 44 4f 3a 20 55 70 64 61 74 65 20 74 68 69 73 20  DO: Update this 
175a0 6c 69 73 74 20 69 66 20 74 68 65 20 61 76 61 69  list if the avai
175b0 6c 61 62 6c 65 20 76 61 6c 75 65 73 20 69 6e 20  lable values in 
175c0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  the..        // 
175d0 20 20 20 20 20 20 22 53 51 4c 69 74 65 43 6f 6e        "SQLiteCon
175e0 66 69 67 44 62 4f 70 73 45 6e 75 6d 22 20 65 6e  figDbOpsEnum" en
175f0 75 6d 65 72 61 74 69 6f 6e 20 63 68 61 6e 67 65  umeration change
17600 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
17610 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41         builder.A
17620 70 70 65 6e 64 46 6f 72 6d 61 74 28 43 75 6c 74  ppendFormat(Cult
17630 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
17640 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
17650 20 20 20 20 20 20 20 22 7b 30 7d 2c 20 7b 31 7d         "{0}, {1}
17660 2c 20 7b 32 7d 2c 20 7b 33 7d 2c 20 7b 34 7d 2c  , {2}, {3}, {4},
17670 20 7b 35 7d 2c 20 7b 36 7d 2c 20 7b 37 7d 2c 20   {5}, {6}, {7}, 
17680 7b 38 7d 2c 20 7b 39 7d 22 2c 0d 0a 20 20 20 20  {8}, {9}",..    
17690 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
176a0 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51  nfigDbOpsEnum.SQ
176b0 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4e 4f  LITE_DBCONFIG_NO
176c0 4e 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  NE,..           
176d0 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f   SQLiteConfigDbO
176e0 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
176f0 43 4f 4e 46 49 47 5f 4d 41 49 4e 44 42 4e 41 4d  CONFIG_MAINDBNAM
17700 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  E,..            
17710 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70  SQLiteConfigDbOp
17720 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43  sEnum.SQLITE_DBC
17730 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45 2c  ONFIG_LOOKASIDE,
17740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
17750 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
17760 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
17770 46 49 47 5f 45 4e 41 42 4c 45 5f 46 4b 45 59 2c  FIG_ENABLE_FKEY,
17780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
17790 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
177a0 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
177b0 46 49 47 5f 45 4e 41 42 4c 45 5f 54 52 49 47 47  FIG_ENABLE_TRIGG
177c0 45 52 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ER,..           
177d0 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f   SQLiteConfigDbO
177e0 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
177f0 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 46 54  CONFIG_ENABLE_FT
17800 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 2c 0d 0a 20  S3_TOKENIZER,.. 
17810 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
17820 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
17830 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47  .SQLITE_DBCONFIG
17840 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54  _ENABLE_LOAD_EXT
17850 45 4e 53 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20  ENSION,..       
17860 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
17870 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  gDbOpsEnum.SQLIT
17880 45 5f 44 42 43 4f 4e 46 49 47 5f 4e 4f 5f 43 4b  E_DBCONFIG_NO_CK
17890 50 54 5f 4f 4e 5f 43 4c 4f 53 45 2c 0d 0a 20 20  PT_ON_CLOSE,..  
178a0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
178b0 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e  ConfigDbOpsEnum.
178c0 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
178d0 45 4e 41 42 4c 45 5f 51 50 53 47 2c 0d 0a 20 20  ENABLE_QPSG,..  
178e0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
178f0 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e  ConfigDbOpsEnum.
17900 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
17910 54 52 49 47 47 45 52 5f 45 51 50 29 3b 0d 0a 23  TRIGGER_EQP);..#
17920 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
17930 20 72 65 74 75 72 6e 20 62 75 69 6c 64 65 72 2e   return builder.
17940 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
17950 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
17960 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
17970 20 52 65 74 75 72 6e 73 20 74 68 65 20 63 75 72   Returns the cur
17980 72 65 6e 74 20 61 6e 64 2f 6f 72 20 68 69 67 68  rent and/or high
17990 77 61 74 65 72 20 76 61 6c 75 65 73 20 66 6f 72  water values for
179a0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a   the specified..
179b0 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
179c0 20 73 74 61 74 75 73 20 70 61 72 61 6d 65 74 65   status paramete
179d0 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  r...    /// </su
179e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
179f0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 70 74  <param name="opt
17a00 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ion">..    /// T
17a10 68 65 20 64 61 74 61 62 61 73 65 20 73 74 61 74  he database stat
17a20 75 73 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  us parameter to 
17a30 71 75 65 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  query...    /// 
17a40 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
17a50 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
17a60 65 73 65 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  eset">..    /// 
17a70 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65  Non-zero to rese
17a80 74 20 74 68 65 20 68 69 67 68 77 61 74 65 72 20  t the highwater 
17a90 76 61 6c 75 65 20 74 6f 20 74 68 65 20 63 75 72  value to the cur
17aa0 72 65 6e 74 20 76 61 6c 75 65 2e 0d 0a 20 20 20  rent value...   
17ab0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
17ac0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
17ad0 6d 65 3d 22 63 75 72 72 65 6e 74 22 3e 0d 0a 20  me="current">.. 
17ae0 20 20 20 2f 2f 2f 20 49 66 20 61 70 70 6c 69 63     /// If applic
17af0 61 62 6c 65 2c 20 72 65 63 65 69 76 65 73 20 74  able, receives t
17b00 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
17b10 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
17b20 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
17b30 72 61 6d 20 6e 61 6d 65 3d 22 68 69 67 68 77 61  ram name="highwa
17b40 74 65 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  ter">..    /// I
17b50 66 20 61 70 70 6c 69 63 61 62 6c 65 2c 20 72 65  f applicable, re
17b60 63 65 69 76 65 73 20 74 68 65 20 68 69 67 68 77  ceives the highw
17b70 61 74 65 72 20 76 61 6c 75 65 2e 0d 0a 20 20 20  ater value...   
17b80 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
17b90 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
17ba0 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e  ..    /// A stan
17bb0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
17bc0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  rn code...    //
17bd0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
17be0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
17bf0 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
17c00 6f 64 65 20 47 65 74 53 74 61 74 75 73 50 61 72  ode GetStatusPar
17c10 61 6d 65 74 65 72 28 0d 0a 20 20 20 20 20 20 20  ameter(..       
17c20 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73   SQLiteStatusOps
17c30 45 6e 75 6d 20 6f 70 74 69 6f 6e 2c 0d 0a 20 20  Enum option,..  
17c40 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 65 74        bool reset
17c50 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 69  ,..        ref i
17c60 6e 74 20 63 75 72 72 65 6e 74 2c 0d 0a 20 20 20  nt current,..   
17c70 20 20 20 20 20 72 65 66 20 69 6e 74 20 68 69 67       ref int hig
17c80 68 77 61 74 65 72 0d 0a 20 20 20 20 20 20 20 20  hwater..        
17c90 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
17ca0 20 20 69 66 20 28 21 45 6e 75 6d 2e 49 73 44 65    if (!Enum.IsDe
17cb0 66 69 6e 65 64 28 74 79 70 65 6f 66 28 53 51 4c  fined(typeof(SQL
17cc0 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d  iteStatusOpsEnum
17cd0 29 2c 20 6f 70 74 69 6f 6e 29 29 0d 0a 20 20 20  ), option))..   
17ce0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17cf0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
17d00 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 48 65  LiteException(He
17d10 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
17d20 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
17d30 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
17d40 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
17d50 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
17d60 20 20 20 20 20 20 20 20 22 75 6e 72 65 63 6f 67          "unrecog
17d70 6e 69 7a 65 64 20 73 74 61 74 75 73 20 6f 70 74  nized status opt
17d80 69 6f 6e 2c 20 6d 75 73 74 20 62 65 3a 20 7b 30  ion, must be: {0
17d90 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
17da0 20 20 20 20 20 47 65 74 53 74 61 74 75 73 44 62       GetStatusDb
17db0 4f 70 73 4e 61 6d 65 73 28 29 29 29 3b 0d 0a 20  OpsNames()));.. 
17dc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
17dd0 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
17de0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
17df0 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73  qlite3_db_status
17e00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  (..            _
17e10 73 71 6c 2c 20 6f 70 74 69 6f 6e 2c 20 72 65 66  sql, option, ref
17e20 20 63 75 72 72 65 6e 74 2c 20 72 65 66 20 68 69   current, ref hi
17e30 67 68 77 61 74 65 72 2c 20 72 65 73 65 74 20 3f  ghwater, reset ?
17e40 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20 20 7d 0d   1 : 0);..    }.
17e50 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
17e60 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 68  ary>..    /// Ch
17e70 61 6e 67 65 20 61 20 63 6f 6e 66 69 67 75 72 61  ange a configura
17e80 74 69 6f 6e 20 6f 70 74 69 6f 6e 20 76 61 6c 75  tion option valu
17e90 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  e for the databa
17ea0 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e  se...    /// con
17eb0 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
17ec0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
17ed0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
17ee0 65 3d 22 6f 70 74 69 6f 6e 22 3e 0d 0a 20 20 20  e="option">..   
17ef0 20 2f 2f 2f 20 54 68 65 20 64 61 74 61 62 61 73   /// The databas
17f00 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
17f10 6f 70 74 69 6f 6e 20 74 6f 20 63 68 61 6e 67 65  option to change
17f20 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
17f30 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
17f40 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22  ram name="value"
17f50 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
17f60 65 77 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  ew value for the
17f70 20 73 70 65 63 69 66 69 65 64 20 63 6f 6e 66 69   specified confi
17f80 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 2e  guration option.
17f90 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
17fa0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
17fb0 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
17fc0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
17fd0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
17fe0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
17ff0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
18000 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
18010 72 72 6f 72 43 6f 64 65 20 53 65 74 43 6f 6e 66  rrorCode SetConf
18020 69 67 75 72 61 74 69 6f 6e 4f 70 74 69 6f 6e 28  igurationOption(
18030 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
18040 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 20  ConfigDbOpsEnum 
18050 6f 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  option,..       
18060 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20   object value.. 
18070 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
18080 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 45 6e  .        if (!En
18090 75 6d 2e 49 73 44 65 66 69 6e 65 64 28 74 79 70  um.IsDefined(typ
180a0 65 6f 66 28 53 51 4c 69 74 65 43 6f 6e 66 69 67  eof(SQLiteConfig
180b0 44 62 4f 70 73 45 6e 75 6d 29 2c 20 6f 70 74 69  DbOpsEnum), opti
180c0 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  on))..        {.
180d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
180e0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
180f0 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74  eption(HelperMet
18100 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
18110 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
18120 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
18130 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
18140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18150 20 22 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 63   "unrecognized c
18160 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
18170 69 6f 6e 2c 20 6d 75 73 74 20 62 65 3a 20 7b 30  ion, must be: {0
18180 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
18190 20 20 20 20 20 47 65 74 43 6f 6e 66 69 67 44 62       GetConfigDb
181a0 4f 70 73 4e 61 6d 65 73 28 29 29 29 3b 0d 0a 20  OpsNames()));.. 
181b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
181c0 20 20 20 20 73 77 69 74 63 68 20 28 6f 70 74 69      switch (opti
181d0 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  on)..        {..
181e0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
181f0 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f   SQLiteConfigDbO
18200 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
18210 43 4f 4e 46 49 47 5f 4e 4f 4e 45 3a 20 2f 2f 20  CONFIG_NONE: // 
18220 6e 69 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nil..           
18230 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f 20      // NOTE: Do 
18270 6e 6f 74 68 69 6e 67 2c 20 72 65 74 75 72 6e 20  nothing, return 
18280 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  success...      
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
182a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
182b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
182c0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b  iteErrorCode.Ok;
182d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
182e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
182f0 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e 66   case SQLiteConf
18300 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  igDbOpsEnum.SQLI
18310 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4d 41 49 4e  TE_DBCONFIG_MAIN
18320 44 42 4e 41 4d 45 3a 20 2f 2f 20 63 68 61 72 2a  DBNAME: // char*
18330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18340 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18350 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
18360 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
18370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18380 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
18390 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
183a0 74 69 6f 6e 28 22 76 61 6c 75 65 22 29 3b 0d 0a  tion("value");..
183b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
183c0 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75        if (!(valu
183d0 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20  e is string)).. 
183e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18410 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
18420 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65  ception(HelperMe
18430 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
18440 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
18470 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18490 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
184a0 67 75 72 61 74 69 6f 6e 20 76 61 6c 75 65 20 74  guration value t
184b0 79 70 65 20 6d 69 73 6d 61 74 63 68 2c 20 6d 75  ype mismatch, mu
184c0 73 74 20 62 65 20 6f 66 20 74 79 70 65 20 7b 30  st be of type {0
184d0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
184e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184f0 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29   typeof(string))
18500 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
18510 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
18540 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
18550 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 49 6e 74 50 74 72 20 70 44 62 4e 61 6d 65    IntPtr pDbName
18580 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
18590 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
185a0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
185d0 20 20 20 20 20 20 20 20 20 20 20 70 44 62 4e 61             pDbNa
185e0 6d 65 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e  me = SQLiteStrin
185f0 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d  g.Utf8IntPtrFrom
18600 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 20 20 20 20 20 28 73 74 72 69 6e 67 29 76 61 6c       (string)val
18630 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18650 69 66 20 28 70 44 62 4e 61 6d 65 20 3d 3d 20 49  if (pDbName == I
18660 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18680 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186a0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
186b0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 0d 0a  LiteException(..
186c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186e0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
186f0 4e 6f 4d 65 6d 2c 0d 0a 20 20 20 20 20 20 20 20  NoMem,..        
18700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18710 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
18720 61 6c 6c 6f 63 61 74 65 20 64 61 74 61 62 61 73  allocate databas
18730 65 20 6e 61 6d 65 22 29 3b 0d 0a 20 20 20 20 20  e name");..     
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18770 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
18780 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
18790 5f 64 62 5f 63 6f 6e 66 69 67 5f 63 68 61 72 70  _db_config_charp
187a0 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187c0 20 5f 73 71 6c 2c 20 6f 70 74 69 6f 6e 2c 20 70   _sql, option, p
187d0 44 62 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  DbName);....    
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51      if (rc == SQ
18800 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
18810 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18820 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18840 20 20 20 20 20 20 20 20 20 20 46 72 65 65 44 62            FreeDb
18850 4e 61 6d 65 28 74 72 75 65 29 3b 0d 0a 0d 0a 20  Name(true);.... 
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18870 20 20 20 20 20 20 20 20 20 20 20 64 62 4e 61 6d             dbNam
18880 65 20 3d 20 70 44 62 4e 61 6d 65 3b 0d 0a 20 20  e = pDbName;..  
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 20 20 20 20 20 20 20 20 20 70 44 62 4e 61 6d            pDbNam
188b0 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  e = IntPtr.Zero;
188c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
188d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18900 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
18910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18920 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18940 69 66 20 28 28 72 63 20 21 3d 20 53 51 4c 69 74  if ((rc != SQLit
18950 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26  eErrorCode.Ok) &
18960 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
18980 70 44 62 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74  pDbName != IntPt
18990 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20  r.Zero))..      
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189d0 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72   SQLiteMemory.Fr
189e0 65 65 28 70 44 62 4e 61 6d 65 29 3b 0d 0a 20 20  ee(pDbName);..  
189f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a00 20 20 20 20 20 20 20 20 20 20 70 44 62 4e 61 6d            pDbNam
18a10 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  e = IntPtr.Zero;
18a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18a30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
18a60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18a70 20 72 63 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   rc;..          
18a80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
18a90 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
18aa0 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e  ConfigDbOpsEnum.
18ab0 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
18ac0 4c 4f 4f 4b 41 53 49 44 45 3a 20 2f 2f 20 76 6f  LOOKASIDE: // vo
18ad0 69 64 2a 20 69 6e 74 20 69 6e 74 0d 0a 20 20 20  id* int int..   
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b00 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 61 72 72      object[] arr
18b10 61 79 20 3d 20 76 61 6c 75 65 20 61 73 20 6f 62  ay = value as ob
18b20 6a 65 63 74 5b 5d 3b 0d 0a 0d 0a 20 20 20 20 20  ject[];....     
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18b40 66 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c  f (array == null
18b50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18b60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
18b90 74 65 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70  teException(Help
18ba0 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
18bb0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bd0 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
18be0 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
18bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
18c10 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 61 6c  onfiguration val
18c20 75 65 20 74 79 70 65 20 6d 69 73 6d 61 74 63 68  ue type mismatch
18c30 2c 20 6d 75 73 74 20 62 65 20 6f 66 20 74 79 70  , must be of typ
18c40 65 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  e {0}",..       
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 20 20 20 20 20 74 79 70 65 6f 66 28 6f 62 6a 65       typeof(obje
18c70 63 74 5b 5d 29 29 29 3b 0d 0a 20 20 20 20 20 20  ct[])));..      
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18c90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18ca0 20 20 20 20 20 20 20 69 66 20 28 21 28 61 72 72         if (!(arr
18cb0 61 79 5b 30 5d 20 69 73 20 49 6e 74 50 74 72 29  ay[0] is IntPtr)
18cc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18cd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
18d00 74 65 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70  teException(Help
18d10 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
18d20 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
18d50 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
18d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
18d80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 65 6c 65  onfiguration ele
18d90 6d 65 6e 74 20 7a 65 72 6f 20 28 30 29 20 74 79  ment zero (0) ty
18da0 70 65 20 6d 69 73 6d 61 74 63 68 2c 20 6d 75 73  pe mismatch, mus
18db0 74 20 62 65 20 6f 66 20 74 79 70 65 20 7b 30 7d  t be of type {0}
18dc0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18de0 74 79 70 65 6f 66 28 49 6e 74 50 74 72 29 29 29  typeof(IntPtr)))
18df0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18e00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e20 69 66 20 28 21 28 61 72 72 61 79 5b 31 5d 20 69  if (!(array[1] i
18e30 73 20 69 6e 74 29 29 0d 0a 20 20 20 20 20 20 20  s int))..       
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
18e70 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
18e80 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  n(HelperMethods.
18e90 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18eb0 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
18ec0 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
18ed0 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ef0 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
18f00 6f 6e 20 65 6c 65 6d 65 6e 74 20 6f 6e 65 20 28  on element one (
18f10 31 29 20 74 79 70 65 20 6d 69 73 6d 61 74 63 68  1) type mismatch
18f20 2c 20 6d 75 73 74 20 62 65 20 6f 66 20 74 79 70  , must be of typ
18f30 65 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  e {0}",..       
18f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f50 20 20 20 20 20 74 79 70 65 6f 66 28 69 6e 74 29       typeof(int)
18f60 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
18f70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 20 69 66 20 28 21 28 61 72 72 61 79 5b 32 5d    if (!(array[2]
18fa0 20 69 73 20 69 6e 74 29 29 0d 0a 20 20 20 20 20   is int))..     
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18fd0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
18fe0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
18ff0 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ion(HelperMethod
19000 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
19010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19020 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
19030 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
19040 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19060 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61        "configura
19070 74 69 6f 6e 20 65 6c 65 6d 65 6e 74 20 74 77 6f  tion element two
19080 20 28 32 29 20 74 79 70 65 20 6d 69 73 6d 61 74   (2) type mismat
19090 63 68 2c 20 6d 75 73 74 20 62 65 20 6f 66 20 74  ch, must be of t
190a0 79 70 65 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ype {0}",..     
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190c0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 69 6e         typeof(in
190d0 74 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  t)));..         
190e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
19110 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
19120 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67  qlite3_db_config
19130 5f 69 6e 74 70 74 72 5f 74 77 6f 5f 69 6e 74 73  _intptr_two_ints
19140 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19150 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c             _sql,
19160 20 6f 70 74 69 6f 6e 2c 20 28 49 6e 74 50 74 72   option, (IntPtr
19170 29 61 72 72 61 79 5b 30 5d 2c 20 28 69 6e 74 29  )array[0], (int)
19180 61 72 72 61 79 5b 31 5d 2c 20 28 69 6e 74 29 61  array[1], (int)a
19190 72 72 61 79 5b 32 5d 29 3b 0d 0a 20 20 20 20 20  rray[2]);..     
191a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
191b0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
191c0 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73  QLiteConfigDbOps
191d0 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f  Enum.SQLITE_DBCO
191e0 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 46 4b 45 59  NFIG_ENABLE_FKEY
191f0 3a 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20  : // int int*.. 
19200 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
19210 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70  SQLiteConfigDbOp
19220 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43  sEnum.SQLITE_DBC
19230 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 54 52 49  ONFIG_ENABLE_TRI
19240 47 47 45 52 3a 20 2f 2f 20 69 6e 74 20 69 6e 74  GGER: // int int
19250 2a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  *..            c
19260 61 73 65 20 53 51 4c 69 74 65 43 6f 6e 66 69 67  ase SQLiteConfig
19270 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  DbOpsEnum.SQLITE
19280 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45  _DBCONFIG_ENABLE
19290 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 3a  _FTS3_TOKENIZER:
192a0 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20   // int int*..  
192b0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
192c0 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73  QLiteConfigDbOps
192d0 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f  Enum.SQLITE_DBCO
192e0 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44  NFIG_ENABLE_LOAD
192f0 5f 45 58 54 45 4e 53 49 4f 4e 3a 20 2f 2f 20 69  _EXTENSION: // i
19300 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20  nt int*..       
19310 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
19320 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e  ConfigDbOpsEnum.
19330 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
19340 4e 4f 5f 43 4b 50 54 5f 4f 4e 5f 43 4c 4f 53 45  NO_CKPT_ON_CLOSE
19350 3a 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20  : // int int*.. 
19360 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
19370 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70  SQLiteConfigDbOp
19380 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43  sEnum.SQLITE_DBC
19390 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 51 50 53  ONFIG_ENABLE_QPS
193a0 47 3a 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a  G: // int int*..
193b0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
193c0 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f   SQLiteConfigDbO
193d0 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
193e0 43 4f 4e 46 49 47 5f 54 52 49 47 47 45 52 5f 45  CONFIG_TRIGGER_E
193f0 51 50 3a 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d  QP: // int int*.
19400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19410 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19420 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61          if (!(va
19430 6c 75 65 20 69 73 20 62 6f 6f 6c 29 29 0d 0a 20  lue is bool)).. 
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19450 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19470 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
19480 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65  ception(HelperMe
19490 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
194a0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194c0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
194d0 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
19500 67 75 72 61 74 69 6f 6e 20 76 61 6c 75 65 20 74  guration value t
19510 79 70 65 20 6d 69 73 6d 61 74 63 68 2c 20 6d 75  ype mismatch, mu
19520 73 74 20 62 65 20 6f 66 20 74 79 70 65 20 7b 30  st be of type {0
19530 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 74 79 70 65 6f 66 28 62 6f 6f 6c 29 29 29 3b   typeof(bool)));
19560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19570 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19590 6e 74 20 72 65 73 75 6c 74 20 3d 20 30 3b 20 2f  nt result = 0; /
195a0 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 0d  * NOT USED */...
195b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
195c0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
195d0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
195e0 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69  sqlite3_db_confi
195f0 67 5f 69 6e 74 5f 72 65 66 69 6e 74 28 0d 0a 20  g_int_refint(.. 
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 6f 70 74         _sql, opt
19620 69 6f 6e 2c 20 28 28 62 6f 6f 6c 29 76 61 6c 75  ion, ((bool)valu
19630 65 20 3f 20 31 20 3a 20 30 29 2c 20 72 65 66 20  e ? 1 : 0), ref 
19640 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20  result);..      
19650 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
19660 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
19670 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
19680 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19690 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
196a0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
196b0 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ion(HelperMethod
196c0 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
196d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
196e0 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
196f0 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
19700 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75                "u
19720 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6e 66 69  nsupported confi
19730 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 20  guration option 
19740 7b 30 7d 22 2c 20 6f 70 74 69 6f 6e 29 29 3b 0d  {0}", option));.
19750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19760 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
19770 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
19780 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
19790 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69  // Enables or di
197a0 73 61 62 6c 65 73 20 65 78 74 65 6e 73 69 6f 6e  sables extension
197b0 20 6c 6f 61 64 69 6e 67 20 62 79 20 53 51 4c 69   loading by SQLi
197c0 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  te...    /// </s
197d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
197e0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f   <param name="bO
197f0 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  nOff">..    /// 
19800 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c  True to enable l
19810 6f 61 64 69 6e 67 20 6f 66 20 65 78 74 65 6e 73  oading of extens
19820 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20 64  ions, false to d
19830 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f  isable...    ///
19840 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
19850 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
19860 20 76 6f 69 64 20 53 65 74 4c 6f 61 64 45 78 74   void SetLoadExt
19870 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f  ension(bool bOnO
19880 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ff)..    {..    
19890 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
198a0 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode n;....      
198b0 20 20 69 66 20 28 53 51 4c 69 74 65 56 65 72 73    if (SQLiteVers
198c0 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30 31  ionNumber >= 301
198d0 33 30 30 30 29 0d 0a 20 20 20 20 20 20 20 20 7b  3000)..        {
198e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
198f0 3d 20 53 65 74 43 6f 6e 66 69 67 75 72 61 74 69  = SetConfigurati
19900 6f 6e 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  onOption(..     
19910 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
19920 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
19930 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47  .SQLITE_DBCONFIG
19940 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54  _ENABLE_LOAD_EXT
19950 45 4e 53 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20  ENSION,..       
19960 20 20 20 20 20 20 20 20 20 62 4f 6e 4f 66 66 29           bOnOff)
19970 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
19980 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
19990 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
199a0 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
199b0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
199c0 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65  e3_enable_load_e
199d0 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20 20  xtension(..     
199e0 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c             _sql,
199f0 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20   (bOnOff ? -1 : 
19a00 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  0));..        }.
19a10 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
19a20 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
19a30 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
19a40 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
19a50 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
19a60 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
19a70 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
19a80 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73  >..    /// Loads
19a90 20 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73   a SQLite extens
19aa0 69 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d  ion library from
19ab0 20 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e   the named file.
19ac0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
19ad0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
19ae0 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e  aram name="fileN
19af0 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
19b00 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
19b10 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72  ynamic link libr
19b20 61 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  ary file contain
19b30 69 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f  ing the extensio
19b40 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  n...    /// </pa
19b50 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
19b60 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e  aram name="procN
19b70 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
19b80 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65  he name of the e
19b90 78 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e  xported function
19ba0 20 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c   used to initial
19bb0 69 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f  ize the extensio
19bc0 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e  n...    /// If n
19bd0 75 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74  ull, the default
19be0 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73   "sqlite3_extens
19bf0 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62  ion_init" will b
19c00 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  e used...    ///
19c10 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
19c20 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
19c30 20 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73   void LoadExtens
19c40 69 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e  ion(string fileN
19c50 61 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63  ame, string proc
19c60 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
19c70 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61        if (fileNa
19c80 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me == null)..   
19c90 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
19ca0 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
19cb0 78 63 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e 61  xception("fileNa
19cc0 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me");....       
19cd0 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20 3d   IntPtr pError =
19ce0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
19cf0 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
19d00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19d10 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38       byte[] utf8
19d20 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38 45  FileName = UTF8E
19d30 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74  ncoding.UTF8.Get
19d40 42 79 74 65 73 28 66 69 6c 65 4e 61 6d 65 20 2b  Bytes(fileName +
19d50 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20 20   '\0');..       
19d60 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66 38       byte[] utf8
19d70 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  ProcName = null;
19d80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19d90 69 66 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d 20  if (procName != 
19da0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
19db0 20 20 20 20 20 20 20 75 74 66 38 50 72 6f 63 4e         utf8ProcN
19dc0 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69  ame = UTF8Encodi
19dd0 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73  ng.UTF8.GetBytes
19de0 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30 27  (procName + '\0'
19df0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19e00 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
19e10 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
19e20 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
19e30 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  3_load_extension
19e40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19e50 20 20 20 5f 73 71 6c 2c 20 75 74 66 38 46 69 6c     _sql, utf8Fil
19e60 65 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f 63 4e  eName, utf8ProcN
19e70 61 6d 65 2c 20 72 65 66 20 70 45 72 72 6f 72 29  ame, ref pError)
19e80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19e90 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
19ea0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19ec0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
19ed0 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46 38  xception(n, UTF8
19ee0 54 6f 53 74 72 69 6e 67 28 70 45 72 72 6f 72 2c  ToString(pError,
19ef0 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20   -1));..        
19f00 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
19f10 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
19f20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
19f30 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e  Error != IntPtr.
19f40 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
19f50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19f60 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
19f70 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
19f80 33 5f 66 72 65 65 28 70 45 72 72 6f 72 29 3b 0d  3_free(pError);.
19f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19fa0 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72   pError = IntPtr
19fb0 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
19fc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
19fd0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
19fe0 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69  // Enables or di
19ff0 73 61 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20  sabled extended 
1a000 72 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74  result codes ret
1a010 75 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d  urned by SQLite.
1a020 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1a030 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 45  erride void SetE
1a040 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64  xtendedResultCod
1a050 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d  es(bool bOnOff).
1a060 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
1a070 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
1a080 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
1a090 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78  thods.sqlite3_ex
1a0a0 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f  tended_result_co
1a0b0 64 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  des(..          
1a0c0 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20  _sql, (bOnOff ? 
1a0d0 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20 20  -1 : 0));....   
1a0e0 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
1a0f0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
1a100 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
1a110 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
1a120 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
1a130 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
1a140 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69  ts the last SQLi
1a150 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20  te error code.. 
1a160 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
1a170 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
1a180 43 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28  Code ResultCode(
1a190 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1a1a0 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
1a1b0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1a1c0 65 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29  e3_errcode(_sql)
1a1d0 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f  ;..    }..    //
1a1e0 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20  / Gets the last 
1a1f0 53 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20  SQLite extended 
1a200 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20  error code..    
1a210 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1a220 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
1a230 65 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74  e ExtendedResult
1a240 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Code()..    {.. 
1a250 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
1a260 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1a270 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
1a280 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b 0d  _errcode(_sql);.
1a290 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
1a2a0 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73  / Add a log mess
1a2b0 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69  age via the SQLi
1a2c0 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69  te sqlite3_log i
1a2d0 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69  nterface...    i
1a2e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1a2f0 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67 65   void LogMessage
1a300 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
1a310 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e   iErrCode, strin
1a320 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20  g zMessage)..   
1a330 20 7b 0d 0a 20 20 20 20 20 20 53 74 61 74 69 63   {..      Static
1a340 4c 6f 67 4d 65 73 73 61 67 65 28 69 45 72 72 43  LogMessage(iErrC
1a350 6f 64 65 2c 20 7a 4d 65 73 73 61 67 65 29 3b 0d  ode, zMessage);.
1a360 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
1a370 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73 73  / Add a log mess
1a380 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c 69  age via the SQLi
1a390 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20 69  te sqlite3_log i
1a3a0 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 69  nterface...    i
1a3b0 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76  nternal static v
1a3c0 6f 69 64 20 53 74 61 74 69 63 4c 6f 67 4d 65 73  oid StaticLogMes
1a3d0 73 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72  sage(SQLiteError
1a3e0 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73  Code iErrCode, s
1a3f0 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d  tring zMessage).
1a400 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
1a410 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1a420 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 45  s.sqlite3_log(iE
1a430 72 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28 7a  rrCode, ToUTF8(z
1a440 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20  Message));..    
1a450 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  }....#if INTEROP
1a460 5f 43 4f 44 45 43 20 7c 7c 20 49 4e 54 45 52 4f  _CODEC || INTERO
1a470 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 0d 0a 20  P_INCLUDE_SEE.. 
1a480 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
1a490 72 69 64 65 20 76 6f 69 64 20 53 65 74 50 61 73  ride void SetPas
1a4a0 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73  sword(byte[] pas
1a4b0 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20  swordBytes)..   
1a4c0 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
1a4d0 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
1a4e0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1a4f0 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73  s.sqlite3_key(_s
1a500 71 6c 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65  ql, passwordByte
1a510 73 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73  s, passwordBytes
1a520 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20  .Length);..     
1a530 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
1a540 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
1a550 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
1a560 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
1a570 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20  stError());.... 
1a580 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f       if (_usePoo
1a590 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
1a5a0 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20       _usePool = 
1a5b0 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e  false;....#if !N
1a5c0 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
1a5d0 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
1a5e0 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63 65  N..        Trace
1a5f0 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
1a600 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
1a610 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1a620 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
1a630 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
1a640 20 20 20 20 20 20 20 20 20 22 53 65 74 50 61 73           "SetPas
1a650 73 77 6f 72 64 20 28 50 6f 6f 6c 29 20 44 69 73  sword (Pool) Dis
1a660 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20  abled: {0}",..  
1a670 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f          HandleTo
1a680 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e  String()));..#en
1a690 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  dif..      }..  
1a6a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1a6b0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
1a6c0 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64  d ChangePassword
1a6d0 28 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77  (byte[] newPassw
1a6e0 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b  ordBytes)..    {
1a6f0 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
1a700 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
1a710 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1a720 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 5f 73  sqlite3_rekey(_s
1a730 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72 64 42  ql, newPasswordB
1a740 79 74 65 73 2c 20 28 6e 65 77 50 61 73 73 77 6f  ytes, (newPasswo
1a750 72 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29  rdBytes == null)
1a760 20 3f 20 30 20 3a 20 6e 65 77 50 61 73 73 77 6f   ? 0 : newPasswo
1a770 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68 29 3b  rdBytes.Length);
1a780 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
1a790 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1a7a0 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
1a7b0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
1a7c0 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
1a7d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
1a7e0 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  _usePool)..     
1a7f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 75 73 65   {..        _use
1a800 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  Pool = false;...
1a810 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
1a820 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
1a830 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
1a840 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
1a850 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
1a860 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
1a870 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
1a880 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
1a890 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
1a8a0 22 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64 20  "ChangePassword 
1a8b0 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65 64 3a  (Pool) Disabled:
1a8c0 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
1a8d0 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
1a8e0 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
1a8f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23       }..    }..#
1a900 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74  endif....    int
1a910 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
1a920 6f 69 64 20 53 65 74 50 72 6f 67 72 65 73 73 48  oid SetProgressH
1a930 6f 6f 6b 28 69 6e 74 20 6e 4f 70 73 2c 20 53 51  ook(int nOps, SQ
1a940 4c 69 74 65 50 72 6f 67 72 65 73 73 43 61 6c 6c  LiteProgressCall
1a950 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
1a960 7b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  {..        Unsaf
1a970 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1a980 71 6c 69 74 65 33 5f 70 72 6f 67 72 65 73 73 5f  qlite3_progress_
1a990 68 61 6e 64 6c 65 72 28 5f 73 71 6c 2c 20 6e 4f  handler(_sql, nO
1a9a0 70 73 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ps, func, IntPtr
1a9b0 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a  .Zero);..    }..
1a9c0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1a9d0 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
1a9e0 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f 6b 28 53  AuthorizerHook(S
1a9f0 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72 43  QLiteAuthorizerC
1aa00 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
1aa10 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
1aa20 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1aa30 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68  sqlite3_set_auth
1aa40 6f 72 69 7a 65 72 28 5f 73 71 6c 2c 20 66 75 6e  orizer(_sql, fun
1aa50 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
1aa60 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1aa70 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1aa80 20 76 6f 69 64 20 53 65 74 55 70 64 61 74 65 48   void SetUpdateH
1aa90 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65  ook(SQLiteUpdate
1aaa0 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
1aab0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
1aac0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1aad0 2e 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f  .sqlite3_update_
1aae0 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
1aaf0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
1ab00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1ab10 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
1ab20 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f  oid SetCommitHoo
1ab30 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61  k(SQLiteCommitCa
1ab40 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
1ab50 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
1ab60 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1ab70 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f  qlite3_commit_ho
1ab80 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ok(_sql, func, I
1ab90 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
1aba0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
1abb0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
1abc0 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61  d SetTraceCallba
1abd0 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65 43 61  ck(SQLiteTraceCa
1abe0 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
1abf0 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
1ac00 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1ac10 71 6c 69 74 65 33 5f 74 72 61 63 65 28 5f 73 71  qlite3_trace(_sq
1ac20 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
1ac30 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
1ac40 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1ac50 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54  erride void SetT
1ac60 72 61 63 65 43 61 6c 6c 62 61 63 6b 32 28 53 51  raceCallback2(SQ
1ac70 4c 69 74 65 54 72 61 63 65 46 6c 61 67 73 20 6d  LiteTraceFlags m
1ac80 61 73 6b 2c 20 53 51 4c 69 74 65 54 72 61 63 65  ask, SQLiteTrace
1ac90 43 61 6c 6c 62 61 63 6b 32 20 66 75 6e 63 29 0d  Callback2 func).
1aca0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1acb0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1acc0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61 63  ods.sqlite3_trac
1acd0 65 5f 76 32 28 5f 73 71 6c 2c 20 6d 61 73 6b 2c  e_v2(_sql, mask,
1ace0 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
1acf0 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ro);..    }.... 
1ad00 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
1ad10 72 69 64 65 20 76 6f 69 64 20 53 65 74 52 6f 6c  ride void SetRol
1ad20 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74 65  lbackHook(SQLite
1ad30 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
1ad40 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
1ad50 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1ad60 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1ad70 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 28 5f  _rollback_hook(_
1ad80 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
1ad90 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
1ada0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
1adb0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c  ary>..    /// Al
1adc0 6c 6f 77 73 20 74 68 65 20 73 65 74 74 69 6e 67  lows the setting
1add0 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20 63 61   of a logging ca
1ade0 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64 20 62  llback invoked b
1adf0 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20 61 0d  y SQLite when a.
1ae00 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65 76 65  .    /// log eve
1ae10 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e 6c 79  nt occurs.  Only
1ae20 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20 6d 61   one callback ma
1ae30 79 20 62 65 20 73 65 74 2e 20 20 49 66 20 4e 55  y be set.  If NU
1ae40 4c 4c 20 69 73 20 70 61 73 73 65 64 2c 0d 0a 20  LL is passed,.. 
1ae50 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67 67 69     /// the loggi
1ae60 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 75  ng callback is u
1ae70 6e 72 65 67 69 73 74 65 72 65 64 2e 0d 0a 20 20  nregistered...  
1ae80 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1ae90 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1aea0 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54 68 65   name="func">The
1aeb0 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   callback functi
1aec0 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c 2f 70  on to invoke.</p
1aed0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1aee0 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
1aef0 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c 2f 72  a result code</r
1af00 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
1af10 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
1af20 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
1af30 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53 51  etLogCallback(SQ
1af40 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20  LiteLogCallback 
1af50 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  func)..    {..  
1af60 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1af70 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
1af80 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1af90 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f  qlite3_config_lo
1afa0 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
1afb0 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
1afc0 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
1afd0 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49 6e 74  G_LOG, func, Int
1afe0 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20  Ptr.Zero);....  
1aff0 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20        if (rc == 
1b000 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
1b010 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
1b020 20 5f 73 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b   _setLogCallback
1b030 20 3d 20 28 66 75 6e 63 20 21 3d 20 6e 75 6c 6c   = (func != null
1b040 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
1b050 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d  turn rc;..    }.
1b060 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1b070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b0c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
1b0d0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1b0e0 20 2f 2f 2f 20 41 70 70 65 6e 64 73 20 61 6e 20   /// Appends an 
1b0f0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 61 6e  error message an
1b100 64 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  d an appropriate
1b110 20 6c 69 6e 65 2d 65 6e 64 69 6e 67 20 74 6f 20   line-ending to 
1b120 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72  a <see cref="Str
1b130 69 6e 67 42 75 69 6c 64 65 72 22 20 2f 3e 0d 0a  ingBuilder" />..
1b140 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
1b150 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 66 75  .  This is usefu
1b160 6c 20 62 65 63 61 75 73 65 20 74 68 65 20 2e 4e  l because the .N
1b170 45 54 20 43 6f 6d 70 61 63 74 20 46 72 61 6d 65  ET Compact Frame
1b180 77 6f 72 6b 20 68 61 73 20 61 20 73 6c 69 67 68  work has a sligh
1b190 74 6c 79 20 64 69 66 66 65 72 65 6e 74 20 73 65  tly different se
1b1a0 74 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 73 75  t..    /// of su
1b1b0 70 70 6f 72 74 65 64 20 6d 65 74 68 6f 64 73 20  pported methods 
1b1c0 66 6f 72 20 74 68 65 20 3c 73 65 65 20 63 72 65  for the <see cre
1b1d0 66 3d 22 53 74 72 69 6e 67 42 75 69 6c 64 65 72  f="StringBuilder
1b1e0 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20  " /> class...   
1b1f0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1b200 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1b210 6e 61 6d 65 3d 22 62 75 69 6c 64 65 72 22 3e 0d  name="builder">.
1b220 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  .    /// The <se
1b230 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67 42 75  e cref="StringBu
1b240 69 6c 64 65 72 22 20 2f 3e 20 69 6e 73 74 61 6e  ilder" /> instan
1b250 63 65 20 74 6f 20 61 70 70 65 6e 64 20 74 6f 2e  ce to append to.
1b260 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1b270 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
1b280 61 6d 20 6e 61 6d 65 3d 22 6d 65 73 73 61 67 65  am name="message
1b290 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
1b2a0 6d 65 73 73 61 67 65 20 74 6f 20 61 70 70 65 6e  message to appen
1b2b0 64 2e 20 20 49 74 20 77 69 6c 6c 20 62 65 20 66  d.  It will be f
1b2c0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 61 70  ollowed by an ap
1b2d0 70 72 6f 70 72 69 61 74 65 20 6c 69 6e 65 2d 65  propriate line-e
1b2e0 6e 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20  nding...    /// 
1b2f0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 72  </param>..    pr
1b300 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
1b310 64 20 41 70 70 65 6e 64 45 72 72 6f 72 28 0d 0a  d AppendError(..
1b320 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
1b330 69 6c 64 65 72 20 62 75 69 6c 64 65 72 2c 0d 0a  ilder builder,..
1b340 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
1b350 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20 20 20  essage..        
1b360 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1b370 20 20 69 66 20 28 62 75 69 6c 64 65 72 20 3d 3d    if (builder ==
1b380 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1b390 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 23      return;....#
1b3a0 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
1b3b0 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
1b3c0 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41         builder.A
1b3d0 70 70 65 6e 64 4c 69 6e 65 28 6d 65 73 73 61 67  ppendLine(messag
1b3e0 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
1b3f0 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65      builder.Appe
1b400 6e 64 28 6d 65 73 73 61 67 65 29 3b 0d 0a 20 20  nd(message);..  
1b410 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
1b420 70 65 6e 64 28 22 5c 72 5c 6e 22 29 3b 0d 0a 23  pend("\r\n");..#
1b430 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
1b440 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1b450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
1b4b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1b4c0 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74  / This method at
1b4d0 74 65 6d 70 74 73 20 74 6f 20 63 61 75 73 65 20  tempts to cause 
1b4e0 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76  the SQLite nativ
1b4f0 65 20 6c 69 62 72 61 72 79 20 74 6f 20 69 6e 76  e library to inv
1b500 61 6c 69 64 61 74 65 0d 0a 20 20 20 20 2f 2f 2f  alidate..    ///
1b510 20 69 74 73 20 66 75 6e 63 74 69 6f 6e 20 70 6f   its function po
1b520 69 6e 74 65 72 73 20 74 68 61 74 20 72 65 66 65  inters that refe
1b530 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 61 6e  r to this instan
1b540 63 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63  ce.  This is nec
1b550 65 73 73 61 72 79 0d 0a 20 20 20 20 2f 2f 2f 20  essary..    /// 
1b560 74 6f 20 70 72 65 76 65 6e 74 20 63 61 6c 6c 73  to prevent calls
1b570 20 66 72 6f 6d 20 6e 61 74 69 76 65 20 63 6f 64   from native cod
1b580 65 20 69 6e 74 6f 20 64 65 6c 65 67 61 74 65 73  e into delegates
1b590 20 74 68 61 74 20 6d 61 79 20 68 61 76 65 20 62   that may have b
1b5a0 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 67 61 72  een..    /// gar
1b5b0 62 61 67 65 20 63 6f 6c 6c 65 63 74 65 64 2e 20  bage collected. 
1b5c0 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 73 65   Normally, these
1b5d0 20 74 79 70 65 73 20 6f 66 20 69 73 73 75 65 73   types of issues
1b5e0 20 63 61 6e 20 6f 6e 6c 79 20 61 72 69 73 65 20   can only arise 
1b5f0 66 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e  for..    /// con
1b600 6e 65 63 74 69 6f 6e 73 20 74 68 61 74 20 61 72  nections that ar
1b610 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 70  e added to the p
1b620 6f 6f 6c 3b 20 68 6f 77 76 65 72 2c 20 69 74 20  ool; howver, it 
1b630 69 73 20 67 6f 6f 64 20 70 72 61 63 74 69 63 65  is good practice
1b640 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 75 6e 63   to..    /// unc
1b650 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20 69 6e 76  onditionally inv
1b660 61 6c 69 64 61 74 65 20 66 75 6e 63 74 69 6f 6e  alidate function
1b670 20 70 6f 69 6e 74 65 72 73 20 74 68 61 74 20 6d   pointers that m
1b680 61 79 20 72 65 66 65 72 20 74 6f 20 6f 62 6a 65  ay refer to obje
1b690 63 74 73 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 69  cts..    /// bei
1b6a0 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ng disposed...  
1b6b0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1b6c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1b6d0 20 6e 61 6d 65 3d 22 69 6e 63 6c 75 64 65 47 6c   name="includeGl
1b6e0 6f 62 61 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  obal">..    /// 
1b6f0 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 61 6c 73 6f  Non-zero to also
1b700 20 69 6e 76 61 6c 69 64 61 74 65 20 67 6c 6f 62   invalidate glob
1b710 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  al function poin
1b720 74 65 72 73 20 28 69 2e 65 2e 20 74 68 6f 73 65  ters (i.e. those
1b730 20 74 68 61 74 0d 0a 20 20 20 20 2f 2f 2f 20 61   that..    /// a
1b740 72 65 20 6e 6f 74 20 64 69 72 65 63 74 6c 79 20  re not directly 
1b750 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1b760 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  this connection 
1b770 6f 6e 20 74 68 65 20 6e 61 74 69 76 65 20 73 69  on the native si
1b780 64 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  de)...    /// </
1b790 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1b7a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6e  <param name="can
1b7b0 54 68 72 6f 77 22 3e 0d 0a 20 20 20 20 2f 2f 2f  Throw">..    ///
1b7c0 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69   Non-zero if thi
1b7d0 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e  s method is bein
1b7e0 67 20 65 78 65 63 75 74 65 64 20 77 69 74 68 69  g executed withi
1b7f0 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72  n a context wher
1b800 65 20 69 74 20 63 61 6e 0d 0a 20 20 20 20 2f 2f  e it can..    //
1b810 2f 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  / throw an excep
1b820 74 69 6f 6e 20 69 6e 20 74 68 65 20 65 76 65 6e  tion in the even
1b830 74 20 6f 66 20 66 61 69 6c 75 72 65 3b 20 6f 74  t of failure; ot
1b840 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a  herwise, zero...
1b850 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1b860 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
1b870 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  ns>..    /// Non
1b880 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65  -zero if this me
1b890 74 68 6f 64 20 77 61 73 20 73 75 63 63 65 73 73  thod was success
1b8a0 66 75 6c 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ful; otherwise, 
1b8b0 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  zero...    /// <
1b8c0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
1b8d0 72 69 76 61 74 65 20 62 6f 6f 6c 20 55 6e 68 6f  rivate bool Unho
1b8e0 6f 6b 4e 61 74 69 76 65 43 61 6c 6c 62 61 63 6b  okNativeCallback
1b8f0 73 28 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  s(..        bool
1b900 20 69 6e 63 6c 75 64 65 47 6c 6f 62 61 6c 2c 0d   includeGlobal,.
1b910 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 61  .        bool ca
1b920 6e 54 68 72 6f 77 0d 0a 20 20 20 20 20 20 20 20  nThrow..        
1b930 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1b940 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
1b950 20 4e 4f 54 45 3a 20 49 6e 69 74 69 61 6c 6c 79   NOTE: Initially
1b960 2c 20 74 68 69 73 20 6d 65 74 68 6f 64 20 61 73  , this method as
1b970 73 75 6d 65 73 20 73 75 63 63 65 73 73 2e 20 20  sumes success.  
1b980 54 68 65 6e 2c 20 69 66 20 61 6e 79 20 61 74 74  Then, if any att
1b990 65 6d 70 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  empt..        //
1b9a0 20 20 20 20 20 20 20 74 6f 20 69 6e 76 61 6c 69         to invali
1b9b0 64 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  date a function 
1b9c0 70 6f 69 6e 74 65 72 20 66 61 69 6c 73 2c 20 74  pointer fails, t
1b9d0 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c  he overall resul
1b9e0 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t is..        //
1b9f0 20 20 20 20 20 20 20 73 65 74 20 74 6f 20 66 61         set to fa
1ba00 69 6c 75 72 65 2e 20 20 48 6f 77 65 76 65 72 2c  ilure.  However,
1ba10 20 74 68 69 73 20 77 69 6c 6c 20 6e 6f 74 20 70   this will not p
1ba20 72 65 76 65 6e 74 20 66 75 72 74 68 65 72 0d 0a  revent further..
1ba30 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1ba40 20 61 74 74 65 6d 70 74 73 2c 20 69 66 20 61 6e   attempts, if an
1ba50 79 2c 20 74 6f 20 69 6e 76 61 6c 69 64 61 74 65  y, to invalidate
1ba60 20 73 75 62 73 65 71 75 65 6e 74 20 66 75 6e 63   subsequent func
1ba70 74 69 6f 6e 20 70 6f 69 6e 74 65 72 73 2e 0d 0a  tion pointers...
1ba80 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1ba90 20 20 20 20 62 6f 6f 6c 20 72 65 73 75 6c 74 20      bool result 
1baa0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1bab0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1bac0 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
1bad0 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20  rCode.Ok;..     
1bae0 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
1baf0 20 62 75 69 6c 64 65 72 20 3d 20 6e 65 77 20 53   builder = new S
1bb00 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d  tringBuilder();.
1bb10 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1bb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1bb80 20 20 23 72 65 67 69 6f 6e 20 52 6f 6c 6c 62 61    #region Rollba
1bb90 63 6b 20 48 6f 6f 6b 20 28 50 65 72 2d 43 6f 6e  ck Hook (Per-Con
1bba0 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  nection)..      
1bbb0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
1bbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65  ..            Se
1bbd0 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 6e 75  tRollbackHook(nu
1bbe0 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ll); /* throw */
1bbf0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66  ..        }..#if
1bc00 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
1bc10 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
1bc20 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 63 61  TION..        ca
1bc30 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
1bc40 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  )..#else..      
1bc50 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1bc60 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  on)..#endif..   
1bc70 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54       {..#if !NET
1bc80 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
1bc90 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
1bca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
1bcb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1bcc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bcd0 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
1bce0 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
1bcf0 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
1bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd10 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
1bd20 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75 6e     "Failed to un
1bd50 73 65 74 20 72 6f 6c 6c 62 61 63 6b 20 68 6f 6f  set rollback hoo
1bd60 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  k: {0}",..      
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 29                e)
1bd80 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
1bd90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1bda0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1bdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1bdc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bdd0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
1bde0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1bdf0 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
1be00 20 20 20 20 20 20 41 70 70 65 6e 64 45 72 72 6f        AppendErro
1be10 72 28 62 75 69 6c 64 65 72 2c 20 22 66 61 69 6c  r(builder, "fail
1be20 65 64 20 74 6f 20 75 6e 73 65 74 20 72 6f 6c 6c  ed to unset roll
1be30 62 61 63 6b 20 68 6f 6f 6b 22 29 3b 0d 0a 20 20  back hook");..  
1be40 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
1be50 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
1be60 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rror;....       
1be70 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61       result = fa
1be80 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  lse;..        }.
1be90 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1bea0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
1beb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1bf10 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72        #region Tr
1bf20 61 63 65 20 43 61 6c 6c 62 61 63 6b 20 28 50 65  ace Callback (Pe
1bf30 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20  r-Connection).. 
1bf40 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
1bf50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1bf60 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1bf70 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 65 6e     // NOTE: When
1bf80 20 75 73 69 6e 67 20 76 65 72 73 69 6f 6e 20 33   using version 3
1bf90 2e 31 34 20 28 6f 72 20 6c 61 74 65 72 29 20 6f  .14 (or later) o
1bfa0 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
1bfb0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  e..            /
1bfc0 2f 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 2c  /       library,
1bfd0 20 75 73 65 20 74 68 65 20 6e 65 77 65 72 20 73   use the newer s
1bfe0 71 6c 69 74 65 33 5f 74 72 61 63 65 5f 76 32 28  qlite3_trace_v2(
1bff0 29 20 41 50 49 20 69 6e 20 6f 72 64 65 72 0d 0a  ) API in order..
1c000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1c010 20 20 20 20 20 74 6f 20 75 6e 68 6f 6f 6b 20 74       to unhook t
1c020 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
1c030 6b 2c 20 6a 75 73 74 20 69 6e 20 63 61 73 65 20  k, just in case 
1c040 74 68 65 20 6f 6c 64 65 72 0d 0a 20 20 20 20 20  the older..     
1c050 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1c060 41 50 49 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  API is not avail
1c070 61 62 6c 65 20 28 65 2e 67 2e 20 53 51 4c 49 54  able (e.g. SQLIT
1c080 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
1c090 44 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  D)...           
1c0a0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1c0b0 20 69 66 20 28 55 6e 73 61 66 65 4e 61 74 69 76   if (UnsafeNativ
1c0c0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1c0d0 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62  _libversion_numb
1c0e0 65 72 28 29 20 3e 3d 20 33 30 31 34 30 30 30 29  er() >= 3014000)
1c0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c100 20 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61    SetTraceCallba
1c110 63 6b 32 28 53 51 4c 69 74 65 54 72 61 63 65 46  ck2(SQLiteTraceF
1c120 6c 61 67 73 2e 53 51 4c 49 54 45 5f 54 52 41 43  lags.SQLITE_TRAC
1c130 45 5f 4e 4f 4e 45 2c 20 6e 75 6c 6c 29 3b 20 2f  E_NONE, null); /
1c140 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
1c150 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
1c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
1c170 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 6e  tTraceCallback(n
1c180 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  ull); /* throw *
1c190 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 69  /..        }..#i
1c1a0 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
1c1b0 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
1c1c0 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 63  CTION..        c
1c1d0 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1c1e0 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  e)..#else..     
1c1f0 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1c200 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ion)..#endif..  
1c210 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45        {..#if !NE
1c220 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
1c230 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
1c240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
1c250 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1c260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c270 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
1c280 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
1c290 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2b0 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
1c2c0 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2e0 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75      "Failed to u
1c2f0 6e 73 65 74 20 74 72 61 63 65 20 63 61 6c 6c 62  nset trace callb
1c300 61 63 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ack: {0}",..    
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c320 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  e)); /* throw */
1c330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1c340 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
1c350 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
1c360 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c370 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
1c380 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
1c390 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
1c3a0 20 20 20 20 20 20 20 20 41 70 70 65 6e 64 45 72          AppendEr
1c3b0 72 6f 72 28 62 75 69 6c 64 65 72 2c 20 22 66 61  ror(builder, "fa
1c3c0 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 74 72  iled to unset tr
1c3d0 61 63 65 20 63 61 6c 6c 62 61 63 6b 22 29 3b 0d  ace callback");.
1c3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20  .            rc 
1c3f0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
1c400 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20  e.Error;....    
1c410 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
1c420 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1c430 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
1c440 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1c450 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1c460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1c4b0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1c4c0 20 43 6f 6d 6d 69 74 20 48 6f 6f 6b 20 28 50 65   Commit Hook (Pe
1c4d0 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20  r-Connection).. 
1c4e0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
1c4f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c500 20 20 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b     SetCommitHook
1c510 28 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77  (null); /* throw
1c520 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   */..        }..
1c530 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
1c540 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
1c550 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
1c560 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1c570 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  n e)..#else..   
1c580 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1c590 70 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a  ption)..#endif..
1c5a0 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
1c5b0 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
1c5c0 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
1c5d0 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
1c5e0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c5f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c600 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
1c610 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
1c620 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
1c630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c640 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
1c650 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
1c660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c670 20 20 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f        "Failed to
1c680 20 75 6e 73 65 74 20 63 6f 6d 6d 69 74 20 68 6f   unset commit ho
1c690 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ok: {0}",..     
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1c6b0 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  )); /* throw */.
1c6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1c6d0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1c6e0 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  h..            {
1c6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c700 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
1c710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1c720 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
1c730 20 20 20 20 20 20 20 41 70 70 65 6e 64 45 72 72         AppendErr
1c740 6f 72 28 62 75 69 6c 64 65 72 2c 20 22 66 61 69  or(builder, "fai
1c750 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 63 6f 6d  led to unset com
1c760 6d 69 74 20 68 6f 6f 6b 22 29 3b 0d 0a 20 20 20  mit hook");..   
1c770 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
1c780 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
1c790 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ror;....        
1c7a0 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61 6c      result = fal
1c7b0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  se;..        }..
1c7c0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1c7d0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1c7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c830 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c840 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 70 64       #region Upd
1c850 61 74 65 20 48 6f 6f 6b 20 28 50 65 72 2d 43 6f  ate Hook (Per-Co
1c860 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  nnection)..     
1c870 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1c880 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
1c890 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 6e 75 6c  etUpdateHook(nul
1c8a0 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  l); /* throw */.
1c8b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20  .        }..#if 
1c8c0 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
1c8d0 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
1c8e0 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 63 61 74  ION..        cat
1c8f0 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1c900 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
1c910 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1c920 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  n)..#endif..    
1c930 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f      {..#if !NET_
1c940 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
1c950 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
1c960 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1c970 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
1c9a0 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
1c9b0 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9d0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
1c9e0 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca00 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75 6e 73    "Failed to uns
1ca10 65 74 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20  et update hook: 
1ca20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
1ca30 20 20 20 20 20 20 20 20 20 20 20 65 29 29 3b 20             e)); 
1ca40 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
1ca50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1ca60 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
1ca70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ca90 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
1caa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
1cab0 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  dif....         
1cac0 20 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28 62     AppendError(b
1cad0 75 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64 20  uilder, "failed 
1cae0 74 6f 20 75 6e 73 65 74 20 75 70 64 61 74 65 20  to unset update 
1caf0 68 6f 6f 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  hook");..       
1cb00 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74 65       rc = SQLite
1cb10 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
1cb20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cb30 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d  result = false;.
1cb40 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1cb50 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1cb60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1cb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbc0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1cbd0 20 23 72 65 67 69 6f 6e 20 41 75 74 68 6f 72 69   #region Authori
1cbe0 7a 65 72 20 48 6f 6f 6b 20 28 50 65 72 2d 43 6f  zer Hook (Per-Co
1cbf0 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  nnection)..     
1cc00 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
1cc10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
1cc20 65 74 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f 6b  etAuthorizerHook
1cc30 28 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77  (null); /* throw
1cc40 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   */..        }..
1cc50 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
1cc60 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
1cc70 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
1cc80 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1cc90 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  n e)..#else..   
1cca0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1ccb0 70 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a  ption)..#endif..
1ccc0 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
1ccd0 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
1cce0 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
1ccf0 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
1cd00 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1cd10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1cd20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
1cd30 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
1cd40 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
1cd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd60 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
1cd70 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
1cd80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cd90 20 20 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f        "Failed to
1cda0 20 75 6e 73 65 74 20 61 75 74 68 6f 72 69 7a 65   unset authorize
1cdb0 72 20 68 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a 20  r hook: {0}",.. 
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdd0 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77     e)); /* throw
1cde0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1cdf0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1ce00 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
1ce10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ce20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
1ce30 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
1ce40 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
1ce50 20 20 20 20 20 20 20 20 20 20 20 41 70 70 65 6e             Appen
1ce60 64 45 72 72 6f 72 28 62 75 69 6c 64 65 72 2c 20  dError(builder, 
1ce70 22 66 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74  "failed to unset
1ce80 20 61 75 74 68 6f 72 69 7a 65 72 20 68 6f 6f 6b   authorizer hook
1ce90 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
1cea0 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
1ceb0 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a  rCode.Error;....
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1ced0 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  lt = false;..   
1cee0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1cef0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1cf00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1cf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf60 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
1cf70 67 69 6f 6e 20 50 72 6f 67 72 65 73 73 20 48 6f  gion Progress Ho
1cf80 6f 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74 69  ok (Per-Connecti
1cf90 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 72 79  on)..        try
1cfa0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1cfb0 20 20 20 20 20 20 20 20 20 53 65 74 50 72 6f 67           SetProg
1cfc0 72 65 73 73 48 6f 6f 6b 28 30 2c 20 6e 75 6c 6c  ressHook(0, null
1cfd0 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
1cfe0 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21          }..#if !
1cff0 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
1d000 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
1d010 4f 4e 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ON..        catc
1d020 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
1d030 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
1d040 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
1d050 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  )..#endif..     
1d060 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43     {..#if !NET_C
1d070 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
1d080 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
1d090 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1d0c0 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48  race.WriteLine(H
1d0d0 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
1d0e0 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d100 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
1d110 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
1d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d130 20 22 46 61 69 6c 65 64 20 74 6f 20 75 6e 73 65   "Failed to unse
1d140 74 20 70 72 6f 67 72 65 73 73 20 68 6f 6f 6b 3a  t progress hook:
1d150 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
1d160 20 20 20 20 20 20 20 20 20 20 20 20 65 29 29 3b              e));
1d170 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1d180 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1d190 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
1d1a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d1c0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
1d1d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
1d1e0 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
1d1f0 20 20 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28      AppendError(
1d200 62 75 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64  builder, "failed
1d210 20 74 6f 20 75 6e 73 65 74 20 70 72 6f 67 72 65   to unset progre
1d220 73 73 20 68 6f 6f 6b 22 29 3b 0d 0a 20 20 20 20  ss hook");..    
1d230 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
1d240 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
1d250 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  or;....         
1d260 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73     result = fals
1d270 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
1d280 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1d290 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
1d2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1d300 20 20 20 20 23 72 65 67 69 6f 6e 20 4c 6f 67 20      #region Log 
1d310 43 61 6c 6c 62 61 63 6b 20 28 47 6c 6f 62 61 6c  Callback (Global
1d320 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  )..        //.. 
1d330 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1d340 57 65 20 68 61 76 65 20 74 6f 20 62 65 20 63 61  We have to be ca
1d350 72 65 66 75 6c 20 68 65 72 65 20 62 65 63 61 75  reful here becau
1d360 73 65 20 74 68 65 20 6c 6f 67 20 63 61 6c 6c 62  se the log callb
1d370 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ack..        // 
1d380 20 20 20 20 20 20 69 73 20 6e 6f 74 20 70 65 72        is not per
1d390 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 6e 20 74  -connection on t
1d3a0 68 65 20 6e 61 74 69 76 65 20 73 69 64 65 2e 20  he native side. 
1d3b0 20 49 74 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20   It should..    
1d3c0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 6e 6c      //       onl
1d3d0 79 20 62 65 20 75 6e 73 65 74 20 62 79 20 74 68  y be unset by th
1d3e0 69 73 20 6d 65 74 68 6f 64 20 69 66 20 74 68 69  is method if thi
1d3f0 73 20 69 6e 73 74 61 6e 63 65 20 77 61 73 0d 0a  s instance was..
1d400 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1d410 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1d420 20 73 65 74 74 69 6e 67 20 69 74 2e 0d 0a 20 20   setting it...  
1d430 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1d440 20 20 69 66 20 28 69 6e 63 6c 75 64 65 47 6c 6f    if (includeGlo
1d450 62 61 6c 20 26 26 20 5f 73 65 74 4c 6f 67 43 61  bal && _setLogCa
1d460 6c 6c 62 61 63 6b 29 0d 0a 20 20 20 20 20 20 20  llback)..       
1d470 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d480 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1d490 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d4a0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1d4b0 6f 64 65 20 72 63 32 20 3d 20 53 65 74 4c 6f 67  ode rc2 = SetLog
1d4c0 43 61 6c 6c 62 61 63 6b 28 6e 75 6c 6c 29 3b 20  Callback(null); 
1d4d0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d4f0 66 20 28 72 63 32 20 21 3d 20 53 51 4c 69 74 65  f (rc2 != SQLite
1d500 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
1d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1d520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d530 20 20 20 20 20 20 41 70 70 65 6e 64 45 72 72 6f        AppendErro
1d540 72 28 62 75 69 6c 64 65 72 2c 20 22 63 6f 75 6c  r(builder, "coul
1d550 64 20 6e 6f 74 20 75 6e 73 65 74 20 6c 6f 67 20  d not unset log 
1d560 63 61 6c 6c 62 61 63 6b 22 29 3b 0d 0a 20 20 20  callback");..   
1d570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d580 20 72 63 20 3d 20 72 63 32 3b 0d 0a 0d 0a 20 20   rc = rc2;....  
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5a0 20 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65    result = false
1d5b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d5c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1d5d0 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    }..#if !NET_CO
1d5e0 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
1d5f0 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
1d600 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
1d610 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23  (Exception e)..#
1d620 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1d630 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1d640 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  on)..#endif..   
1d650 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20           {..#if 
1d660 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
1d670 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
1d680 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ION..           
1d690 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1d6a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6c0 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
1d6d0 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
1d6e0 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d700 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
1d710 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
1d720 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d730 20 20 20 20 20 20 20 20 20 20 20 22 46 61 69 6c             "Fail
1d740 65 64 20 74 6f 20 75 6e 73 65 74 20 6c 6f 67 20  ed to unset log 
1d750 63 61 6c 6c 62 61 63 6b 3a 20 7b 30 7d 22 2c 0d  callback: {0}",.
1d760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d770 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a           e)); /*
1d780 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
1d790 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
1d7b0 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
1d7c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
1d7e0 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
1d7f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
1d800 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
1d810 20 20 20 20 20 20 20 20 20 41 70 70 65 6e 64 45           AppendE
1d820 72 72 6f 72 28 62 75 69 6c 64 65 72 2c 20 22 66  rror(builder, "f
1d830 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 6c  ailed to unset l
1d840 6f 67 20 63 61 6c 6c 62 61 63 6b 22 29 3b 0d 0a  og callback");..
1d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d860 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  rc = SQLiteError
1d870 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20  Code.Error;.... 
1d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1d890 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a  esult = false;..
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1d8b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1d8c0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1d8d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1d8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d930 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ///....        i
1d940 66 20 28 21 72 65 73 75 6c 74 20 26 26 20 63 61  f (!result && ca
1d950 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 20 20 20  nThrow)..       
1d960 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
1d970 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
1d980 63 2c 20 62 75 69 6c 64 65 72 2e 54 6f 53 74 72  c, builder.ToStr
1d990 69 6e 67 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ing());....     
1d9a0 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
1d9b0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
1d9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1da20 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
1da30 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
1da40 69 73 20 6d 65 74 68 6f 64 20 61 74 74 65 6d 70  is method attemp
1da50 74 73 20 74 6f 20 66 72 65 65 20 74 68 65 20 63  ts to free the c
1da60 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 6e  ached database n
1da70 61 6d 65 20 75 73 65 64 20 77 69 74 68 20 74 68  ame used with th
1da80 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  e..    /// <see 
1da90 63 72 65 66 3d 22 53 65 74 43 6f 6e 66 69 67 75  cref="SetConfigu
1daa0 72 61 74 69 6f 6e 4f 70 74 69 6f 6e 22 20 2f 3e  rationOption" />
1dab0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f   method...    //
1dac0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1dad0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1dae0 65 3d 22 63 61 6e 54 68 72 6f 77 22 3e 0d 0a 20  e="canThrow">.. 
1daf0 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
1db00 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69  if this method i
1db10 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64  s being executed
1db20 20 77 69 74 68 69 6e 20 61 20 63 6f 6e 74 65 78   within a contex
1db30 74 20 77 68 65 72 65 20 69 74 20 63 61 6e 0d 0a  t where it can..
1db40 20 20 20 20 2f 2f 2f 20 74 68 72 6f 77 20 61 6e      /// throw an
1db50 20 65 78 63 65 70 74 69 6f 6e 20 69 6e 20 74 68   exception in th
1db60 65 20 65 76 65 6e 74 20 6f 66 20 66 61 69 6c 75  e event of failu
1db70 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 7a  re; otherwise, z
1db80 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ero...    /// </
1db90 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1dba0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
1dbb0 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
1dbc0 68 69 73 20 6d 65 74 68 6f 64 20 77 61 73 20 73  his method was s
1dbd0 75 63 63 65 73 73 66 75 6c 3b 20 6f 74 68 65 72  uccessful; other
1dbe0 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20  wise, zero...   
1dbf0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1dc00 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f  .    private boo
1dc10 6c 20 46 72 65 65 44 62 4e 61 6d 65 28 0d 0a 20  l FreeDbName(.. 
1dc20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 61 6e 54         bool canT
1dc30 68 72 6f 77 0d 0a 20 20 20 20 20 20 20 20 29 0d  hrow..        ).
1dc40 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1dc50 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1dc70 64 62 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72  dbName != IntPtr
1dc80 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1dc90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1dca0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
1dcb0 6f 72 79 2e 46 72 65 65 28 64 62 4e 61 6d 65 29  ory.Free(dbName)
1dcc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1dcd0 20 20 20 64 62 4e 61 6d 65 20 3d 20 49 6e 74 50     dbName = IntP
1dce0 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
1dcf0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1dd00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1dd10 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
1dd20 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
1dd30 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
1dd40 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
1dd50 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1dd60 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  n e)..#else..   
1dd70 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1dd80 70 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a  ption)..#endif..
1dd90 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
1dda0 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
1ddb0 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
1ddc0 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
1ddd0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1dde0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ddf0 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
1de00 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
1de10 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
1de20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1de30 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
1de40 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
1de50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1de60 20 20 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f        "Failed to
1de70 20 66 72 65 65 20 64 61 74 61 62 61 73 65 20 6e   free database n
1de80 61 6d 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ame: {0}",..    
1de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dea0 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  e)); /* throw */
1deb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1dec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
1ded0 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
1dee0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1def0 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
1df00 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
1df10 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
1df20 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6e 54          if (canT
1df30 68 72 6f 77 29 0d 0a 20 20 20 20 20 20 20 20 20  hrow)..         
1df40 20 20 20 20 20 20 20 74 68 72 6f 77 3b 0d 0a 20         throw;.. 
1df50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1df60 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1df70 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
1df80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1dfe0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
1dff0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72  ary>..    /// Cr
1e000 65 61 74 65 73 20 61 20 6e 65 77 20 53 51 4c 69  eates a new SQLi
1e010 74 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  te backup object
1e020 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 70 72   based on the pr
1e030 6f 76 69 64 65 64 20 64 65 73 74 69 6e 61 74 69  ovided destinati
1e040 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61  on..    /// data
1e050 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
1e060 20 20 54 68 65 20 73 6f 75 72 63 65 20 64 61 74    The source dat
1e070 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1e080 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20   is the one..   
1e090 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20   /// associated 
1e0a0 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74  with this object
1e0b0 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 61 6e  .  The source an
1e0c0 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  d destination da
1e0d0 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
1e0e0 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e  connections cann
1e0f0 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65 2e 0d  ot be the same..
1e100 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1e110 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
1e120 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e  ram name="destCn
1e130 6e 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69  n">The destinati
1e140 6f 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  on database conn
1e150 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  ection.</param>.
1e160 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1e170 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e  name="destName">
1e180 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  The destination 
1e190 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f  database name.</
1e1a0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1e1b0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75  <param name="sou
1e1c0 72 63 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75  rceName">The sou
1e1d0 72 63 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d  rce database nam
1e1e0 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
1e1f0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
1e200 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20 62   newly created b
1e210 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72  ackup object.</r
1e220 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
1e230 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
1e240 51 4c 69 74 65 42 61 63 6b 75 70 20 49 6e 69 74  QLiteBackup Init
1e250 69 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20  ializeBackup(.. 
1e260 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
1e270 6e 65 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c  nection destCnn,
1e280 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
1e290 20 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20 20 20   destName,..    
1e2a0 20 20 20 20 73 74 72 69 6e 67 20 73 6f 75 72 63      string sourc
1e2b0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29  eName..        )
1e2c0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1e2d0 20 69 66 20 28 64 65 73 74 43 6e 6e 20 3d 3d 20   if (destCnn == 
1e2e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1e2f0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
1e300 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
1e310 6f 6e 28 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a  on("destCnn");..
1e320 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
1e330 73 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d  stName == null).
1e340 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1e350 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
1e360 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65  ullException("de
1e370 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20  stName");....   
1e380 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 4e       if (sourceN
1e390 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
1e3a0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1e3b0 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
1e3c0 45 78 63 65 70 74 69 6f 6e 28 22 73 6f 75 72 63  Exception("sourc
1e3d0 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  eName");....    
1e3e0 20 20 20 20 53 51 4c 69 74 65 33 20 64 65 73 74      SQLite3 dest
1e3f0 53 71 6c 69 74 65 33 20 3d 20 64 65 73 74 43 6e  Sqlite3 = destCn
1e400 6e 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69 74 65  n._sql as SQLite
1e410 33 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  3;....        if
1e420 20 28 64 65 73 74 53 71 6c 69 74 65 33 20 3d 3d   (destSqlite3 ==
1e430 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1e440 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
1e450 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
1e460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e470 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63    "Destination c
1e480 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 6e 6f  onnection has no
1e490 20 77 72 61 70 70 65 72 2e 22 2c 0d 0a 20 20 20   wrapper.",..   
1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65               "de
1e4b0 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  stCnn");....    
1e4c0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
1e4d0 74 69 6f 6e 48 61 6e 64 6c 65 20 64 65 73 74 48  tionHandle destH
1e4e0 61 6e 64 6c 65 20 3d 20 64 65 73 74 53 71 6c 69  andle = destSqli
1e4f0 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20  te3._sql;....   
1e500 20 20 20 20 20 69 66 20 28 64 65 73 74 48 61 6e       if (destHan
1e510 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
1e520 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1e530 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65  new ArgumentExce
1e540 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
1e550 20 20 20 20 20 20 20 20 22 44 65 73 74 69 6e 61          "Destina
1e560 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
1e570 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
1e580 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20 20 20 20  andle.",..      
1e590 20 20 20 20 20 20 20 20 20 20 22 64 65 73 74 43            "destC
1e5a0 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nn");....       
1e5b0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
1e5c0 6e 48 61 6e 64 6c 65 20 73 6f 75 72 63 65 48 61  nHandle sourceHa
1e5d0 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a 0d 0a  ndle = _sql;....
1e5e0 20 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72          if (sour
1e5f0 63 65 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c  ceHandle == null
1e600 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
1e610 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
1e620 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
1e630 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
1e640 20 20 20 20 20 22 53 6f 75 72 63 65 20 63 6f 6e       "Source con
1e650 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69  nection has an i
1e660 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
1e670 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79 74  ;....        byt
1e680 65 5b 5d 20 7a 44 65 73 74 4e 61 6d 65 20 3d 20  e[] zDestName = 
1e690 54 6f 55 54 46 38 28 64 65 73 74 4e 61 6d 65 29  ToUTF8(destName)
1e6a0 3b 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  ;..        byte[
1e6b0 5d 20 7a 53 6f 75 72 63 65 4e 61 6d 65 20 3d 20  ] zSourceName = 
1e6c0 54 6f 55 54 46 38 28 73 6f 75 72 63 65 4e 61 6d  ToUTF8(sourceNam
1e6d0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  e);....        S
1e6e0 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
1e6f0 65 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d  e backupHandle =
1e700 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
1e710 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
1e720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1e730 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
1e740 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1e750 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45   finally /* NOTE
1e760 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29  : Thread.Abort()
1e770 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d   protection. */.
1e780 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1e790 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 62          IntPtr b
1e7a0 61 63 6b 75 70 20 3d 20 55 6e 73 61 66 65 4e 61  ackup = UnsafeNa
1e7b0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1e7c0 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28  te3_backup_init(
1e7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e7e0 20 20 64 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44    destHandle, zD
1e7f0 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48  estName, sourceH
1e800 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65 4e 61  andle, zSourceNa
1e810 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
1e820 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
1e830 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
1e840 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1e860 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
1e870 65 73 75 6c 74 43 6f 64 65 20 3d 20 52 65 73 75  esultCode = Resu
1e880 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20  ltCode();....   
1e890 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1e8a0 28 72 65 73 75 6c 74 43 6f 64 65 20 21 3d 20 53  (resultCode != S
1e8b0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
1e8c0 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
1e8d0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1e8e0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
1e8f0 6e 28 72 65 73 75 6c 74 43 6f 64 65 2c 20 47 65  n(resultCode, Ge
1e900 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
1e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e920 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1e930 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1e940 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
1e950 69 6f 6e 28 22 66 61 69 6c 65 64 20 74 6f 20 69  ion("failed to i
1e960 6e 69 74 69 61 6c 69 7a 65 20 62 61 63 6b 75 70  nitialize backup
1e970 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
1e980 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1e990 20 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 20 3d    backupHandle =
1e9a0 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b 75   new SQLiteBacku
1e9b0 70 48 61 6e 64 6c 65 28 64 65 73 74 48 61 6e 64  pHandle(destHand
1e9c0 6c 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a 20 20  le, backup);..  
1e9d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e9e0 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
1e9f0 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
1ea00 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
1ea10 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
1ea20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1ea30 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
1ea40 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48  ype.NewCriticalH
1ea50 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20  andle, null,..  
1ea60 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1ea70 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 62 61 63 6b  null, null, back
1ea80 75 70 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20  upHandle, null, 
1ea90 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a  new object[] {..
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
1eab0 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 64 65 73  of(SQLite3), des
1eac0 74 43 6e 6e 2c 20 64 65 73 74 4e 61 6d 65 2c 20  tCnn, destName, 
1ead0 73 6f 75 72 63 65 4e 61 6d 65 20 7d 29 29 3b 0d  sourceName }));.
1eae0 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
1eaf0 6e 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63 6b  n new SQLiteBack
1eb00 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  up(..           
1eb10 20 74 68 69 73 2c 20 62 61 63 6b 75 70 48 61 6e   this, backupHan
1eb20 64 6c 65 2c 20 64 65 73 74 48 61 6e 64 6c 65 2c  dle, destHandle,
1eb30 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72   zDestName, sour
1eb40 63 65 48 61 6e 64 6c 65 2c 0d 0a 20 20 20 20 20  ceHandle,..     
1eb50 20 20 20 20 20 20 20 7a 53 6f 75 72 63 65 4e 61         zSourceNa
1eb60 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  me);..    }.... 
1eb70 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1eb80 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69 65 73  ..    /// Copies
1eb90 20 75 70 20 74 6f 20 4e 20 70 61 67 65 73 20 66   up to N pages f
1eba0 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 20 64  rom the source d
1ebb0 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64  atabase to the d
1ebc0 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20 20 20  estination..    
1ebd0 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 61 73 73  /// database ass
1ebe0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1ebf0 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b 75   specified backu
1ec00 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
1ec10 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1ec20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1ec30 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
1ec40 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
1ec50 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20   use.</param>.. 
1ec60 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1ec70 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20 20 20  me="nPage">..   
1ec80 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
1ec90 6f 66 20 70 61 67 65 73 20 74 6f 20 63 6f 70 79  of pages to copy
1eca0 2c 20 6e 65 67 61 74 69 76 65 20 74 6f 20 63 6f  , negative to co
1ecb0 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67  py all remaining
1ecc0 20 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f   pages...    ///
1ecd0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
1ece0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1ecf0 72 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f  retry">..    ///
1ed00 20 53 65 74 20 74 6f 20 74 72 75 65 20 69 66 20   Set to true if 
1ed10 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6e 65  the operation ne
1ed20 65 64 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  eds to be retrie
1ed30 64 20 64 75 65 20 74 6f 20 64 61 74 61 62 61 73  d due to databas
1ed40 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63 6b 69  e..    /// locki
1ed50 6e 67 20 69 73 73 75 65 73 3b 20 6f 74 68 65 72  ng issues; other
1ed60 77 69 73 65 2c 20 73 65 74 20 74 6f 20 66 61 6c  wise, set to fal
1ed70 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  se...    /// </p
1ed80 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1ed90 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
1eda0 2f 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  / True if there 
1edb0 61 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20 74  are more pages t
1edc0 6f 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61 6c  o be copied, fal
1edd0 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20  se otherwise... 
1ede0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1edf0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1ee00 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 53 74  override bool St
1ee10 65 70 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20  epBackup(..     
1ee20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20     SQLiteBackup 
1ee30 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20 20 20 20  backup,..       
1ee40 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a 20 20 20   int nPage,..   
1ee50 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 72 65       ref bool re
1ee60 74 72 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  try..        )..
1ee70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
1ee80 65 74 72 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  etry = false;...
1ee90 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63  .        if (bac
1eea0 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  kup == null)..  
1eeb0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1eec0 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
1eed0 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b 75  Exception("backu
1eee0 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p");....        
1eef0 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64  SQLiteBackupHand
1ef00 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63 6b  le handle = back
1ef10 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b 75  up._sqlite_backu
1ef20 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  p;....        if
1ef30 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c   (handle == null
1ef40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
1ef50 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
1ef60 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
1ef70 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
1ef80 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
1ef90 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
1efa0 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d  id handle.");...
1efb0 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
1efc0 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64  handlePtr = hand
1efd0 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  le;....        i
1efe0 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d 20  f (handlePtr == 
1eff0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
1f000 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1f010 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
1f020 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
1f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f040 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
1f050 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
1f060 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29 3b  ndle pointer.");
1f070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
1f080 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
1f090 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1f0a0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
1f0b0 75 70 5f 73 74 65 70 28 68 61 6e 64 6c 65 50 74  up_step(handlePt
1f0c0 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20 20 20 20  r, nPage);..    
1f0d0 20 20 20 20 62 61 63 6b 75 70 2e 5f 73 74 65 70      backup._step
1f0e0 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a 20 4e  Result = n; /* N
1f0f0 4f 54 45 3a 20 53 61 76 65 20 66 6f 72 20 75 73  OTE: Save for us
1f100 65 20 62 79 20 46 69 6e 69 73 68 42 61 63 6b 75  e by FinishBacku
1f110 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  p. */....       
1f120 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
1f130 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
1f140 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f150 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
1f160 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
1f170 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1f180 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
1f190 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20  Code.Busy)..    
1f1a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f1b0 20 20 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b     retry = true;
1f1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1f1d0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1f1e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
1f1f0 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
1f200 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63  iteErrorCode.Loc
1f210 6b 65 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ked)..        {.
1f220 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1f230 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ry = true;..    
1f240 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1f250 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1f260 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66  .        else if
1f270 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
1f280 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d 0a 20 20  orCode.Done)..  
1f290 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f2a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1f2b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
1f2c0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
1f2d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f2e0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
1f2f0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
1f300 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
1f310 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1f320 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
1f330 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1f340 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75  / Returns the nu
1f350 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72 65  mber of pages re
1f360 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f  maining to be co
1f370 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 73 6f  pied from the so
1f380 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  urce..    /// da
1f390 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64 65  tabase to the de
1f3a0 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
1f3b0 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  se associated wi
1f3c0 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
1f3d0 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63 6b 75 70  ..    /// backup
1f3e0 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f   object...    //
1f3f0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1f400 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1f410 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62  e="backup">The b
1f420 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20  ackup object to 
1f430 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  check.</param>..
1f440 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1f450 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70  >The number of p
1f460 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74  ages remaining t
1f470 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c 2f 72 65  o be copied.</re
1f480 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
1f490 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
1f4a0 74 20 52 65 6d 61 69 6e 69 6e 67 42 61 63 6b 75  t RemainingBacku
1f4b0 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
1f4c0 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
1f4d0 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
1f4e0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
1f4f0 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
1f500 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1f510 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
1f520 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
1f530 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
1f540 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
1f550 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
1f560 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
1f570 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
1f580 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
1f590 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1f5a0 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
1f5b0 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
1f5c0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
1f5d0 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
1f5e0 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
1f5f0 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
1f600 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
1f610 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
1f620 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
1f630 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
1f640 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
1f650 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1f660 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
1f670 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
1f680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f690 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
1f6a0 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
1f6b0 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
1f6c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
1f6d0 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
1f6e0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1f6f0 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69 6e 69 6e  _backup_remainin
1f700 67 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20  g(handlePtr);.. 
1f710 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
1f720 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1f730 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 74  // Returns the t
1f740 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70  otal number of p
1f750 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72  ages in the sour
1f760 63 65 20 64 61 74 61 62 61 73 65 20 61 73 73 6f  ce database asso
1f770 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  ciated..    /// 
1f780 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
1f790 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  ed backup object
1f7a0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1f7b0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
1f7c0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b  param name="back
1f7d0 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f  up">The backup o
1f7e0 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c  bject to check.<
1f7f0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1f800 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 74 6f   <returns>The to
1f810 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  tal number of pa
1f820 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63  ges in the sourc
1f830 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 72 65 74  e database.</ret
1f840 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
1f850 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
1f860 20 50 61 67 65 43 6f 75 6e 74 42 61 63 6b 75 70   PageCountBackup
1f870 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
1f880 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d 0a  eBackup backup..
1f890 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
1f8a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61  ..        if (ba
1f8b0 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ckup == null).. 
1f8c0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1f8d0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
1f8e0 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63 6b  lException("back
1f8f0 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  up");....       
1f900 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
1f910 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61 63  dle handle = bac
1f920 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63 6b  kup._sqlite_back
1f930 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  up;....        i
1f940 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c  f (handle == nul
1f950 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1f960 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
1f970 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
1f980 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1f990 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
1f9a0 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
1f9b0 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a  lid handle.");..
1f9c0 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
1f9d0 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e   handlePtr = han
1f9e0 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
1f9f0 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d 3d  if (handlePtr ==
1fa00 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
1fa10 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1fa20 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
1fa30 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
1fa40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fa50 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
1fa60 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
1fa70 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22 29  andle pointer.")
1fa80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
1fa90 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
1faa0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1fab0 62 61 63 6b 75 70 5f 70 61 67 65 63 6f 75 6e 74  backup_pagecount
1fac0 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 20 20  (handlePtr);..  
1fad0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
1fae0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1faf0 2f 20 44 65 73 74 72 6f 79 73 20 74 68 65 20 62  / Destroys the b
1fb00 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c 20 72 6f  ackup object, ro
1fb10 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e 79 20 62  lling back any b
1fb20 61 63 6b 75 70 20 74 68 61 74 20 6d 61 79 20 62  ackup that may b
1fb30 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70 72  e in..    /// pr
1fb40 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ogess...    /// 
1fb50 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1fb60 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1fb70 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63  "backup">The bac
1fb80 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 64 65  kup object to de
1fb90 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  stroy.</param>..
1fba0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1fbb0 72 72 69 64 65 20 76 6f 69 64 20 46 69 6e 69 73  rride void Finis
1fbc0 68 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20  hBackup(..      
1fbd0 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62    SQLiteBackup b
1fbe0 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29  ackup..        )
1fbf0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1fc00 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e   if (backup == n
1fc10 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1fc20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
1fc30 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
1fc40 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a  n("backup");....
1fc50 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
1fc60 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c  ckupHandle handl
1fc70 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69  e = backup._sqli
1fc80 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20  te_backup;....  
1fc90 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65        if (handle
1fca0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1fcb0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1fcc0 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
1fcd0 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
1fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61               "Ba
1fcf0 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20  ckup object has 
1fd00 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
1fd10 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
1fd20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74   IntPtr handlePt
1fd30 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
1fd40 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c         if (handl
1fd50 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  ePtr == IntPtr.Z
1fd60 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
1fd70 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1fd80 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1fd90 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
1fda0 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
1fdb0 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
1fdc0 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69  valid handle poi
1fdd0 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 23 69 66 20  nter.");....#if 
1fde0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
1fdf0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1fe00 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
1fe10 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1fe20 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
1fe30 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28  _finish_interop(
1fe40 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6c  handlePtr);..#el
1fe50 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  se..        SQLi
1fe60 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
1fe70 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1fe80 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
1fe90 75 70 5f 66 69 6e 69 73 68 28 68 61 6e 64 6c 65  up_finish(handle
1fea0 50 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  Ptr);..#endif.. 
1feb0 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 53 65         handle.Se
1fec0 74 48 61 6e 64 6c 65 41 73 49 6e 76 61 6c 69 64  tHandleAsInvalid
1fed0 28 29 3b 0d 0a 0d 0a 23 69 66 20 43 4f 55 4e 54  ();....#if COUNT
1fee0 5f 48 41 4e 44 4c 45 0d 0a 20 20 20 20 20 20 20  _HANDLE..       
1fef0 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74   if ((n == SQLit
1ff00 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c  eErrorCode.Ok) |
1ff10 7c 20 28 6e 20 3d 3d 20 62 61 63 6b 75 70 2e 5f  | (n == backup._
1ff20 73 74 65 70 52 65 73 75 6c 74 29 29 20 68 61 6e  stepResult)) han
1ff30 64 6c 65 2e 57 61 73 52 65 6c 65 61 73 65 64 4f  dle.WasReleasedO
1ff40 6b 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  k();..#endif....
1ff50 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 21          if ((n !
1ff60 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
1ff70 65 2e 4f 6b 29 20 26 26 20 28 6e 20 21 3d 20 62  e.Ok) && (n != b
1ff80 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c  ackup._stepResul
1ff90 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
1ffa0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
1ffb0 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
1ffc0 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
1ffd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1ffe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20040 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
20050 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
20060 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53 51 4c  mines if the SQL
20070 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
20080 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61   has been initia
20090 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d 0a 20  lized for the.. 
200a0 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70     /// current p
200b0 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
200c0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
200d0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
200e0 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61      /// A boolea
200f0 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  n indicating whe
20100 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
20110 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
20120 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  ary has been..  
20130 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65    /// initialize
20140 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
20150 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
20160 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
20170 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
20180 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 49 6e 69  rride bool IsIni
20190 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20  tialized()..    
201a0 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
201b0 6e 20 53 74 61 74 69 63 49 73 49 6e 69 74 69 61  n StaticIsInitia
201c0 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d  lized();..    }.
201d0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
201e0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
201f0 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20  termines if the 
20200 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
20210 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69  ary has been ini
20220 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
20230 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
20240 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
20250 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
20260 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
20270 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f  >..    /// A boo
20280 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20  lean indicating 
20290 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
202a0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
202b0 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d  ibrary has been.
202c0 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c  .    /// initial
202d0 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72  ized for the cur
202e0 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
202f0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
20300 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
20310 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 74 61 74  static bool Stat
20320 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
20330 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
20340 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
20350 20 42 55 47 46 49 58 3a 20 50 72 65 76 65 6e 74   BUGFIX: Prevent
20360 20 72 61 63 65 73 20 77 69 74 68 20 6f 74 68 65   races with othe
20370 72 20 74 68 72 65 61 64 73 20 66 6f 72 20 74 68  r threads for th
20380 69 73 20 65 6e 74 69 72 65 20 62 6c 6f 63 6b 2c  is entire block,
20390 20 64 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   due..        //
203a0 20 20 20 20 20 20 20 20 20 74 6f 20 74 68 65 20           to the 
203b0 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73 65 6d 61  try/finally sema
203c0 6e 74 69 63 73 2e 20 20 53 65 65 20 74 69 63 6b  ntics.  See tick
203d0 65 74 20 5b 37 32 39 30 35 63 39 61 37 37 5d 2e  et [72905c9a77].
203e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
203f0 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
20400 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  Root)..        {
20410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20430 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the 
20440 73 74 61 74 65 20 6f 66 20 74 68 65 20 6c 6f 67  state of the log
20450 67 69 6e 67 20 63 6c 61 73 73 20 61 6e 64 20 74  ging class and t
20460 68 65 6e 20 72 65 73 74 6f 72 65 20 69 74 0d 0a  hen restore it..
20470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
20480 20 20 20 20 20 61 66 74 65 72 20 77 65 20 61 72       after we ar
20490 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20  e done to avoid 
204a0 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d 61 6e 79  logging too many
204b0 20 66 61 6c 73 65 20 65 72 72 6f 72 73 2e 0d 0a   false errors...
204c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
204d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
204e0 20 73 61 76 65 64 45 6e 61 62 6c 65 64 20 3d 20   savedEnabled = 
204f0 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
20500 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
20510 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65  SQLiteLog.Enable
20520 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  d = false;....  
20530 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
20540 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
20560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20570 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
20580 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73 65 73 20  method [ab]uses 
20590 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51  the fact that SQ
205a0 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  Lite will always
205b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
205c0 20 20 2f 2f 20 20 20 20 20 20 20 72 65 74 75 72    //       retur
205d0 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 66  n SQLITE_ERROR f
205e0 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77 6e 20 63  or any unknown c
205f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
20600 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
20610 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 2a 75       //       *u
20620 6e 6c 65 73 73 2a 20 74 68 65 20 53 51 4c 69 74  nless* the SQLit
20630 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c  e library has al
20640 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69  ready been initi
20650 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20  alized...       
20660 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
20670 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 20 69    In that case i
20680 74 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 72 65  t will always re
20690 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
206a0 53 45 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  SE...           
206b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
206c0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
206d0 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
206e0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
206f0 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  s.sqlite3_config
20700 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  _none(..        
20710 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
20720 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e  teConfigOpsEnum.
20730 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f  SQLITE_CONFIG_NO
20740 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  NE);....        
20750 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
20760 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
20770 72 43 6f 64 65 2e 4d 69 73 75 73 65 29 3b 0d 0a  rCode.Misuse);..
20780 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
20790 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
207a0 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
207b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
207c0 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61     SQLiteLog.Ena
207d0 62 6c 65 64 20 3d 20 73 61 76 65 64 45 6e 61 62  bled = savedEnab
207e0 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  led;..          
207f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
20800 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
20810 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
20820 2f 2f 2f 20 48 65 6c 70 65 72 20 66 75 6e 63 74  /// Helper funct
20830 69 6f 6e 20 74 6f 20 72 65 74 72 69 65 76 65 20  ion to retrieve 
20840 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 64 61 74 61  a column of data
20850 20 66 72 6f 6d 20 61 6e 20 61 63 74 69 76 65 20   from an active 
20860 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20  statement...    
20870 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
20880 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
20890 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 73  ame="stmt">The s
208a0 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 73  tatement being s
208b0 74 65 70 28 29 27 64 20 74 68 72 6f 75 67 68 3c  tep()'d through<
208c0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
208d0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c   <param name="fl
208e0 61 67 73 22 3e 54 68 65 20 66 6c 61 67 73 20 61  ags">The flags a
208f0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
20900 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f  he connection.</
20910 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
20920 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64  <param name="ind
20930 65 78 22 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 69  ex">The column i
20940 6e 64 65 78 20 74 6f 20 72 65 74 72 69 65 76 65  ndex to retrieve
20950 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
20960 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
20970 79 70 22 3e 54 68 65 20 74 79 70 65 20 6f 66 20  yp">The type of 
20980 64 61 74 61 20 63 6f 6e 74 61 69 6e 65 64 20 69  data contained i
20990 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 49  n the column.  I
209a0 66 20 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 2c  f Uninitialized,
209b0 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77   this function w
209c0 69 6c 6c 20 72 65 74 72 69 65 76 65 20 74 68 65  ill retrieve the
209d0 20 64 61 74 61 74 79 70 65 20 69 6e 66 6f 72 6d   datatype inform
209e0 61 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ation.</param>..
209f0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
20a00 3e 52 65 74 75 72 6e 73 20 74 68 65 20 64 61 74  >Returns the dat
20a10 61 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 3c  a in the column<
20a20 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
20a30 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
20a40 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65   object GetValue
20a50 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
20a60 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
20a70 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
20a80 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 53  gs, int index, S
20a90 51 4c 69 74 65 54 79 70 65 20 74 79 70 29 0d 0a  QLiteType typ)..
20aa0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 54 79 70      {..      Typ
20ab0 65 41 66 66 69 6e 69 74 79 20 61 66 66 20 3d 20  eAffinity aff = 
20ac0 74 79 70 2e 41 66 66 69 6e 69 74 79 3b 0d 0a 20  typ.Affinity;.. 
20ad0 20 20 20 20 20 69 66 20 28 61 66 66 20 3d 3d 20       if (aff == 
20ae0 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c  TypeAffinity.Nul
20af0 6c 29 20 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c  l) return DBNull
20b00 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 54  .Value;..      T
20b10 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  ype t = null;...
20b20 0a 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54  .      if (typ.T
20b30 79 70 65 20 21 3d 20 44 62 54 79 70 65 2e 4f 62  ype != DbType.Ob
20b40 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  ject)..      {..
20b50 20 20 20 20 20 20 20 20 74 20 3d 20 53 51 4c 69          t = SQLi
20b60 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69 74 65  teConvert.SQLite
20b70 54 79 70 65 54 6f 54 79 70 65 28 74 79 70 29 3b  TypeToType(typ);
20b80 0d 0a 20 20 20 20 20 20 20 20 61 66 66 20 3d 20  ..        aff = 
20b90 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79 28 74  TypeToAffinity(t
20ba0 2c 20 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20  , flags);..     
20bb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28   }....      if (
20bc0 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
20bd0 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 47  onnectionFlags.G
20be0 65 74 41 6c 6c 41 73 54 65 78 74 29 20 3d 3d 20  etAllAsText) == 
20bf0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
20c00 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41 73 54 65  Flags.GetAllAsTe
20c10 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72  xt)..          r
20c20 65 74 75 72 6e 20 47 65 74 54 65 78 74 28 73 74  eturn GetText(st
20c30 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  mt, index);.... 
20c40 20 20 20 20 20 73 77 69 74 63 68 20 28 61 66 66       switch (aff
20c50 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
20c60 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
20c70 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20  inity.Blob:..   
20c80 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54         if (typ.T
20c90 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75  ype == DbType.Gu
20ca0 69 64 20 26 26 20 74 79 70 2e 41 66 66 69 6e 69  id && typ.Affini
20cb0 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69  ty == TypeAffini
20cc0 74 79 2e 54 65 78 74 29 0d 0a 20 20 20 20 20 20  ty.Text)..      
20cd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
20ce0 20 47 75 69 64 28 47 65 74 54 65 78 74 28 73 74   Guid(GetText(st
20cf0 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a  mt, index));....
20d00 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20            int n 
20d10 3d 20 28 69 6e 74 29 47 65 74 42 79 74 65 73 28  = (int)GetBytes(
20d20 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20  stmt, index, 0, 
20d30 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20  null, 0, 0);..  
20d40 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
20d50 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d 3b 0d   = new byte[n];.
20d60 0a 20 20 20 20 20 20 20 20 20 20 47 65 74 42 79  .          GetBy
20d70 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c  tes(stmt, index,
20d80 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d   0, b, 0, n);...
20d90 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
20da0 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70  yp.Type == DbTyp
20db0 65 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d 20 31  e.Guid && n == 1
20dc0 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  6)..            
20dd0 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28  return new Guid(
20de0 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
20df0 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20 20 20   return b;..    
20e00 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
20e10 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65 3a 0d  inity.DateTime:.
20e20 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
20e30 6e 20 47 65 74 44 61 74 65 54 69 6d 65 28 73 74  n GetDateTime(st
20e40 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
20e50 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
20e60 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
20e70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
20e80 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
20e90 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20  GetDouble(stmt, 
20ea0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
20eb0 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72     return Conver
20ec0 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47 65 74  t.ChangeType(Get
20ed0 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64  Double(stmt, ind
20ee0 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a  ex), t, null);..
20ef0 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
20f00 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a  eAffinity.Int64:
20f10 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
20f20 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
20f30 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c  n GetInt64(stmt,
20f40 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
20f50 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
20f60 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 20 72 65  eof(Boolean)) re
20f70 74 75 72 6e 20 47 65 74 42 6f 6f 6c 65 61 6e 28  turn GetBoolean(
20f80 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
20f90 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
20fa0 3d 20 74 79 70 65 6f 66 28 53 42 79 74 65 29 29  = typeof(SByte))
20fb0 20 72 65 74 75 72 6e 20 47 65 74 53 42 79 74 65   return GetSByte
20fc0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
20fd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
20fe0 3d 3d 20 74 79 70 65 6f 66 28 42 79 74 65 29 29  == typeof(Byte))
20ff0 20 72 65 74 75 72 6e 20 47 65 74 42 79 74 65 28   return GetByte(
21000 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
21010 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
21020 3d 20 74 79 70 65 6f 66 28 49 6e 74 31 36 29 29  = typeof(Int16))
21030 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 31 36   return GetInt16
21040 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
21050 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
21060 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 31 36  == typeof(UInt16
21070 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e  )) return GetUIn
21080 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t16(stmt, index)
21090 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
210a0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74  (t == typeof(Int
210b0 33 32 29 29 20 72 65 74 75 72 6e 20 47 65 74 49  32)) return GetI
210c0 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
210d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
210e0 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
210f0 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20 47 65  nt32)) return Ge
21100 74 55 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  tUInt32(stmt, in
21110 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
21120 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
21130 28 49 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20  (Int64)) return 
21140 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
21150 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
21160 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
21170 66 28 55 49 6e 74 36 34 29 29 20 72 65 74 75 72  f(UInt64)) retur
21180 6e 20 47 65 74 55 49 6e 74 36 34 28 73 74 6d 74  n GetUInt64(stmt
21190 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
211a0 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76       return Conv
211b0 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65 28 47  ert.ChangeType(G
211c0 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  etInt64(stmt, in
211d0 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d  dex), t, null);.
211e0 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74  .        default
211f0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  :..          ret
21200 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74  urn GetText(stmt
21210 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
21220 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
21230 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
21240 64 65 20 69 6e 74 20 47 65 74 43 75 72 73 6f 72  de int GetCursor
21250 46 6f 72 54 61 62 6c 65 28 53 51 4c 69 74 65 53  ForTable(SQLiteS
21260 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
21270 6e 74 20 64 62 2c 20 69 6e 74 20 72 6f 6f 74 50  nt db, int rootP
21280 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  age)..    {..#if
21290 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
212a0 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  D..      return 
212b0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
212c0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c  ods.sqlite3_tabl
212d0 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f 70  e_cursor_interop
212e0 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
212f0 6d 74 2c 20 64 62 2c 20 72 6f 6f 74 50 61 67 65  mt, db, rootPage
21300 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
21310 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e   return -1;..#en
21320 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
21330 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
21340 69 64 65 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49  ide long GetRowI
21350 64 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74  dForCursor(SQLit
21360 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
21370 20 69 6e 74 20 63 75 72 73 6f 72 29 0d 0a 20 20   int cursor)..  
21380 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
21390 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
213a0 20 6c 6f 6e 67 20 72 6f 77 69 64 20 3d 20 30 3b   long rowid = 0;
213b0 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
213c0 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
213d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
213e0 2e 73 71 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f  .sqlite3_cursor_
213f0 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 73 74  rowid_interop(st
21400 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
21410 20 63 75 72 73 6f 72 2c 20 72 65 66 20 72 6f 77   cursor, ref row
21420 69 64 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  id);..      if (
21430 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc == SQLiteErro
21440 72 43 6f 64 65 2e 4f 6b 29 20 72 65 74 75 72 6e  rCode.Ok) return
21450 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20 20 20 20 20   rowid;....     
21460 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65 6c 73   return 0;..#els
21470 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
21480 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  0;..#endif..    
21490 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
214a0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
214b0 47 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78  GetIndexColumnEx
214c0 74 65 6e 64 65 64 49 6e 66 6f 28 73 74 72 69 6e  tendedInfo(strin
214d0 67 20 64 61 74 61 62 61 73 65 2c 20 73 74 72 69  g database, stri
214e0 6e 67 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67  ng index, string
214f0 20 63 6f 6c 75 6d 6e 2c 20 72 65 66 20 69 6e 74   column, ref int
21500 20 73 6f 72 74 4d 6f 64 65 2c 20 72 65 66 20 69   sortMode, ref i
21510 6e 74 20 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20  nt onError, ref 
21520 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e  string collation
21530 53 65 71 75 65 6e 63 65 29 0d 0a 20 20 20 20 7b  Sequence)..    {
21540 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
21550 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e  ANDARD..      In
21560 74 50 74 72 20 63 6f 6c 6c 20 3d 20 49 6e 74 50  tPtr coll = IntP
21570 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
21580 69 6e 74 20 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b  int colllen = 0;
21590 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
215a0 72 6f 72 43 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20  rorCode rc;.... 
215b0 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65       rc = Unsafe
215c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
215d0 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75  lite3_index_colu
215e0 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28  mn_info_interop(
215f0 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74  _sql, ToUTF8(dat
21600 61 62 61 73 65 29 2c 20 54 6f 55 54 46 38 28 69  abase), ToUTF8(i
21610 6e 64 65 78 29 2c 20 54 6f 55 54 46 38 28 63 6f  ndex), ToUTF8(co
21620 6c 75 6d 6e 29 2c 20 72 65 66 20 73 6f 72 74 4d  lumn), ref sortM
21630 6f 64 65 2c 20 72 65 66 20 6f 6e 45 72 72 6f 72  ode, ref onError
21640 2c 20 72 65 66 20 63 6f 6c 6c 2c 20 72 65 66 20  , ref coll, ref 
21650 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  colllen);..     
21660 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74   if (rc != SQLit
21670 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
21680 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
21690 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 6e 75 6c  xception(rc, nul
216a0 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 63 6f 6c  l);....      col
216b0 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 3d  lationSequence =
216c0 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 63 6f   UTF8ToString(co
216d0 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23  ll, colllen);..#
216e0 65 6c 73 65 0d 0a 20 20 20 20 20 20 73 6f 72 74  else..      sort
216f0 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20  Mode = 0;..     
21700 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b 0d 0a 20   onError = 2;.. 
21710 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 53 65       collationSe
21720 71 75 65 6e 63 65 20 3d 20 22 42 49 4e 41 52 59  quence = "BINARY
21730 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  ";..#endif..    
21740 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
21750 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
21760 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c 65 43  eErrorCode FileC
21770 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20 7a 44  ontrol(string zD
21780 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 49  bName, int op, I
21790 6e 74 50 74 72 20 70 41 72 67 29 0d 0a 20 20 20  ntPtr pArg)..   
217a0 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
217b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
217c0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6c  hods.sqlite3_fil
217d0 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20  e_control(_sql, 
217e0 28 7a 44 62 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  (zDbName != null
217f0 29 20 3f 20 54 6f 55 54 46 38 28 7a 44 62 4e 61  ) ? ToUTF8(zDbNa
21800 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20  me) : null, op, 
21810 70 41 72 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  pArg);..    }.. 
21820 20 7d 0d 0a 7d 0d 0a                              }..}..