System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 8c44c657690746f2889a39b63d484a3507d8e331:


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 20 7c 7c 20 4e 45 54 5f 34  NET_471 || NET_4
0c70: 37 32 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d  72) && !PLATFORM
0c80: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
0c90: 4b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  K..    private b
0ca0: 6f 6f 6c 20 5f 62 75 69 6c 64 69 6e 67 53 63 68  ool _buildingSch
0cb0: 65 6d 61 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  ema;..#endif....
0cc0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0cd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 75  >..    /// The u
0ce0: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
0cf0: 74 69 6f 6e 73 20 72 65 67 69 73 74 65 72 65 64  tions registered
0d00: 20 6f 6e 20 74 68 69 73 20 63 6f 6e 6e 65 63 74   on this connect
0d10: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ion..    /// </s
0d20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0d30: 74 65 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72  tected Dictionar
0d40: 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  y<SQLiteFunction
0d50: 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74  Attribute, SQLit
0d60: 65 46 75 6e 63 74 69 6f 6e 3e 20 5f 66 75 6e 63  eFunction> _func
0d70: 74 69 6f 6e 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e  tions;....#if IN
0d80: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
0d90: 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
0da0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0db0: 54 68 69 73 20 69 73 20 74 68 65 20 6e 61 6d 65  This is the name
0dc0: 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 6c   of the native l
0dd0: 69 62 72 61 72 79 20 66 69 6c 65 20 74 68 61 74  ibrary file that
0de0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20   contains the.. 
0df0: 20 20 20 2f 2f 2f 20 22 76 74 73 68 69 6d 22 20     /// "vtshim" 
0e00: 65 78 74 65 6e 73 69 6f 6e 20 5b 77 72 61 70 70  extension [wrapp
0e10: 65 72 5d 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  er]...    /// </
0e20: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0e30: 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67 20 5f  otected string _
0e40: 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c  shimExtensionFil
0e50: 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  eName = null;...
0e60: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0e70: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
0e80: 20 69 73 20 74 68 65 20 66 6c 61 67 20 69 6e 64   is the flag ind
0e90: 69 63 61 74 65 20 77 68 65 74 68 65 72 20 74 68  icate whether th
0ea0: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
0eb0: 20 66 69 6c 65 20 74 68 61 74 0d 0a 20 20 20 20   file that..    
0ec0: 2f 2f 2f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  /// contains the
0ed0: 20 22 76 74 73 68 69 6d 22 20 65 78 74 65 6e 73   "vtshim" extens
0ee0: 69 6f 6e 20 6d 75 73 74 20 62 65 20 64 79 6e 61  ion must be dyna
0ef0: 6d 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20 62  mically loaded b
0f00: 79 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69 73 20  y..    /// this 
0f10: 63 6c 61 73 73 20 70 72 69 6f 72 20 74 6f 20 75  class prior to u
0f20: 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  se...    /// </s
0f30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0f40: 74 65 63 74 65 64 20 62 6f 6f 6c 3f 20 5f 73 68  tected bool? _sh
0f50: 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d  imIsLoadNeeded =
0f60: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f   null;....    //
0f70: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0f80: 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65   /// This is the
0f90: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 61 74   name of the nat
0fa0: 69 76 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20  ive entry point 
0fb0: 66 6f 72 20 74 68 65 20 22 76 74 73 68 69 6d 22  for the "vtshim"
0fc0: 0d 0a 20 20 20 20 2f 2f 2f 20 65 78 74 65 6e 73  ..    /// extens
0fd0: 69 6f 6e 20 5b 77 72 61 70 70 65 72 5d 2e 0d 0a  ion [wrapper]...
0fe0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ff0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
1000: 64 20 73 74 72 69 6e 67 20 5f 73 68 69 6d 45 78  d string _shimEx
1010: 74 65 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 20  tensionProcName 
1020: 3d 20 22 73 71 6c 69 74 65 33 5f 76 74 73 68 69  = "sqlite3_vtshi
1030: 6d 5f 69 6e 69 74 22 3b 0d 0a 0d 0a 20 20 20 20  m_init";....    
1040: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1050: 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c     /// The modul
1060: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
1070: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
1080: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1090: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
10a0: 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c  cted Dictionary<
10b0: 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f  string, SQLiteMo
10c0: 64 75 6c 65 3e 20 5f 6d 6f 64 75 6c 65 73 3b 0d  dule> _modules;.
10d0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1140: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1150: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
1160: 73 74 72 75 63 74 73 20 74 68 65 20 6f 62 6a 65  structs the obje
1170: 63 74 20 75 73 65 64 20 74 6f 20 69 6e 74 65 72  ct used to inter
1180: 61 63 74 20 77 69 74 68 20 74 68 65 20 53 51 4c  act with the SQL
1190: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
11a0: 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20  ..    /// using 
11b0: 74 68 65 20 55 54 46 2d 38 20 74 65 78 74 20 65  the UTF-8 text e
11c0: 6e 63 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f  ncoding...    //
11d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
11e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11f0: 65 3d 22 66 6d 74 22 3e 0d 0a 20 20 20 20 2f 2f  e="fmt">..    //
1200: 2f 20 54 68 65 20 44 61 74 65 54 69 6d 65 20 66  / The DateTime f
1210: 6f 72 6d 61 74 20 74 6f 20 62 65 20 75 73 65 64  ormat to be used
1220: 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67   when converting
1230: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 73 20 74   string values t
1240: 6f 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 44 61 74  o a..    /// Dat
1250: 65 54 69 6d 65 20 61 6e 64 20 62 69 6e 64 69 6e  eTime and bindin
1260: 67 20 44 61 74 65 54 69 6d 65 20 70 61 72 61 6d  g DateTime param
1270: 65 74 65 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eters...    /// 
1280: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1290: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b  / <param name="k
12a0: 69 6e 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ind">..    /// T
12b0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 61  he <see cref="Da
12c0: 74 65 54 69 6d 65 4b 69 6e 64 22 20 2f 3e 20 74  teTimeKind" /> t
12d0: 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  o be used when c
12e0: 72 65 61 74 69 6e 67 20 44 61 74 65 54 69 6d 65  reating DateTime
12f0: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
1300: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
1310: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
1320: 72 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 53 74 72  ram name="fmtStr
1330: 69 6e 67 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ing">..    /// T
1340: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
1350: 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
1360: 20 70 61 72 73 69 6e 67 20 61 6e 64 20 66 6f 72   parsing and for
1370: 6d 61 74 74 69 6e 67 20 44 61 74 65 54 69 6d 65  matting DateTime
1380: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73  ..    /// values
1390: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
13a0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
13b0: 72 61 6d 20 6e 61 6d 65 3d 22 64 62 22 3e 0d 0a  ram name="db">..
13c0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
13d0: 76 65 20 68 61 6e 64 6c 65 20 74 6f 20 62 65 20  ve handle to be 
13e0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
13f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
1400: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
1410: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1420: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1430: 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20  "fileName">..   
1440: 20 2f 2f 2f 20 54 68 65 20 66 75 6c 6c 79 20 71   /// The fully q
1450: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61  ualified file na
1460: 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  me associated wi
1470: 74 68 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  th <paramref nam
1480: 65 3d 22 64 62 20 22 2f 3e 2e 0d 0a 20 20 20 20  e="db "/>...    
1490: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
14a0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
14b0: 65 3d 22 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d 0a  e="ownHandle">..
14c0: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
14d0: 20 69 66 20 74 68 65 20 6e 65 77 6c 79 20 63 72   if the newly cr
14e0: 65 61 74 65 64 20 6f 62 6a 65 63 74 20 69 6e 73  eated object ins
14f0: 74 61 6e 63 65 20 77 69 6c 6c 20 6e 65 65 64 20  tance will need 
1500: 74 6f 20 64 69 73 70 6f 73 65 0d 0a 20 20 20 20  to dispose..    
1510: 2f 2f 2f 20 6f 66 20 3c 70 61 72 61 6d 72 65 66  /// of <paramref
1520: 20 6e 61 6d 65 3d 22 64 62 22 20 2f 3e 20 77 68   name="db" /> wh
1530: 65 6e 20 69 74 20 69 73 20 6e 6f 20 6c 6f 6e 67  en it is no long
1540: 65 72 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  er needed...    
1550: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1560: 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74    internal SQLit
1570: 65 33 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  e3(..        SQL
1580: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66  iteDateFormats f
1590: 6d 74 2c 0d 0a 20 20 20 20 20 20 20 20 44 61 74  mt,..        Dat
15a0: 65 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d  eTimeKind kind,.
15b0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
15c0: 66 6d 74 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  fmtString,..    
15d0: 20 20 20 20 49 6e 74 50 74 72 20 64 62 2c 0d 0a      IntPtr db,..
15e0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
15f0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1600: 20 20 62 6f 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65    bool ownHandle
1610: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
1620: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
1630: 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 29 0d  ind, fmtString).
1640: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1650: 69 66 20 28 64 62 20 21 3d 20 49 6e 74 50 74 72  if (db != IntPtr
1660: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1670: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  {..            _
1680: 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sql = new SQLite
1690: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
16a0: 28 64 62 2c 20 6f 77 6e 48 61 6e 64 6c 65 29 3b  (db, ownHandle);
16b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 66  ..            _f
16c0: 69 6c 65 4e 61 6d 65 20 3d 20 66 69 6c 65 4e 61  ileName = fileNa
16d0: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
16e0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
16f0: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
1700: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
1710: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1730: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
1740: 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
1750: 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
1760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1770: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75    null, null, nu
1780: 6c 6c 2c 20 5f 73 71 6c 2c 20 66 69 6c 65 4e 61  ll, _sql, fileNa
1790: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
17a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17b0: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
17c0: 65 33 29 2c 20 66 6d 74 2c 20 6b 69 6e 64 2c 20  e3), fmt, kind, 
17d0: 66 6d 74 53 74 72 69 6e 67 2c 20 64 62 2c 20 66  fmtString, db, f
17e0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
17f0: 20 20 20 20 20 20 20 20 20 20 6f 77 6e 48 61 6e            ownHan
1800: 64 6c 65 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20  dle }));..      
1810: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
1820: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1880: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
1890: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
18a0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
18b0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
18c0: 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20   disposed;..    
18d0: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
18e0: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
18f0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d  throw */..    {.
1900: 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
1910: 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
1920: 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20  if (disposed).. 
1930: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1940: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
1950: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70  sedException(typ
1960: 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d  eof(SQLite3).Nam
1970: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
1980: 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
19f0: 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
1a00: 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ide void Dispose
1a10: 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
1a20: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1a30: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1a50: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
1a60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66              //if
1a80: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1aa0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ab0: 20 20 20 2f 2f 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1af0: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
1b00: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1b10: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1b20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1b30: 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1b50: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1b60: 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20         //}....  
1b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
1bb0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
1bc0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
1bd0: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c10: 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45  ////....#if INTE
1c20: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
1c30: 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E..             
1c40: 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65     DisposeModule
1c50: 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  s();..#endif....
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c70: 43 6c 6f 73 65 28 74 72 75 65 29 3b 20 2f 2a 20  Close(true); /* 
1c80: 44 69 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f  Disposing, canno
1c90: 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a 20 20 20  t throw. */..   
1ca0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1cb0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
1cc0: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
1cd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
1ce0: 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70  ase.Dispose(disp
1cf0: 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20  osing);....     
1d00: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d10: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1d20: 45 76 65 72 79 74 68 69 6e 67 20 73 68 6f 75 6c  Everything shoul
1d30: 64 20 62 65 20 66 75 6c 6c 79 20 64 69 73 70 6f  d be fully dispo
1d40: 73 65 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e  sed at this poin
1d50: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
1d60: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1d70: 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
1d80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1d90: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
1da0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
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 2f 2f  ////////////////
1e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
1e10: 20 44 45 42 55 47 0d 0a 20 20 20 20 70 75 62 6c   DEBUG..    publ
1e20: 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  ic override stri
1e30: 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20  ng ToString().. 
1e40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
1e50: 74 75 72 6e 20 48 65 6c 70 65 72 4d 65 74 68 6f  turn HelperMetho
1e60: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
1e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 75  ..            Cu
1e80: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
1e90: 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 66 69 6c  antCulture, "fil
1ea0: 65 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 6c 61  eName = {0}, fla
1eb0: 67 73 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  gs = {1}",..    
1ec0: 20 20 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d          _fileNam
1ed0: 65 2c 20 5f 66 6c 61 67 73 29 3b 0d 0a 20 20 20  e, _flags);..   
1ee0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
1ef0: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f50: 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  /....#if INTEROP
1f60: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a  _VIRTUAL_TABLE..
1f70: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1f80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
1f90: 6d 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73 20  method attempts 
1fa0: 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 61 6c  to dispose of al
1fb0: 6c 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  l the <see cref=
1fc0: 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f  "SQLiteModule" /
1fd0: 3e 20 64 65 72 69 76 65 64 0d 0a 20 20 20 20 2f  > derived..    /
1fe0: 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  // object instan
1ff0: 63 65 73 20 63 75 72 72 65 6e 74 6c 79 20 61 73  ces currently as
2000: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
2010: 65 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73  e native databas
2020: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
2030: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2040: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  >..    private v
2050: 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c  oid DisposeModul
2060: 65 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  es()..    {..   
2070: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2080: 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61 6e 79   // NOTE: If any
2090: 20 6d 6f 64 75 6c 65 73 20 77 65 72 65 20 63 72   modules were cr
20a0: 65 61 74 65 64 2c 20 61 74 74 65 6d 70 74 20 74  eated, attempt t
20b0: 6f 20 64 69 73 70 6f 73 65 20 6f 66 0d 0a 20 20  o dispose of..  
20c0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
20d0: 68 65 6d 20 6e 6f 77 2e 20 20 54 68 69 73 20 63  hem now.  This c
20e0: 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 20  ode is designed 
20f0: 74 6f 20 61 76 6f 69 64 20 74 68 72 6f 77 69 6e  to avoid throwin
2100: 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  g..        //   
2110: 20 20 20 20 65 78 63 65 70 74 69 6f 6e 73 20 75      exceptions u
2120: 6e 6c 65 73 73 20 74 68 65 20 44 69 73 70 6f 73  nless the Dispos
2130: 65 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  e method of the 
2140: 6d 6f 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20  module..        
2150: 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20  //       itself 
2160: 74 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74  throws an except
2170: 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
2180: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d  ..        if (_m
2190: 6f 64 75 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d  odules != null).
21a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
21b0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
21c0: 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 73 74  (KeyValuePair<st
21d0: 72 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75  ring, SQLiteModu
21e0: 6c 65 3e 20 70 61 69 72 20 69 6e 20 5f 6d 6f 64  le> pair in _mod
21f0: 75 6c 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ules)..         
2200: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2210: 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75        SQLiteModu
2220: 6c 65 20 6d 6f 64 75 6c 65 20 3d 20 70 61 69 72  le module = pair
2230: 2e 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  .Value;....     
2240: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
2250: 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
2260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2270: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
2280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2290: 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28   module.Dispose(
22a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
22b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22c0: 20 5f 6d 6f 64 75 6c 65 73 2e 43 6c 65 61 72 28   _modules.Clear(
22d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
22e0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
22f0: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2350: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74  ///....    // It
2360: 20 69 73 6e 27 74 20 6e 65 63 65 73 73 61 72 79   isn't necessary
2370: 20 74 6f 20 63 6c 65 61 6e 75 70 20 61 6e 79 20   to cleanup any 
2380: 66 75 6e 63 74 69 6f 6e 73 20 77 65 27 76 65 20  functions we've 
2390: 72 65 67 69 73 74 65 72 65 64 2e 20 20 49 66 20  registered.  If 
23a0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
23b0: 20 20 20 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74      // goes to t
23c0: 68 65 20 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72  he pool and is r
23d0: 65 73 75 72 72 65 63 74 65 64 20 6c 61 74 65 72  esurrected later
23e0: 2c 20 72 65 2d 72 65 67 69 73 74 65 72 65 64 20  , re-registered 
23f0: 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f  functions will o
2400: 76 65 72 77 72 69 74 65 20 74 68 65 0d 0a 20 20  verwrite the..  
2410: 20 20 2f 2f 20 70 72 65 76 69 6f 75 73 20 66 75    // previous fu
2420: 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 53 51  nctions.  The SQ
2430: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b  LiteFunctionCook
2440: 69 65 48 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61  ieHandle will ta
2450: 6b 65 20 63 61 72 65 20 6f 66 20 66 72 65 65 69  ke care of freei
2460: 6e 67 20 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20  ng unmanaged..  
2470: 20 20 2f 2f 20 72 65 73 6f 75 72 63 65 73 20 62    // resources b
2480: 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20  elonging to the 
2490: 70 72 65 76 69 6f 75 73 6c 79 2d 72 65 67 69 73  previously-regis
24a0: 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e  tered functions.
24b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
24c0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f  verride void Clo
24d0: 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e  se(bool disposin
24e0: 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  g)..    {..     
24f0: 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c   if (_sql != nul
2500: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
2510: 20 20 20 20 20 20 20 69 66 20 28 21 5f 73 71 6c         if (!_sql
2520: 2e 4f 77 6e 48 61 6e 64 6c 65 29 0d 0a 20 20 20  .OwnHandle)..   
2530: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2540: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
2550: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
2560: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20      return;..   
2570: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2580: 20 20 20 20 20 20 62 6f 6f 6c 20 75 6e 62 69 6e        bool unbin
2590: 64 46 75 6e 63 74 69 6f 6e 73 20 3d 20 28 28 5f  dFunctions = ((_
25a0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
25b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 6e  nnectionFlags.Un
25c0: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 4f 6e 43  bindFunctionsOnC
25d0: 6c 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  lose)..         
25e0: 20 20 20 20 20 20 20 3d 3d 20 53 51 4c 69 74 65         == SQLite
25f0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
2600: 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 4f  UnbindFunctionsO
2610: 6e 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  nClose);....    
2620: 20 20 72 65 74 72 79 3a 0d 0a 0d 0a 20 20 20 20    retry:....    
2630: 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f        if (_usePo
2640: 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ol)..          {
2650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2660: 69 66 20 28 53 51 4c 69 74 65 42 61 73 65 2e 52  if (SQLiteBase.R
2670: 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f  esetConnection(_
2680: 73 71 6c 2c 20 5f 73 71 6c 2c 20 21 64 69 73 70  sql, _sql, !disp
2690: 6f 73 69 6e 67 29 20 26 26 0d 0a 20 20 20 20 20  osing) &&..     
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 68               Unh
26b0: 6f 6f 6b 4e 61 74 69 76 65 43 61 6c 6c 62 61 63  ookNativeCallbac
26c0: 6b 73 28 74 72 75 65 2c 20 21 64 69 73 70 6f 73  ks(true, !dispos
26d0: 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ing))..         
26e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 6e            if (un
2700: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a  bindFunctions)..
2710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2720: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2730: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
2740: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e  QLiteFunction.Un
2750: 62 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f 6e 73  bindAllFunctions
2760: 28 74 68 69 73 2c 20 5f 66 6c 61 67 73 2c 20 66  (this, _flags, f
2770: 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  alse))..        
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2790: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
27a0: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
27b0: 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d0: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
27e0: 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
27f0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
2800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
2820: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
2830: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2850: 20 20 20 20 20 20 20 20 20 20 22 55 6e 62 69 6e            "Unbin
2860: 64 46 75 6e 63 74 69 6f 6e 73 20 28 50 6f 6f 6c  dFunctions (Pool
2870: 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c  ) Success: {0}",
2880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29  HandleToString()
28b0: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
28f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2900: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
2910: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2920: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2930: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
2940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2950: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
2960: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
2970: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2990: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
29a0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
29b0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
29c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d0: 20 20 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74      "UnbindFunct
29e0: 69 6f 6e 73 20 28 50 6f 6f 6c 29 20 46 61 69 6c  ions (Pool) Fail
29f0: 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ure: {0}",..    
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a10: 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
2a20: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
2a30: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a60: 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52    }....#if INTER
2a70: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
2a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a90: 20 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c      DisposeModul
2aa0: 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  es();..#endif...
2ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ac0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
2ad0: 69 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c  ionPool.Add(_fil
2ae0: 65 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f  eName, _sql, _po
2af0: 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20  olVersion);.... 
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2b20: 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c  n.OnChanged(null
2b30: 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e  , new Connection
2b40: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b60: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
2b70: 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c 6f 73  onEventType.Clos
2b80: 65 64 54 6f 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20  edToPool, null, 
2b90: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
2ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
2bb0: 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 5f  l, null, _sql, _
2bc0: 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20 6f 62  fileName, new ob
2bd0: 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ject[] {..      
2be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf0: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c  typeof(SQLite3),
2c00: 20 21 64 69 73 70 6f 73 69 6e 67 2c 20 5f 66 69   !disposing, _fi
2c10: 6c 65 4e 61 6d 65 2c 20 5f 70 6f 6f 6c 56 65 72  leName, _poolVer
2c20: 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23 69 66  sion }));....#if
2c30: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
2c40: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
2c50: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
2c60: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2c70: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
2c80: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
2c90: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2ca0: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
2cb0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
2cc0: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
2ce0: 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75 63 63  lose (Pool) Succ
2cf0: 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ess: {0}",..    
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d10: 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
2d20: 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
2d50: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2d60: 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
2d70: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2d80: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da0: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
2db0: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
2dc0: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de0: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
2df0: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e10: 20 20 20 20 20 20 22 43 6c 6f 73 65 20 28 50 6f        "Close (Po
2e20: 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b 30 7d  ol) Failure: {0}
2e30: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2e40: 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
2e50: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
2e60: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
2e70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e90: 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 63   // NOTE: This c
2ea0: 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 6e 6e 6f 74  onnection cannot
2eb0: 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
2ec0: 20 70 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20 20 20   pool;..        
2ed0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2ee0: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75     therefore, ju
2ef0: 73 74 20 75 73 65 20 74 68 65 20 6e 6f 72 6d 61  st use the norma
2f00: 6c 20 64 69 73 70 6f 73 61 6c 0d 0a 20 20 20 20  l disposal..    
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f20: 20 20 20 20 20 20 20 70 72 6f 63 65 64 75 72 65         procedure
2f30: 20 6f 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20 20   on it...       
2f40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f60: 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73   _usePool = fals
2f70: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2f80: 20 20 20 20 20 20 67 6f 74 6f 20 72 65 74 72 79        goto retry
2f90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2fa0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
2fb0: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d  .          else.
2fc0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
2fe0: 47 4e 4f 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20  GNORED */..     
2ff0: 20 20 20 20 20 20 20 20 20 55 6e 68 6f 6f 6b 4e           UnhookN
3000: 61 74 69 76 65 43 61 6c 6c 62 61 63 6b 73 28 64  ativeCallbacks(d
3010: 69 73 70 6f 73 69 6e 67 2c 20 21 64 69 73 70 6f  isposing, !dispo
3020: 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sing);....      
3030: 20 20 20 20 20 20 20 20 69 66 20 28 75 6e 62 69          if (unbi
3040: 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20  ndFunctions)..  
3050: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3070: 20 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74   if (SQLiteFunct
3080: 69 6f 6e 2e 55 6e 62 69 6e 64 41 6c 6c 46 75 6e  ion.UnbindAllFun
3090: 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 5f 66 6c  ctions(this, _fl
30a0: 61 67 73 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20  ags, false))..  
30b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c0: 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  {..#if !NET_COMP
30d0: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
30e0: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
30f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3100: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
3110: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
3120: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
3130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3140: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
3150: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
3160: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
3170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3180: 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73  "UnbindFunctions
3190: 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c 0d   Success: {0}",.
31a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31b0: 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c             Handl
31c0: 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a  eToString()));..
31d0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
31e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
31f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
3200: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
3210: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e         {..#if !N
3220: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
3230: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
3240: 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N..             
3250: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
3260: 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
3270: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
3280: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
3290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
32b0: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
32c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d0: 20 20 20 20 20 20 20 22 55 6e 62 69 6e 64 46 75         "UnbindFu
32e0: 6e 63 74 69 6f 6e 73 20 46 61 69 6c 75 72 65 3a  nctions Failure:
32f0: 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
3300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3310: 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
3320: 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
3330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3340: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3350: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3360: 20 20 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73       _sql.Dispos
3370: 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
3380: 20 20 20 20 20 20 46 72 65 65 44 62 4e 61 6d 65        FreeDbName
3390: 28 21 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 20  (!disposing);.. 
33a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
33b0: 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e 75 6c        _sql = nul
33c0: 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  l;..      }..   
33d0: 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f  ////////////////
3430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66  /////////....#if
3440: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
3450: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
3460: 54 49 4f 4e 0d 0a 20 20 20 20 70 72 6f 74 65 63  TION..    protec
3470: 74 65 64 20 73 74 72 69 6e 67 20 48 61 6e 64 6c  ted string Handl
3480: 65 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20  eToString()..   
3490: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
34a0: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
34b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34c0: 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20  n "<null>";.... 
34d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73         return _s
34e0: 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  ql.ToString();..
34f0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
3500: 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
3560: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
3570: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
3580: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
3590: 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74  umber of times t
35a0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 61  he <see cref="Ca
35b0: 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 20  ncel" /> method 
35c0: 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
35d0: 2f 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 2f  / called...    /
35e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
35f0: 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 47     private int G
3600: 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d  etCancelCount().
3610: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
3620: 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b  return Interlock
3630: 65 64 2e 43 6f 6d 70 61 72 65 45 78 63 68 61 6e  ed.CompareExchan
3640: 67 65 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f  ge(ref _cancelCo
3650: 75 6e 74 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20  unt, 0, 0);..   
3660: 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f  ////////////////
36c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
36e0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
36f0: 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  hod determines w
3700: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
3710: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3720: 65 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 0d 0a  eException" />..
3730: 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 61 20 72      /// with a r
3740: 65 74 75 72 6e 20 63 6f 64 65 20 6f 66 20 3c 73  eturn code of <s
3750: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45  ee cref="SQLiteE
3760: 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75  rrorCode.Interru
3770: 70 74 22 20 2f 3e 20 73 68 6f 75 6c 64 0d 0a 20  pt" /> should.. 
3780: 20 20 20 2f 2f 2f 20 62 65 20 74 68 72 6f 77 6e     /// be thrown
3790: 20 61 66 74 65 72 20 6d 61 6b 69 6e 67 20 61 20   after making a 
37a0: 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53 51  call into the SQ
37b0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
37c0: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  y...    /// </su
37d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
37e0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
37f0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61  // Non-zero if a
3800: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
3810: 74 65 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20  teException" /> 
3820: 74 6f 20 62 65 20 74 68 72 6f 77 6e 2e 20 20 54  to be thrown.  T
3830: 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20  his method..    
3840: 2f 2f 2f 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 65  /// will only re
3850: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
3860: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
3870: 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f  Cancel" /> metho
3880: 64 20 77 61 73 20 63 61 6c 6c 65 64 0d 0a 20 20  d was called..  
3890: 20 20 2f 2f 2f 20 6f 6e 65 20 6f 72 20 6d 6f 72    /// one or mor
38a0: 65 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 61  e times during a
38b0: 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 53   call into the S
38c0: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
38d0: 72 79 20 28 65 2e 67 2e 20 77 68 65 6e 0d 0a 20  ry (e.g. when.. 
38e0: 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74     /// the sqlit
38f0: 65 33 5f 70 72 65 70 61 72 65 2a 28 29 20 6f 72  e3_prepare*() or
3900: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
3910: 41 50 49 73 20 61 72 65 20 75 73 65 64 29 2e 0d  APIs are used)..
3920: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
3930: 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
3940: 20 62 6f 6f 6c 20 53 68 6f 75 6c 64 54 68 72 6f   bool ShouldThro
3950: 77 46 6f 72 43 61 6e 63 65 6c 28 29 0d 0a 20 20  wForCancel()..  
3960: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
3970: 75 72 6e 20 47 65 74 43 61 6e 63 65 6c 43 6f 75  urn GetCancelCou
3980: 6e 74 28 29 20 3e 20 30 3b 0d 0a 20 20 20 20 7d  nt() > 0;..    }
3990: 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f  ////////////////
39f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f  ///////....    /
3a00: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
3a10: 20 20 2f 2f 2f 20 52 65 73 65 74 73 20 74 68 65    /// Resets the
3a20: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 3c 73   value of the <s
3a30: 65 65 20 63 72 65 66 3d 22 5f 63 61 6e 63 65 6c  ee cref="_cancel
3a40: 43 6f 75 6e 74 22 20 2f 3e 20 66 69 65 6c 64 2e  Count" /> field.
3a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3a60: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
3a70: 65 20 69 6e 74 20 52 65 73 65 74 43 61 6e 63 65  e int ResetCance
3a80: 6c 43 6f 75 6e 74 28 29 0d 0a 20 20 20 20 7b 0d  lCount()..    {.
3a90: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3aa0: 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70  Interlocked.Comp
3ab0: 61 72 65 45 78 63 68 61 6e 67 65 28 72 65 66 20  areExchange(ref 
3ac0: 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 2c 20 30 2c  _cancelCount, 0,
3ad0: 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d   _cancelCount);.
3ae0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3b50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3b60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65  y>..    /// Atte
3b70: 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72 75 70  mpts to interrup
3b80: 74 20 74 68 65 20 71 75 65 72 79 20 63 75 72 72  t the query curr
3b90: 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
3ba0: 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  on the associate
3bb0: 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76  d..    /// nativ
3bc0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
3bd0: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
3be0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3bf0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
3c00: 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29 0d  e void Cancel().
3c10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 74 72  .    {..      tr
3c20: 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  y..      {..    
3c30: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
3c40: 67 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  g...      }..   
3c50: 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
3c60: 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
3c70: 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
3c80: 2f 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  /..      {..    
3c90: 20 20 20 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e      Interlocked.
3ca0: 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 5f 63  Increment(ref _c
3cb0: 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a 20 20  ancelCount);..  
3cc0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
3cd0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
3ce0: 33 5f 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c  3_interrupt(_sql
3cf0: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
3d00: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
3d10: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3d20: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62   This function b
3d30: 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66 69  inds a user-defi
3d40: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  ned function to 
3d50: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  the connection..
3d60: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3d70: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
3d80: 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69  ram name="functi
3d90: 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20  onAttribute">.. 
3da0: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
3db0: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63  cref="SQLiteFunc
3dc0: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e  tionAttribute"/>
3dd0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
3de0: 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20   containing..   
3df0: 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74   /// the metadat
3e00: 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  a for the functi
3e10: 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d  on to be bound..
3e20: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
3e30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3e40: 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e  m name="function
3e50: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
3e60: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3e70: 65 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a  eFunction"/> obj
3e80: 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61  ect instance tha
3e90: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
3ea0: 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69  ..    /// functi
3eb0: 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d  on to be bound..
3ec0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
3ed0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3ee0: 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d  m name="flags">.
3ef0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61  .    /// The fla
3f00: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
3f10: 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f  th the parent co
3f20: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e  nnection object.
3f30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
3f40: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
3f50: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
3f60: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
3f70: 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63        SQLiteFunc
3f80: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75  tionAttribute fu
3f90: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
3fa0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
3fb0: 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  Function functio
3fc0: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  n,..        SQLi
3fd0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
3fe0: 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  s flags..       
3ff0: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
4000: 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41     if (functionA
4010: 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c  ttribute == null
4020: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
4030: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
4040: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
4050: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
4060: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
4070: 69 66 20 28 66 75 6e 63 74 69 6f 6e 20 3d 3d 20  if (function == 
4080: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4090: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
40a0: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
40b0: 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 22 29 3b 0d  on("function");.
40c0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
40d0: 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75  eFunction.BindFu
40e0: 6e 63 74 69 6f 6e 28 74 68 69 73 2c 20 66 75 6e  nction(this, fun
40f0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20  ctionAttribute, 
4100: 66 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29  function, flags)
4110: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
4120: 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e  (_functions == n
4130: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4140: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e    _functions = n
4150: 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51  ew Dictionary<SQ
4160: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
4170: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
4180: 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20  ction>();....   
4190: 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b       _functions[
41a0: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
41b0: 65 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a  e] = function;..
41c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
41d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
41e0: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
41f0: 6e 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64  n binds a user-d
4200: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20  efined function 
4210: 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  to the connectio
4220: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
4230: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4240: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e  <param name="fun
4250: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e  ctionAttribute">
4260: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73  ..    /// The <s
4270: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46  ee cref="SQLiteF
4280: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
4290: 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  "/> object insta
42a0: 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a  nce containing..
42b0: 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61      /// the meta
42c0: 64 61 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e  data for the fun
42d0: 63 74 69 6f 6e 20 74 6f 20 62 65 20 75 6e 62 6f  ction to be unbo
42e0: 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  und...    /// </
42f0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4300: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
4310: 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  gs">..    /// Th
4320: 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
4330: 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65  ed with the pare
4340: 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  nt connection ob
4350: 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
4360: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
4370: 20 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d 7a 65   <returns>Non-ze
4380: 72 6f 20 69 66 20 74 68 65 20 66 75 6e 63 74 69  ro if the functi
4390: 6f 6e 20 77 61 73 20 75 6e 62 6f 75 6e 64 20 61  on was unbound a
43a0: 6e 64 20 72 65 6d 6f 76 65 64 2e 3c 2f 72 65 74  nd removed.</ret
43b0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
43c0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
43d0: 6c 20 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e  l UnbindFunction
43e0: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
43f0: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
4400: 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  te functionAttri
4410: 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 53  bute,..        S
4420: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
4430: 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20  lags flags..    
4440: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
4450: 20 20 20 20 20 20 69 66 20 28 66 75 6e 63 74 69        if (functi
4460: 6f 6e 41 74 74 72 69 62 75 74 65 20 3d 3d 20 6e  onAttribute == n
4470: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4480: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
4490: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
44a0: 6e 28 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  n("functionAttri
44b0: 62 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  bute");....     
44c0: 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f 6e     if (_function
44d0: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
44e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
44f0: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
4500: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20   SQLiteFunction 
4510: 66 75 6e 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20  function;....   
4520: 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69       if (_functi
4530: 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28  ons.TryGetValue(
4540: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
4550: 65 2c 20 6f 75 74 20 66 75 6e 63 74 69 6f 6e 29  e, out function)
4560: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
4570: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 51            if (SQ
4580: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62  LiteFunction.Unb
4590: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45b0: 20 20 74 68 69 73 2c 20 66 75 6e 63 74 69 6f 6e    this, function
45c0: 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e 63 74  Attribute, funct
45d0: 69 6f 6e 2c 20 66 6c 61 67 73 29 20 26 26 0d 0a  ion, flags) &&..
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45f0: 5f 66 75 6e 63 74 69 6f 6e 73 2e 52 65 6d 6f 76  _functions.Remov
4600: 65 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  e(functionAttrib
4610: 75 74 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ute))..         
4620: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4630: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
4640: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
4650: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
4660: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
4670: 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  alse;..    }....
4680: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
4690: 72 72 69 64 65 20 73 74 72 69 6e 67 20 56 65 72  rride string Ver
46a0: 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  sion..    {..   
46b0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
46c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
46d0: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b 0d 0a  SQLiteVersion;..
46e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
46f0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4700: 76 65 72 72 69 64 65 20 69 6e 74 20 56 65 72 73  verride int Vers
4710: 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20 20 7b  ionNumber..    {
4720: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
4730: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
4740: 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72 73 69  turn SQLiteVersi
4750: 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20  onNumber;..     
4760: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
4770: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
4780: 20 73 74 72 69 6e 67 20 44 65 66 69 6e 65 43 6f   string DefineCo
4790: 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b 0d 0a  nstants..    {..
47a0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
47b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
47c0: 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
47d0: 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  r result = new S
47e0: 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d  tringBuilder();.
47f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4c 69  .            ILi
4800: 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73 74 20  st<string> list 
4810: 3d 20 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  = SQLiteDefineCo
4820: 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e 4c 69  nstants.OptionLi
4830: 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  st;....         
4840: 20 20 20 69 66 20 28 6c 69 73 74 20 21 3d 20 6e     if (list != n
4850: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4860: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4870: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74       foreach (st
4880: 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69 6e 20  ring element in 
4890: 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20  list)..         
48a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
48b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
48c0: 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c   (element == nul
48d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
48e0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
48f0: 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4910: 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e  (result.Length >
4920: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
4930: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
4940: 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b  ult.Append(' ');
4950: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4960: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
4970: 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29 3b 0d  ppend(element);.
4980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4990: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
49a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
49b0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
49c0: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
49d0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
49e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
49f0: 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74  tic string SQLit
4a00: 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d  eVersion..    {.
4a10: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20  .      get..    
4a20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
4a30: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
4a40: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
4a50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
4a60: 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d  version(), -1);.
4a70: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
4a80: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4a90: 73 74 61 74 69 63 20 69 6e 74 20 53 51 4c 69 74  static int SQLit
4aa0: 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a  eVersionNumber..
4ab0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
4ac0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
4ad0: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
4ae0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4af0: 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
4b00: 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20 20 20  _number();..    
4b10: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4b20: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
4b30: 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65 53  c string SQLiteS
4b40: 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a  ourceId..    {..
4b50: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
4b60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
4b70: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
4b80: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4b90: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f 75 72  ods.sqlite3_sour
4ba0: 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 20 20  ceid(), -1);..  
4bb0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4bc0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4bd0: 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74  tic string SQLit
4be0: 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d  eCompileOptions.
4bf0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4c00: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
4c20: 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74  ngBuilder result
4c30: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
4c40: 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  lder();..       
4c50: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d       int index =
4c60: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
4c70: 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65 20 3d   IntPtr zValue =
4c80: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4c90: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d  hods.sqlite3_com
4ca0: 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69  pileoption_get(i
4cb0: 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20 20  ndex++);....    
4cc0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 7a          while (z
4cd0: 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e  Value != IntPtr.
4ce0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
4cf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4d00: 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
4d10: 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20  .Length > 0)..  
4d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d30: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
4d40: 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ' ');....       
4d50: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
4d60: 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53 74 72  Append(UTF8ToStr
4d70: 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29 29  ing(zValue, -1))
4d80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4d90: 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61     zValue = Unsa
4da0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4db0: 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f  sqlite3_compileo
4dc0: 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b  ption_get(index+
4dd0: 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  +);..           
4de0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4df0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
4e00: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
4e10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4e20: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
4e30: 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65  atic string Inte
4e40: 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  ropVersion..    
4e50: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
4e60: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
4e70: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
4e80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4e90: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
4ea0: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
4eb0: 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 6c 69 62  hods.interop_lib
4ec0: 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29 3b 0d  version(), -1);.
4ed0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
4ee0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
4ef0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
4f00: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
4f10: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
4f20: 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70  c string Interop
4f30: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d  SourceId..    {.
4f40: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
4f50: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51        {..#if !SQ
4f60: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
4f70: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4f80: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
4f90: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4fa0: 64 73 2e 69 6e 74 65 72 6f 70 5f 73 6f 75 72 63  ds.interop_sourc
4fb0: 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 23 65 6c  eid(), -1);..#el
4fc0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
4fd0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65  return null;..#e
4fe0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
4ff0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5000: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74  ternal static st
5010: 72 69 6e 67 20 49 6e 74 65 72 6f 70 43 6f 6d 70  ring InteropComp
5020: 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20  ileOptions..    
5030: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
5040: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
5050: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
5060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72  .            Str
5070: 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c  ingBuilder resul
5080: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  t = new StringBu
5090: 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20  ilder();..      
50a0: 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20        int index 
50b0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
50c0: 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65 20    IntPtr zValue 
50d0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
50e0: 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f  thods.interop_co
50f0: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
5100: 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20 20  index++);....   
5110: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
5120: 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72  zValue != IntPtr
5130: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
5140: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5150: 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
5160: 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20  t.Length > 0).. 
5170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5180: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
5190: 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  (' ');....      
51a0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
51b0: 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53 74  .Append(UTF8ToSt
51c0: 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31 29  ring(zValue, -1)
51d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
51e0: 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e 73      zValue = Uns
51f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5200: 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69 6c 65  .interop_compile
5210: 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65 78  option_get(index
5220: 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ++);..          
5230: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5240: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
5250: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 23 65  .ToString();..#e
5260: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
5270: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23   return null;..#
5280: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
5290: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
52a0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
52b0: 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74   bool AutoCommit
52c0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
52d0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
52e0: 20 20 20 20 20 72 65 74 75 72 6e 20 49 73 41 75       return IsAu
52f0: 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c 20 5f  tocommit(_sql, _
5300: 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  sql);..      }..
5310: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
5320: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
5330: 6f 6f 6c 20 49 73 52 65 61 64 4f 6e 6c 79 28 0d  ool IsReadOnly(.
5340: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
5350: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d  name..        ).
5360: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5370: 49 6e 74 50 74 72 20 70 44 62 4e 61 6d 65 20 3d  IntPtr pDbName =
5380: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
5390: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
53a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
53b0: 20 20 20 20 20 69 66 20 28 6e 61 6d 65 20 21 3d       if (name !=
53c0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
53d0: 20 20 20 20 20 20 20 20 70 44 62 4e 61 6d 65 20          pDbName 
53e0: 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
53f0: 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
5400: 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  ing(name);....  
5410: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 65            int re
5420: 73 75 6c 74 20 3d 20 55 6e 73 61 66 65 4e 61 74  sult = UnsafeNat
5430: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5440: 65 33 5f 64 62 5f 72 65 61 64 6f 6e 6c 79 28 0d  e3_db_readonly(.
5450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5460: 20 5f 73 71 6c 2c 20 70 44 62 4e 61 6d 65 29 3b   _sql, pDbName);
5470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5480: 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 2d 31  if (result == -1
5490: 29 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 6f  ) /* database no
54a0: 74 20 66 6f 75 6e 64 20 2a 2f 0d 0a 20 20 20 20  t found */..    
54b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
54c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
54d0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
54e0: 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f  tion(HelperMetho
54f0: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
5500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5510: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
5520: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
5530: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5540: 20 20 20 20 20 20 20 22 64 61 74 61 62 61 73 65         "database
5550: 20 5c 22 7b 30 7d 5c 22 20 6e 6f 74 20 66 6f 75   \"{0}\" not fou
5560: 6e 64 22 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20  nd", name));..  
5570: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5580: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5590: 6e 20 72 65 73 75 6c 74 20 3d 3d 20 30 20 3f 20  n result == 0 ? 
55a0: 66 61 6c 73 65 20 3a 20 74 72 75 65 3b 0d 0a 20  false : true;.. 
55b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
55c0: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
55d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
55e0: 20 20 69 66 20 28 70 44 62 4e 61 6d 65 20 21 3d    if (pDbName !=
55f0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
5600: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
5620: 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
5630: 70 44 62 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  pDbName);..     
5640: 20 20 20 20 20 20 20 20 20 20 20 70 44 62 4e 61             pDbNa
5650: 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  me = IntPtr.Zero
5660: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5670: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5680: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
5690: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
56a0: 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64   LastInsertRowId
56b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
56c0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66  et..      {..#if
56d0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
56e0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
56f0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
5700: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5710: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
5720: 65 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c 29 3b  ert_rowid(_sql);
5730: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
5740: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
5750: 20 20 6c 6f 6e 67 20 72 6f 77 49 64 20 3d 20 30    long rowId = 0
5760: 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66  ;..        Unsaf
5770: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5780: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
5790: 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70  rt_rowid_interop
57a0: 28 5f 73 71 6c 2c 20 72 65 66 20 72 6f 77 49 64  (_sql, ref rowId
57b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
57c0: 72 6e 20 72 6f 77 49 64 3b 0d 0a 23 65 6c 73 65  rn rowId;..#else
57d0: 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20  ..        throw 
57e0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
57f0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
5800: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d  #endif..      }.
5810: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5820: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5830: 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a 20 20 20  int Changes..   
5840: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
5850: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c       {..#if !SQL
5860: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
5870: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
5880: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5890: 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  .sqlite3_changes
58a0: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 29 3b 0d  _interop(_sql);.
58b0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
58c0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
58d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
58e0: 65 33 5f 63 68 61 6e 67 65 73 28 5f 73 71 6c 29  e3_changes(_sql)
58f0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
5900: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
5910: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5920: 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 55 73  de long MemoryUs
5930: 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ed..    {..     
5940: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
5950: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
5960: 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65 6d 6f  eturn StaticMemo
5970: 72 79 55 73 65 64 3b 0d 0a 20 20 20 20 20 20 20  ryUsed;..       
5980: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
5990: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
59a0: 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65 6d 6f   long StaticMemo
59b0: 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20  ryUsed..    {.. 
59c0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
59d0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
59e0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
59f0: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
5a00: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
5a10: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
5a20: 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65  lite3_memory_use
5a30: 64 28 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  d();..#elif !SQL
5a40: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
5a50: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62            long b
5a60: 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ytes = 0;..     
5a70: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
5a80: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5a90: 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 5f 69  e3_memory_used_i
5aa0: 6e 74 65 72 6f 70 28 72 65 66 20 62 79 74 65 73  nterop(ref bytes
5ab0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5ac0: 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 23  return bytes;..#
5ad0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
5ae0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
5af0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
5b00: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
5b10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
5b20: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5b30: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d   override long M
5b40: 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a  emoryHighwater..
5b50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
5b60: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
5b70: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5b80: 6e 20 53 74 61 74 69 63 4d 65 6d 6f 72 79 48 69  n StaticMemoryHi
5b90: 67 68 77 61 74 65 72 3b 0d 0a 20 20 20 20 20 20  ghwater;..      
5ba0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
5bb0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
5bc0: 63 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65 6d  c long StaticMem
5bd0: 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20 20  oryHighwater..  
5be0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
5bf0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
5c00: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
5c10: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
5c20: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5c30: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5c40: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ods.sqlite3_memo
5c50: 72 79 5f 68 69 67 68 77 61 74 65 72 28 30 29 3b  ry_highwater(0);
5c60: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
5c70: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
5c80: 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74 65 73        long bytes
5c90: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
5ca0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
5cb0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
5cc0: 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 5f  emory_highwater_
5cd0: 69 6e 74 65 72 6f 70 28 30 2c 20 72 65 66 20 62  interop(0, ref b
5ce0: 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
5cf0: 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 73      return bytes
5d00: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
5d10: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
5d20: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
5d30: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
5d40: 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  if..        }.. 
5d50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
5d60: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
5d70: 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  // Returns non-z
5d80: 65 72 6f 20 69 66 20 74 68 65 20 75 6e 64 65 72  ero if the under
5d90: 6c 79 69 6e 67 20 6e 61 74 69 76 65 20 63 6f 6e  lying native con
5da0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69  nection handle i
5db0: 73 20 6f 77 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f  s owned..    ///
5dc0: 20 62 79 20 74 68 69 73 20 69 6e 73 74 61 6e 63   by this instanc
5dd0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
5de0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
5df0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
5e00: 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20  ol OwnHandle..  
5e10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
5e20: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5e30: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71           if (_sq
5e40: 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l == null)..    
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
5e60: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
5e70: 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63  ption("no connec
5e80: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76 61 69  tion handle avai
5e90: 6c 61 62 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  lable");....    
5ea0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
5eb0: 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 3b 0d 0a  sql.OwnHandle;..
5ec0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
5ed0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
5ee0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
5ef0: 65 74 75 72 6e 73 20 74 68 65 20 6c 6f 67 69 63  eturns the logic
5f00: 61 6c 20 6c 69 73 74 20 6f 66 20 66 75 6e 63 74  al list of funct
5f10: 69 6f 6e 73 20 61 73 73 6f 63 69 61 74 65 64 20  ions associated 
5f20: 77 69 74 68 20 74 68 69 73 20 63 6f 6e 6e 65 63  with this connec
5f30: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
5f40: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
5f50: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
5f60: 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c   IDictionary<SQL
5f70: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
5f80: 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63  bute, SQLiteFunc
5f90: 74 69 6f 6e 3e 20 46 75 6e 63 74 69 6f 6e 73 0d  tion> Functions.
5fa0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
5fb0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 66 75  get { return _fu
5fc0: 6e 63 74 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20  nctions; }..    
5fd0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
5fe0: 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
5ff0: 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4d 65  eErrorCode SetMe
6000: 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f 6c 20  moryStatus(bool 
6010: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
6020: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
6030: 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61  aticSetMemorySta
6040: 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20  tus(value);..   
6050: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
6060: 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65  al static SQLite
6070: 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69 63  ErrorCode Static
6080: 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28  SetMemoryStatus(
6090: 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20  bool value)..   
60a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
60b0: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
60c0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
60d0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
60e0: 66 69 67 5f 69 6e 74 28 0d 0a 20 20 20 20 20 20  fig_int(..      
60f0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
6100: 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  igOpsEnum.SQLITE
6110: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
6120: 53 2c 20 76 61 6c 75 65 20 3f 20 31 20 3a 20 30  S, value ? 1 : 0
6130: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
6140: 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d  turn rc;..    }.
6150: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
6160: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74  ary>..    /// At
6170: 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 61  tempts to free a
6180: 73 20 6d 75 63 68 20 68 65 61 70 20 6d 65 6d 6f  s much heap memo
6190: 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65 20 66  ry as possible f
61a0: 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
61b0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
61c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
61d0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
61e0: 73 3e 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  s>A standard SQL
61f0: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ite return code 
6200: 28 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73  (i.e. zero for s
6210: 75 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a  uccess and non-z
6220: 65 72 6f 20 66 6f 72 20 66 61 69 6c 75 72 65 29  ero for failure)
6230: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
6240: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
6250: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
6260: 64 65 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79  de ReleaseMemory
6270: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
6280: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
6290: 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
62a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
62b0: 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d  te3_db_release_m
62c0: 65 6d 6f 72 79 28 5f 73 71 6c 29 3b 0d 0a 20 20  emory(_sql);..  
62d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b        return rc;
62e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
62f0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6300: 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74    /// Attempts t
6310: 6f 20 66 72 65 65 20 4e 20 62 79 74 65 73 20 6f  o free N bytes o
6320: 66 20 68 65 61 70 20 6d 65 6d 6f 72 79 20 62 79  f heap memory by
6330: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 6e 6f   deallocating no
6340: 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f  n-essential memo
6350: 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f  ry..    /// allo
6360: 63 61 74 69 6f 6e 73 20 68 65 6c 64 20 62 79 20  cations held by 
6370: 74 68 65 20 64 61 74 61 62 61 73 65 20 6c 69 62  the database lib
6380: 72 61 72 79 2e 20 4d 65 6d 6f 72 79 20 75 73 65  rary. Memory use
6390: 64 20 74 6f 20 63 61 63 68 65 20 64 61 74 61 62  d to cache datab
63a0: 61 73 65 20 70 61 67 65 73 0d 0a 20 20 20 20 2f  ase pages..    /
63b0: 2f 2f 20 74 6f 20 69 6d 70 72 6f 76 65 20 70 65  // to improve pe
63c0: 72 66 6f 72 6d 61 6e 63 65 20 69 73 20 61 6e 20  rformance is an 
63d0: 65 78 61 6d 70 6c 65 20 6f 66 20 6e 6f 6e 2d 65  example of non-e
63e0: 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f 72 79 2e  ssential memory.
63f0: 20 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f    This is a no-o
6400: 70 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 74 75 72  p..    /// retur
6410: 6e 69 6e 67 20 7a 65 72 6f 20 69 66 20 74 68 65  ning zero if the
6420: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
6430: 72 61 72 79 20 77 61 73 20 6e 6f 74 20 63 6f 6d  rary was not com
6440: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 63  piled with the c
6450: 6f 6d 70 69 6c 65 2d 74 69 6d 65 0d 0a 20 20 20  ompile-time..   
6460: 20 2f 2f 2f 20 6f 70 74 69 6f 6e 20 53 51 4c 49   /// option SQLI
6470: 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  TE_ENABLE_MEMORY
6480: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2e 20 20 4f 70  _MANAGEMENT.  Op
6490: 74 69 6f 6e 61 6c 6c 79 2c 20 61 74 74 65 6d 70  tionally, attemp
64a0: 74 73 20 74 6f 20 72 65 73 65 74 20 61 6e 64 2f  ts to reset and/
64b0: 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6d 70  or..    /// comp
64c0: 61 63 74 20 74 68 65 20 57 69 6e 33 32 20 6e 61  act the Win32 na
64d0: 74 69 76 65 20 68 65 61 70 2c 20 69 66 20 61 70  tive heap, if ap
64e0: 70 6c 69 63 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  plicable...    /
64f0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6500: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6510: 6d 65 3d 22 6e 42 79 74 65 73 22 3e 0d 0a 20 20  me="nBytes">..  
6520: 20 20 2f 2f 2f 20 54 68 65 20 72 65 71 75 65 73    /// The reques
6530: 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  ted number of by
6540: 74 65 73 20 74 6f 20 66 72 65 65 2e 0d 0a 20 20  tes to free...  
6550: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
6560: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
6570: 61 6d 65 3d 22 72 65 73 65 74 22 3e 0d 0a 20 20  ame="reset">..  
6580: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74    /// Non-zero t
6590: 6f 20 61 74 74 65 6d 70 74 20 61 20 68 65 61 70  o attempt a heap
65a0: 20 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f 2f 2f   reset...    ///
65b0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
65c0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
65d0: 63 6f 6d 70 61 63 74 22 3e 0d 0a 20 20 20 20 2f  compact">..    /
65e0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 61  // Non-zero to a
65f0: 74 74 65 6d 70 74 20 68 65 61 70 20 63 6f 6d 70  ttempt heap comp
6600: 61 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  action...    ///
6610: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
6620: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
6630: 6e 46 72 65 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  nFree">..    ///
6640: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
6650: 79 74 65 73 20 61 63 74 75 61 6c 6c 79 20 66 72  ytes actually fr
6660: 65 65 64 2e 20 20 54 68 69 73 20 76 61 6c 75 65  eed.  This value
6670: 20 6d 61 79 20 62 65 20 7a 65 72 6f 2e 0d 0a 20   may be zero... 
6680: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6690: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
66a0: 6e 61 6d 65 3d 22 72 65 73 65 74 4f 6b 22 3e 0d  name="resetOk">.
66b0: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61  .    /// This va
66c0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 6e 6f 6e 2d  lue will be non-
66d0: 7a 65 72 6f 20 69 66 20 74 68 65 20 68 65 61 70  zero if the heap
66e0: 20 72 65 73 65 74 20 77 61 73 20 73 75 63 63 65   reset was succe
66f0: 73 73 66 75 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ssful...    /// 
6700: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
6710: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
6720: 4c 61 72 67 65 73 74 22 3e 0d 0a 20 20 20 20 2f  Largest">..    /
6730: 2f 2f 20 54 68 65 20 73 69 7a 65 20 6f 66 20 74  // The size of t
6740: 68 65 20 6c 61 72 67 65 73 74 20 63 6f 6d 6d 69  he largest commi
6750: 74 74 65 64 20 66 72 65 65 20 62 6c 6f 63 6b 20  tted free block 
6760: 69 6e 20 74 68 65 20 68 65 61 70 2c 20 69 6e 20  in the heap, in 
6770: 62 79 74 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bytes...    /// 
6780: 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20  This value will 
6790: 62 65 20 7a 65 72 6f 20 75 6e 6c 65 73 73 20 68  be zero unless h
67a0: 65 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 20 69  eap compaction i
67b0: 73 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20 20 20  s enabled...    
67c0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
67d0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
67e0: 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64  .    /// A stand
67f0: 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
6800: 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72  n code (i.e. zer
6810: 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e  o for success an
6820: 64 20 6e 6f 6e 2d 7a 65 72 6f 0d 0a 20 20 20 20  d non-zero..    
6830: 2f 2f 2f 20 66 6f 72 20 66 61 69 6c 75 72 65 29  /// for failure)
6840: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
6850: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
6860: 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74  nal static SQLit
6870: 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69  eErrorCode Stati
6880: 63 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28 0d  cReleaseMemory(.
6890: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 42 79  .        int nBy
68a0: 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f  tes,..        bo
68b0: 6f 6c 20 72 65 73 65 74 2c 0d 0a 20 20 20 20 20  ol reset,..     
68c0: 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 61 63 74 2c     bool compact,
68d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 69 6e  ..        ref in
68e0: 74 20 6e 46 72 65 65 2c 0d 0a 20 20 20 20 20 20  t nFree,..      
68f0: 20 20 72 65 66 20 62 6f 6f 6c 20 72 65 73 65 74    ref bool reset
6900: 4f 6b 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66  Ok,..        ref
6910: 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74 0d 0a   uint nLargest..
6920: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
6930: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
6940: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 53  ErrorCode rc = S
6950: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6960: 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e  k;....        in
6970: 74 20 6e 46 72 65 65 4c 6f 63 61 6c 20 3d 20 55  t nFreeLocal = U
6980: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6990: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  ds.sqlite3_relea
69a0: 73 65 5f 6d 65 6d 6f 72 79 28 6e 42 79 74 65 73  se_memory(nBytes
69b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 75 69 6e 74  );..        uint
69c0: 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c 20 3d   nLargestLocal =
69d0: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   0;..        boo
69e0: 6c 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 20 3d  l resetOkLocal =
69f0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21   false;....#if !
6a00: 44 45 42 55 47 20 26 26 20 57 49 4e 44 4f 57 53  DEBUG && WINDOWS
6a10: 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 75 6c 64   // NOTE: Should
6a20: 20 62 65 20 22 57 49 4e 33 32 48 45 41 50 20 26   be "WIN32HEAP &
6a30: 26 20 21 4d 45 4d 44 45 42 55 47 20 26 26 20 57  & !MEMDEBUG && W
6a40: 49 4e 44 4f 57 53 22 0d 0a 20 20 20 20 20 20 20  INDOWS"..       
6a50: 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f   if (HelperMetho
6a60: 64 73 2e 49 73 57 69 6e 64 6f 77 73 28 29 29 0d  ds.IsWindows()).
6a70: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6a80: 20 20 20 20 20 20 20 20 69 66 20 28 28 72 63 20          if ((rc 
6a90: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
6aa0: 64 65 2e 4f 6b 29 20 26 26 20 72 65 73 65 74 29  de.Ok) && reset)
6ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ad0: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
6ae0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
6af0: 33 5f 77 69 6e 33 32 5f 72 65 73 65 74 5f 68 65  3_win32_reset_he
6b00: 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ap();....       
6b10: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20           if (rc 
6b20: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
6b30: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
6b40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 65              rese
6b50: 74 4f 6b 4c 6f 63 61 6c 20 3d 20 74 72 75 65 3b  tOkLocal = true;
6b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6b70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
6b80: 66 20 28 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  f ((rc == SQLite
6b90: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26  ErrorCode.Ok) &&
6ba0: 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20   compact)..     
6bb0: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
6bc0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6bd0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33  ods.sqlite3_win3
6be0: 32 5f 63 6f 6d 70 61 63 74 5f 68 65 61 70 28 72  2_compact_heap(r
6bf0: 65 66 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c  ef nLargestLocal
6c00: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
6c10: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e         else..#en
6c20: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69 66 20  dif..        if 
6c30: 28 72 65 73 65 74 20 7c 7c 20 63 6f 6d 70 61 63  (reset || compac
6c40: 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t)..        {.. 
6c50: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
6c60: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
6c70: 4e 6f 74 46 6f 75 6e 64 3b 0d 0a 20 20 20 20 20  NotFound;..     
6c80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6c90: 6e 46 72 65 65 20 3d 20 6e 46 72 65 65 4c 6f 63  nFree = nFreeLoc
6ca0: 61 6c 3b 0d 0a 20 20 20 20 20 20 20 20 6e 4c 61  al;..        nLa
6cb0: 72 67 65 73 74 20 3d 20 6e 4c 61 72 67 65 73 74  rgest = nLargest
6cc0: 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20 20 20 20 20  Local;..        
6cd0: 72 65 73 65 74 4f 6b 20 3d 20 72 65 73 65 74 4f  resetOk = resetO
6ce0: 6b 4c 6f 63 61 6c 3b 0d 0a 0d 0a 20 20 20 20 20  kLocal;....     
6cf0: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
6d00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
6d10: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
6d20: 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20  // Shutdown the 
6d30: 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f  SQLite engine so
6d40: 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
6d50: 72 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64  restarted with d
6d60: 69 66 66 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f  ifferent..    //
6d70: 2f 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  / configuration 
6d80: 6f 70 74 69 6f 6e 73 2e 20 20 57 65 20 64 65 70  options.  We dep
6d90: 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74  end on auto init
6da0: 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65  ialization to re
6db0: 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  cover...    /// 
6dc0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6dd0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
6de0: 75 72 6e 73 20 61 20 73 74 61 6e 64 61 72 64 20  urns a standard 
6df0: 53 51 4c 69 74 65 20 72 65 73 75 6c 74 20 63 6f  SQLite result co
6e00: 64 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  de.</returns>.. 
6e10: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
6e20: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
6e30: 43 6f 64 65 20 53 68 75 74 64 6f 77 6e 28 29 0d  Code Shutdown().
6e40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6e50: 72 65 74 75 72 6e 20 53 74 61 74 69 63 53 68 75  return StaticShu
6e60: 74 64 6f 77 6e 28 66 61 6c 73 65 29 3b 0d 0a 20  tdown(false);.. 
6e70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
6e80: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
6e90: 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20  // Shutdown the 
6ea0: 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 73 6f  SQLite engine so
6eb0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
6ec0: 72 65 73 74 61 72 74 65 64 20 77 69 74 68 20 64  restarted with d
6ed0: 69 66 66 65 72 65 6e 74 0d 0a 20 20 20 20 2f 2f  ifferent..    //
6ee0: 2f 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  / configuration 
6ef0: 6f 70 74 69 6f 6e 73 2e 20 20 57 65 20 64 65 70  options.  We dep
6f00: 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74  end on auto init
6f10: 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65  ialization to re
6f20: 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  cover...    /// 
6f30: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6f40: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6f50: 22 64 69 72 65 63 74 6f 72 69 65 73 22 3e 0d 0a  "directories">..
6f60: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
6f70: 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 61   to reset the da
6f80: 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f  tabase and tempo
6f90: 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73  rary directories
6fa0: 20 74 6f 20 74 68 65 69 72 0d 0a 20 20 20 20 2f   to their..    /
6fb0: 2f 2f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  // default value
6fc0: 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20  s, which should 
6fd0: 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68  be null for both
6fe0: 2e 20 20 54 68 69 73 20 70 61 72 61 6d 65 74 65  .  This paramete
6ff0: 72 20 68 61 73 20 6e 6f 0d 0a 20 20 20 20 2f 2f  r has no..    //
7000: 2f 20 65 66 66 65 63 74 20 6f 6e 20 6e 6f 6e 2d  / effect on non-
7010: 57 69 6e 64 6f 77 73 20 6f 70 65 72 61 74 69 6e  Windows operatin
7020: 67 20 73 79 73 74 65 6d 73 2e 0d 0a 20 20 20 20  g systems...    
7030: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
7040: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
7050: 65 74 75 72 6e 73 20 61 20 73 74 61 6e 64 61 72  eturns a standar
7060: 64 20 53 51 4c 69 74 65 20 72 65 73 75 6c 74 20  d SQLite result 
7070: 63 6f 64 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  code.</returns>.
7080: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
7090: 61 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  atic SQLiteError
70a0: 43 6f 64 65 20 53 74 61 74 69 63 53 68 75 74 64  Code StaticShutd
70b0: 6f 77 6e 28 0d 0a 20 20 20 20 20 20 20 20 62 6f  own(..        bo
70c0: 6f 6c 20 64 69 72 65 63 74 6f 72 69 65 73 0d 0a  ol directories..
70d0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
70e0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
70f0: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 53  ErrorCode rc = S
7100: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
7110: 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  k;....        if
7120: 20 28 64 69 72 65 63 74 6f 72 69 65 73 29 0d 0a   (directories)..
7130: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57          {..#if W
7140: 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20  INDOWS..        
7150: 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65      if (HelperMe
7160: 74 68 6f 64 73 2e 49 73 57 69 6e 64 6f 77 73 28  thods.IsWindows(
7170: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
7180: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7190: 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c     if (rc == SQL
71a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
71b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
71c0: 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
71d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
71e0: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
71f0: 5f 64 69 72 65 63 74 6f 72 79 28 31 2c 20 6e 75  _directory(1, nu
7200: 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ll);....        
7210: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
7220: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
7230: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
7240: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
7250: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7260: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33  ods.sqlite3_win3
7270: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28  2_set_directory(
7280: 32 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  2, null);..     
7290: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
72a0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64        else..#end
72b0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
72c0: 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  {..#if !NET_COMP
72d0: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
72e0: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
72f0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
7300: 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20  e.WriteLine(..  
7310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7320: 20 20 22 53 68 75 74 64 6f 77 6e 3a 20 43 61 6e    "Shutdown: Can
7330: 6e 6f 74 20 72 65 73 65 74 20 64 69 72 65 63 74  not reset direct
7340: 6f 72 69 65 73 20 6f 6e 20 74 68 69 73 20 70 6c  ories on this pl
7350: 61 74 66 6f 72 6d 2e 22 29 3b 0d 0a 23 65 6e 64  atform.");..#end
7360: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
7370: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
7380: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
7390: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
73a0: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
73b0: 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61     rc = UnsafeNa
73c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
73d0: 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 3b 0d  te3_shutdown();.
73e0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
73f0: 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n rc;..    }....
7400: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7410: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  >..    /// Deter
7420: 6d 69 6e 65 73 20 69 66 20 74 68 65 20 61 73 73  mines if the ass
7430: 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65 20 63  ociated native c
7440: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
7450: 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f   is open...    /
7460: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
7470: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
7480: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
7490: 72 6f 20 69 66 20 74 68 65 20 61 73 73 6f 63 69  ro if the associ
74a0: 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e  ated native conn
74b0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73  ection handle is
74c0: 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20   open...    /// 
74d0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
74e0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
74f0: 65 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 0d  e bool IsOpen().
7500: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7510: 72 65 74 75 72 6e 20 28 5f 73 71 6c 20 21 3d 20  return (_sql != 
7520: 6e 75 6c 6c 29 20 26 26 20 21 5f 73 71 6c 2e 49  null) && !_sql.I
7530: 73 49 6e 76 61 6c 69 64 20 26 26 20 21 5f 73 71  sInvalid && !_sq
7540: 6c 2e 49 73 43 6c 6f 73 65 64 3b 0d 0a 20 20 20  l.IsClosed;..   
7550: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
7560: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7570: 20 52 65 74 75 72 6e 73 20 74 68 65 20 66 75 6c   Returns the ful
7580: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70 61 74  ly qualified pat
7590: 68 20 61 6e 64 20 66 69 6c 65 20 6e 61 6d 65 20  h and file name 
75a0: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 6c  for the currentl
75b0: 79 20 6f 70 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  y open..    /// 
75c0: 64 61 74 61 62 61 73 65 2c 20 69 66 20 61 6e 79  database, if any
75d0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
75e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
75f0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 62 4e 61  param name="dbNa
7600: 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
7610: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 61 74  e name of the at
7620: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
7630: 74 6f 20 71 75 65 72 79 2e 0d 0a 20 20 20 20 2f  to query...    /
7640: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
7650: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
7660: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 75 6c 6c      /// The full
7670: 79 20 71 75 61 6c 69 66 69 65 64 20 70 61 74 68  y qualified path
7680: 20 61 6e 64 20 66 69 6c 65 20 6e 61 6d 65 20 66   and file name f
7690: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  or the currently
76a0: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2c 0d   open database,.
76b0: 0a 20 20 20 20 2f 2f 2f 20 69 66 20 61 6e 79 2e  .    /// if any.
76c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
76d0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
76e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
76f0: 6e 67 20 47 65 74 46 69 6c 65 4e 61 6d 65 28 73  ng GetFileName(s
7700: 74 72 69 6e 67 20 64 62 4e 61 6d 65 29 0d 0a 20  tring dbName).. 
7710: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
7720: 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
7730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7740: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
7750: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
7760: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
7770: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
7780: 69 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61 6d 65  ite3_db_filename
7790: 5f 62 79 74 65 73 28 0d 0a 20 20 20 20 20 20 20  _bytes(..       
77a0: 20 20 20 20 20 5f 73 71 6c 2c 20 54 6f 55 54 46       _sql, ToUTF
77b0: 38 28 64 62 4e 61 6d 65 29 29 2c 20 2d 31 29 3b  8(dbName)), -1);
77c0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
77d0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
77e0: 20 76 6f 69 64 20 4f 70 65 6e 28 73 74 72 69 6e   void Open(strin
77f0: 67 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 73  g strFilename, s
7800: 74 72 69 6e 67 20 76 66 73 4e 61 6d 65 2c 20 53  tring vfsName, S
7810: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7820: 6c 61 67 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46  lags connectionF
7830: 6c 61 67 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e  lags, SQLiteOpen
7840: 46 6c 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c  FlagsEnum openFl
7850: 61 67 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c  ags, int maxPool
7860: 53 69 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f  Size, bool usePo
7870: 6f 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ol)..    {..    
7880: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e    //..      // N
7890: 4f 54 45 3a 20 49 66 20 74 68 65 20 64 61 74 61  OTE: If the data
78a0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
78b0: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  is currently ope
78c0: 6e 2c 20 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20  n, attempt to.. 
78d0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6c       //       cl
78e0: 6f 73 65 20 69 74 20 6e 6f 77 2e 20 20 54 68 69  ose it now.  Thi
78f0: 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 62  s must be done b
7900: 65 63 61 75 73 65 20 74 68 65 20 66 69 6c 65 20  ecause the file 
7910: 6e 61 6d 65 20 6f 72 0d 0a 20 20 20 20 20 20 2f  name or..      /
7920: 2f 20 20 20 20 20 20 20 6f 74 68 65 72 20 70 61  /       other pa
7930: 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61  rameters that ma
7940: 79 20 69 6d 70 61 63 74 20 74 68 65 20 75 6e 64  y impact the und
7950: 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65  erlying database
7960: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
7970: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20   connection may 
7980: 68 61 76 65 20 63 68 61 6e 67 65 64 2e 0d 0a 20  have changed... 
7990: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69       //..      i
79a0: 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  f (_sql != null)
79b0: 20 43 6c 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a   Close(false);..
79c0: 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
79d0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68    // NOTE: If th
79e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73  e connection was
79f0: 20 6e 6f 74 20 63 6c 6f 73 65 64 20 73 75 63 63   not closed succ
7a00: 65 73 73 66 75 6c 6c 79 2c 20 74 68 72 6f 77 20  essfully, throw 
7a10: 61 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  an..      //    
7a20: 20 20 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 77     exception now
7a30: 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
7a40: 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e     if (_sql != n
7a50: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7a60: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
7a70: 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65  Exception("conne
7a80: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20  ction handle is 
7a90: 73 74 69 6c 6c 20 61 63 74 69 76 65 22 29 3b 0d  still active");.
7aa0: 0a 0d 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f  ...      _usePoo
7ab0: 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20 20  l = usePool;..  
7ac0: 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20      _fileName = 
7ad0: 73 74 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a 20 20  strFilename;..  
7ae0: 20 20 20 20 5f 66 6c 61 67 73 20 3d 20 63 6f 6e      _flags = con
7af0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 3b 0d 0a 0d  nectionFlags;...
7b00: 0a 20 20 20 20 20 20 69 66 20 28 75 73 65 50 6f  .      if (usePo
7b10: 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ol)..      {..  
7b20: 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 53 51 4c        _sql = SQL
7b30: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f  iteConnectionPoo
7b40: 6c 2e 52 65 6d 6f 76 65 28 73 74 72 46 69 6c 65  l.Remove(strFile
7b50: 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a  name, maxPoolSiz
7b60: 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56 65 72 73  e, out _poolVers
7b70: 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
7b80: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7b90: 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c  n.OnChanged(null
7ba0: 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e  , new Connection
7bb0: 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20  EventArgs(..    
7bc0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
7bd0: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70  nnectionEventTyp
7be0: 65 2e 4f 70 65 6e 65 64 46 72 6f 6d 50 6f 6f 6c  e.OpenedFromPool
7bf0: 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20  , null, null,.. 
7c00: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
7c10: 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74 72   null, _sql, str
7c20: 46 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f 62  Filename, new ob
7c30: 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ject[] {..      
7c40: 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
7c50: 69 74 65 33 29 2c 20 73 74 72 46 69 6c 65 6e 61  ite3), strFilena
7c60: 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 63 6f 6e  me, vfsName, con
7c70: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a 20  nectionFlags,.. 
7c80: 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e 46             openF
7c90: 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a  lags, maxPoolSiz
7ca0: 65 2c 20 75 73 65 50 6f 6f 6c 2c 20 5f 70 6f 6f  e, usePool, _poo
7cb0: 6c 56 65 72 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d  lVersion }));...
7cc0: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
7cd0: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
7ce0: 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
7cf0: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
7d00: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
7d10: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
7d20: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
7d30: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
7d40: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
7d50: 20 20 20 20 22 4f 70 65 6e 20 28 50 6f 6f 6c 29      "Open (Pool)
7d60: 3a 20 7b 30 7d 22 2c 20 48 61 6e 64 6c 65 54 6f  : {0}", HandleTo
7d70: 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e  String()));..#en
7d80: 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  dif..      }....
7d90: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
7da0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
7db0: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
7dc0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7dd0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
7de0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
7df0: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
7e00: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
7e10: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
7e20: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
7e30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 49 6e   {..          In
7e40: 74 50 74 72 20 64 62 20 3d 20 49 6e 74 50 74 72  tPtr db = IntPtr
7e50: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
7e60: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
7e70: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
7e80: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
7e90: 20 20 20 20 20 20 20 20 69 6e 74 20 65 78 74 46          int extF
7ea0: 75 6e 63 73 20 3d 20 28 28 63 6f 6e 6e 65 63 74  uncs = ((connect
7eb0: 69 6f 6e 46 6c 61 67 73 20 26 20 53 51 4c 69 74  ionFlags & SQLit
7ec0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
7ed0: 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63  .NoExtensionFunc
7ee0: 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69 74 65  tions) != SQLite
7ef0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
7f00: 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74  NoExtensionFunct
7f10: 69 6f 6e 73 29 20 3f 20 31 20 3a 20 30 3b 0d 0a  ions) ? 1 : 0;..
7f20: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
7f30: 65 78 74 46 75 6e 63 73 20 21 3d 20 30 29 0d 0a  extFuncs != 0)..
7f40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7f50: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
7f60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7f70: 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e  .sqlite3_open_in
7f80: 74 65 72 6f 70 28 54 6f 55 54 46 38 28 73 74 72  terop(ToUTF8(str
7f90: 46 69 6c 65 6e 61 6d 65 29 2c 20 54 6f 55 54 46  Filename), ToUTF
7fa0: 38 28 76 66 73 4e 61 6d 65 29 2c 20 6f 70 65 6e  8(vfsName), open
7fb0: 46 6c 61 67 73 2c 20 65 78 74 46 75 6e 63 73 2c  Flags, extFuncs,
7fc0: 20 72 65 66 20 64 62 29 3b 0d 0a 20 20 20 20 20   ref db);..     
7fd0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7fe0: 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a    else..#endif..
7ff0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8000: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
8010: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8020: 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32  .sqlite3_open_v2
8030: 28 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e  (ToUTF8(strFilen
8040: 61 6d 65 29 2c 20 72 65 66 20 64 62 2c 20 6f 70  ame), ref db, op
8050: 65 6e 46 6c 61 67 73 2c 20 54 6f 55 54 46 38 28  enFlags, ToUTF8(
8060: 76 66 73 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20  vfsName));..    
8070: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
8080: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
8090: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
80a0: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72  ON..          Tr
80b0: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
80c0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
80d0: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
80e0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
80f0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
8100: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
8110: 20 20 20 20 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c      "Open: {0}",
8120: 20 64 62 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   db));..#endif..
8130: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
8140: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
8150: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
8160: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
8170: 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  on(n, null);..  
8180: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
8190: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
81a0: 69 6f 6e 48 61 6e 64 6c 65 28 64 62 2c 20 74 72  ionHandle(db, tr
81b0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
81c0: 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f  .        lock (_
81d0: 73 71 6c 29 20 7b 20 2f 2a 20 48 41 43 4b 3a 20  sql) { /* HACK: 
81e0: 46 6f 72 63 65 20 74 68 65 20 53 79 6e 63 42 6c  Force the SyncBl
81f0: 6f 63 6b 20 74 6f 20 62 65 20 22 63 72 65 61 74  ock to be "creat
8200: 65 64 22 20 6e 6f 77 2e 20 2a 2f 20 7d 0d 0a 0d  ed" now. */ }...
8210: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
8220: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e  onnection.OnChan
8230: 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f  ged(null, new Co
8240: 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
8250: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
8260: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8270: 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69  EventType.NewCri
8280: 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c  ticalHandle, nul
8290: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
82a0: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  null, null, null
82b0: 2c 20 5f 73 71 6c 2c 20 73 74 72 46 69 6c 65 6e  , _sql, strFilen
82c0: 61 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b  ame, new object[
82d0: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..           
82e0: 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29   typeof(SQLite3)
82f0: 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 76  , strFilename, v
8300: 66 73 4e 61 6d 65 2c 20 63 6f 6e 6e 65 63 74 69  fsName, connecti
8310: 6f 6e 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  onFlags,..      
8320: 20 20 20 20 20 20 6f 70 65 6e 46 6c 61 67 73 2c        openFlags,
8330: 20 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 75 73   maxPoolSize, us
8340: 65 50 6f 6f 6c 20 7d 29 29 3b 0d 0a 20 20 20 20  ePool }));..    
8350: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20    }....      // 
8360: 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 74  Bind functions t
8370: 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  o this connectio
8380: 6e 2e 20 20 49 66 20 61 6e 79 20 70 72 65 76 69  n.  If any previ
8390: 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66  ous functions of
83a0: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a   the same name..
83b0: 20 20 20 20 20 20 2f 2f 20 77 65 72 65 20 61 6c        // were al
83c0: 72 65 61 64 79 20 62 6f 75 6e 64 2c 20 74 68 65  ready bound, the
83d0: 6e 20 74 68 65 20 6e 65 77 20 62 69 6e 64 69 6e  n the new bindin
83e0: 67 73 20 72 65 70 6c 61 63 65 20 74 68 65 20 6f  gs replace the o
83f0: 6c 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 28  ld...      if ((
8400: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  connectionFlags 
8410: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
8420: 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75  onFlags.NoBindFu
8430: 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51 4c 69  nctions) != SQLi
8440: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
8450: 73 2e 4e 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e  s.NoBindFunction
8460: 73 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  s)..      {..   
8470: 20 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63         if (_func
8480: 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  tions == null)..
8490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66                _f
84a0: 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 44  unctions = new D
84b0: 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65  ictionary<SQLite
84c0: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
84d0: 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  e, SQLiteFunctio
84e0: 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n>();....       
84f0: 20 20 20 66 6f 72 65 61 63 68 20 28 4b 65 79 56     foreach (KeyV
8500: 61 6c 75 65 50 61 69 72 3c 53 51 4c 69 74 65 46  aluePair<SQLiteF
8510: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
8520: 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  , SQLiteFunction
8530: 3e 20 70 61 69 72 0d 0a 20 20 20 20 20 20 20 20  > pair..        
8540: 20 20 20 20 20 20 20 20 20 20 69 6e 20 53 51 4c            in SQL
8550: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64  iteFunction.Bind
8560: 46 75 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c 20  Functions(this, 
8570: 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 29  connectionFlags)
8580: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66                _f
85a0: 75 6e 63 74 69 6f 6e 73 5b 70 61 69 72 2e 4b 65  unctions[pair.Ke
85b0: 79 5d 20 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b  y] = pair.Value;
85c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
85d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
85e0: 53 65 74 54 69 6d 65 6f 75 74 28 30 29 3b 0d 0a  SetTimeout(0);..
85f0: 20 20 20 20 20 20 47 43 2e 4b 65 65 70 41 6c 69        GC.KeepAli
8600: 76 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d  ve(_sql);..    }
8610: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
8620: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43   override void C
8630: 6c 65 61 72 50 6f 6f 6c 28 29 0d 0a 20 20 20 20  learPool()..    
8640: 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43  {..      SQLiteC
8650: 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c  onnectionPool.Cl
8660: 65 61 72 50 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d  earPool(_fileNam
8670: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
8680: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
8690: 69 64 65 20 69 6e 74 20 43 6f 75 6e 74 50 6f 6f  ide int CountPoo
86a0: 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  l()..    {..    
86b0: 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 73      Dictionary<s
86c0: 74 72 69 6e 67 2c 20 69 6e 74 3e 20 63 6f 75 6e  tring, int> coun
86d0: 74 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ts = null;..    
86e0: 20 20 20 20 69 6e 74 20 6f 70 65 6e 43 6f 75 6e      int openCoun
86f0: 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  t = 0;..        
8700: 69 6e 74 20 63 6c 6f 73 65 43 6f 75 6e 74 20 3d  int closeCount =
8710: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74   0;..        int
8720: 20 74 6f 74 61 6c 43 6f 75 6e 74 20 3d 20 30 3b   totalCount = 0;
8730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
8740: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c  teConnectionPool
8750: 2e 47 65 74 43 6f 75 6e 74 73 28 5f 66 69 6c 65  .GetCounts(_file
8760: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
8770: 20 20 20 72 65 66 20 63 6f 75 6e 74 73 2c 20 72     ref counts, r
8780: 65 66 20 6f 70 65 6e 43 6f 75 6e 74 2c 20 72 65  ef openCount, re
8790: 66 20 63 6c 6f 73 65 43 6f 75 6e 74 2c 0d 0a 20  f closeCount,.. 
87a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 74             ref t
87b0: 6f 74 61 6c 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  otalCount);.... 
87c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 6f         return to
87d0: 74 61 6c 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 7d  talCount;..    }
87e0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
87f0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
8800: 65 74 54 69 6d 65 6f 75 74 28 69 6e 74 20 6e 54  etTimeout(int nT
8810: 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 7b  imeoutMS)..    {
8820: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 64  ..      IntPtr d
8830: 62 20 3d 20 5f 73 71 6c 3b 0d 0a 20 20 20 20 20  b = _sql;..     
8840: 20 69 66 20 28 64 62 20 3d 3d 20 49 6e 74 50 74   if (db == IntPt
8850: 72 2e 5a 65 72 6f 29 20 74 68 72 6f 77 20 6e 65  r.Zero) throw ne
8860: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
8870: 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e  n("no connection
8880: 20 68 61 6e 64 6c 65 20 61 76 61 69 6c 61 62 6c   handle availabl
8890: 65 22 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  e");..      SQLi
88a0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
88b0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
88c0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 75 73 79  ods.sqlite3_busy
88d0: 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 6e 54 69  _timeout(db, nTi
88e0: 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20 20 20 20 20  meoutMS);..     
88f0: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
8900: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
8910: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8920: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
8930: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
8940: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8950: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
8960: 20 53 74 65 70 28 53 51 4c 69 74 65 53 74 61 74   Step(SQLiteStat
8970: 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20  ement stmt)..   
8980: 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
8990: 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20  ErrorCode n;..  
89a0: 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d      Random rnd =
89b0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69   null;..      ui
89c0: 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28  nt starttick = (
89d0: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
89e0: 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20  .TickCount;..   
89f0: 20 20 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 20     uint timeout 
8a00: 3d 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63  = (uint)(stmt._c
8a10: 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54  ommand._commandT
8a20: 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d  imeout * 1000);.
8a30: 0a 0d 0a 20 20 20 20 20 20 52 65 73 65 74 43 61  ...      ResetCa
8a40: 6e 63 65 6c 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a  ncelCount();....
8a50: 20 20 20 20 20 20 77 68 69 6c 65 20 28 74 72 75        while (tru
8a60: 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  e)..      {..   
8a70: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
8a80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8a90: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
8aa0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
8ab0: 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e      finally /* N
8ac0: 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72  OTE: Thread.Abor
8ad0: 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20  t() protection. 
8ae0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  */..        {.. 
8af0: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
8b00: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8b10: 2e 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73 74  .sqlite3_step(st
8b20: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
8b30: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
8b40: 20 20 20 20 20 20 20 20 69 66 20 28 53 68 6f 75          if (Shou
8b50: 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c  ldThrowForCancel
8b60: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ())..        {..
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8b80: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
8b90: 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20  rCode.Ok) ||..  
8ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e                (n
8bb0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
8bc0: 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20  ode.Row) ||..   
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20               (n 
8be0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
8bf0: 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20  de.Done))..     
8c00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8c10: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 53 51            n = SQ
8c20: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e  LiteErrorCode.In
8c30: 74 65 72 72 75 70 74 3b 0d 0a 20 20 20 20 20 20  terrupt;..      
8c40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8c50: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
8c60: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
8c70: 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  (n, null);..    
8c80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8c90: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
8ca0: 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72  ErrorCode.Interr
8cb0: 75 70 74 29 20 72 65 74 75 72 6e 20 66 61 6c 73  upt) return fals
8cc0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  e;..        if (
8cd0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
8ce0: 43 6f 64 65 2e 52 6f 77 29 20 72 65 74 75 72 6e  Code.Row) return
8cf0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
8d00: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
8d10: 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 20 72  rrorCode.Done) r
8d20: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
8d30: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
8d40: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8d50: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  .Ok)..        {.
8d60: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
8d70: 65 45 72 72 6f 72 43 6f 64 65 20 72 3b 0d 0a 0d  eErrorCode r;...
8d80: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 41 6e  .          // An
8d90: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2c   error occurred,
8da0: 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65 73 65   attempt to rese
8db0: 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2e  t the statement.
8dc0: 20 20 49 66 20 74 68 65 20 72 65 73 65 74 20 77    If the reset w
8dd0: 6f 72 6b 65 64 20 62 65 63 61 75 73 65 20 74 68  orked because th
8de0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  e..          // 
8df0: 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
8e00: 65 64 2c 20 72 65 2d 74 72 79 20 74 68 65 20 73  ed, re-try the s
8e10: 74 65 70 20 61 67 61 69 6e 2e 20 20 49 66 20 69  tep again.  If i
8e20: 74 20 65 72 72 6f 72 65 64 20 6f 75 72 20 62 65  t errored our be
8e30: 63 61 75 73 65 20 74 68 65 20 64 61 74 61 62 61  cause the databa
8e40: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  se..          //
8e50: 20 69 73 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e   is locked, then
8e60: 20 6b 65 65 70 20 72 65 74 72 79 69 6e 67 20 75   keep retrying u
8e70: 6e 74 69 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64  ntil the command
8e80: 20 74 69 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e   timeout occurs.
8e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20  ..          r = 
8ea0: 52 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a  Reset(stmt);....
8eb0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 20            if (r 
8ec0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
8ed0: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
8ee0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
8ef0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
8f00: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
8f10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 65  ;....          e
8f20: 6c 73 65 20 69 66 20 28 28 72 20 3d 3d 20 53 51  lse if ((r == SQ
8f30: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
8f40: 63 6b 65 64 20 7c 7c 20 72 20 3d 3d 20 53 51 4c  cked || r == SQL
8f50: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
8f60: 79 29 20 26 26 20 73 74 6d 74 2e 5f 63 6f 6d 6d  y) && stmt._comm
8f70: 61 6e 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  and != null)..  
8f80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8f90: 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74         // Keep t
8fa0: 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  rying..         
8fb0: 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75     if (rnd == nu
8fc0: 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d  ll) // First tim
8fd0: 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65  e we've encounte
8fe0: 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20  red the lock..  
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64 20              rnd 
9000: 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d  = new Random();.
9010: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9020: 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65 65  / If we've excee
9030: 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27  ded the command'
9040: 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20  s timeout, give 
9050: 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  up and throw an 
9060: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
9070: 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76     if ((uint)Env
9080: 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75  ironment.TickCou
9090: 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e  nt - starttick >
90a0: 20 74 69 6d 65 6f 75 74 29 0d 0a 20 20 20 20 20   timeout)..     
90b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
90c0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
90d0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
90e0: 6e 28 72 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(r, GetLastErro
90f0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
9100: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
9110: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
9120: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9130: 20 20 20 20 20 2f 2f 20 4f 74 68 65 72 77 69 73       // Otherwis
9140: 65 20 73 6c 65 65 70 20 66 6f 72 20 61 20 72 61  e sleep for a ra
9150: 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74  ndom amount of t
9160: 69 6d 65 20 75 70 20 74 6f 20 31 35 30 6d 73 0d  ime up to 150ms.
9170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
9180: 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 2e  ystem.Threading.
9190: 54 68 72 65 61 64 2e 53 6c 65 65 70 28 72 6e 64  Thread.Sleep(rnd
91a0: 2e 4e 65 78 74 28 31 2c 20 31 35 30 29 29 3b 0d  .Next(1, 150));.
91b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
91c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
91d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
91e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
91f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9200: 20 2f 2f 2f 20 48 61 73 20 74 68 65 20 73 71 6c   /// Has the sql
9210: 69 74 65 33 5f 65 72 72 73 74 72 28 29 20 63 6f  ite3_errstr() co
9220: 72 65 20 6c 69 62 72 61 72 79 20 41 50 49 20 62  re library API b
9230: 65 65 6e 20 63 68 65 63 6b 65 64 20 66 6f 72 20  een checked for 
9240: 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66  yet?..    /// If
9250: 20 73 6f 2c 20 69 73 20 69 74 20 70 72 65 73 65   so, is it prese
9260: 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt?..    /// </s
9270: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
9280: 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
9290: 3f 20 68 61 76 65 5f 65 72 72 73 74 72 20 3d 20  ? have_errstr = 
92a0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  null;....    ///
92b0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
92c0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
92d0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  error message fo
92e0: 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  r the specified 
92f0: 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
9300: 64 65 20 75 73 69 6e 67 0d 0a 20 20 20 20 2f 2f  de using..    //
9310: 2f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 72  / the sqlite3_er
9320: 72 73 74 72 28 29 20 66 75 6e 63 74 69 6f 6e 2c  rstr() function,
9330: 20 66 61 6c 6c 69 6e 67 20 62 61 63 6b 20 74 6f   falling back to
9340: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 6c 6f   the internal lo
9350: 6f 6b 75 70 0d 0a 20 20 20 20 2f 2f 2f 20 74 61  okup..    /// ta
9360: 62 6c 65 20 69 66 20 6e 65 63 65 73 73 61 72 79  ble if necessary
9370: 2e 0d 0a 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20  ...    ///..    
9380: 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 44 6f 20  /// WARNING: Do 
9390: 6e 6f 74 20 72 65 6d 6f 76 65 20 74 68 69 73 20  not remove this 
93a0: 6d 65 74 68 6f 64 2c 20 69 74 20 69 73 20 75 73  method, it is us
93b0: 65 64 20 76 69 61 20 72 65 66 6c 65 63 74 69 6f  ed via reflectio
93c0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
93d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
93e0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 63 22  <param name="rc"
93f0: 3e 54 68 65 20 53 51 4c 69 74 65 20 72 65 74 75  >The SQLite retu
9400: 72 6e 20 63 6f 64 65 2e 3c 2f 70 61 72 61 6d 3e  rn code.</param>
9410: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
9420: 6e 73 3e 54 68 65 20 65 72 72 6f 72 20 6d 65 73  ns>The error mes
9430: 73 61 67 65 20 6f 72 20 6e 75 6c 6c 20 69 66 20  sage or null if 
9440: 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75  it cannot be fou
9450: 6e 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  nd.</returns>.. 
9460: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
9470: 69 63 20 73 74 72 69 6e 67 20 47 65 74 45 72 72  ic string GetErr
9480: 6f 72 53 74 72 69 6e 67 28 53 51 4c 69 74 65 45  orString(SQLiteE
9490: 72 72 6f 72 43 6f 64 65 20 72 63 29 0d 0a 20 20  rrorCode rc)..  
94a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79    {..        try
94b0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
94c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 68 61 76           if (hav
94d0: 65 5f 65 72 72 73 74 72 20 3d 3d 20 6e 75 6c 6c  e_errstr == null
94e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
94f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9500: 20 20 69 6e 74 20 76 65 72 73 69 6f 6e 4e 75 6d    int versionNum
9510: 62 65 72 20 3d 20 53 51 4c 69 74 65 56 65 72 73  ber = SQLiteVers
9520: 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20  ionNumber;..    
9530: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 76 65              have
9540: 5f 65 72 72 73 74 72 20 3d 20 28 76 65 72 73 69  _errstr = (versi
9550: 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30 30 37  onNumber >= 3007
9560: 30 31 35 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  015);..         
9570: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9580: 20 20 20 20 69 66 20 28 28 62 6f 6f 6c 29 68 61      if ((bool)ha
9590: 76 65 5f 65 72 72 73 74 72 29 0d 0a 20 20 20 20  ve_errstr)..    
95a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
95b0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
95c0: 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61  r ptr = UnsafeNa
95d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
95e0: 74 65 33 5f 65 72 72 73 74 72 28 72 63 29 3b 0d  te3_errstr(rc);.
95f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9600: 20 20 20 69 66 20 28 70 74 72 20 21 3d 20 49 6e     if (ptr != In
9610: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
9620: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23              {..#
9630: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
9640: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9660: 20 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61     return Marsha
9670: 6c 2e 50 74 72 54 6f 53 74 72 69 6e 67 41 6e 73  l.PtrToStringAns
9680: 69 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a  i(ptr);..#else..
9690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96a0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
96b0: 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 2d 31 29  oString(ptr, -1)
96c0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
96d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
96e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
96f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
9700: 63 61 74 63 68 20 28 45 6e 74 72 79 50 6f 69 6e  catch (EntryPoin
9710: 74 4e 6f 74 46 6f 75 6e 64 45 78 63 65 70 74 69  tNotFoundExcepti
9720: 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  on)..        {..
9730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
9740: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
9750: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9760: 20 72 65 74 75 72 6e 20 46 61 6c 6c 62 61 63 6b   return Fallback
9770: 47 65 74 45 72 72 6f 72 53 74 72 69 6e 67 28 72  GetErrorString(r
9780: 63 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  c);..    }....  
9790: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
97a0: 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20 74 68 65  .    /// Has the
97b0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65   sqlite3_stmt_re
97c0: 61 64 6f 6e 6c 79 28 29 20 63 6f 72 65 20 6c 69  adonly() core li
97d0: 62 72 61 72 79 20 41 50 49 20 62 65 65 6e 20 63  brary API been c
97e0: 68 65 63 6b 65 64 20 66 6f 72 20 79 65 74 3f 0d  hecked for yet?.
97f0: 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73 6f 2c 20  .    /// If so, 
9800: 69 73 20 69 74 20 70 72 65 73 65 6e 74 3f 0d 0a  is it present?..
9810: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9820: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
9830: 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 68 61 76  static bool? hav
9840: 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 20  e_stmt_readonly 
9850: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f  = null;....    /
9860: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9870: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f    /// Returns no
9880: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 73 70  n-zero if the sp
9890: 65 63 69 66 69 65 64 20 73 74 61 74 65 6d 65 6e  ecified statemen
98a0: 74 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 20 69  t is read-only i
98b0: 6e 20 6e 61 74 75 72 65 2e 0d 0a 20 20 20 20 2f  n nature...    /
98c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
98d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
98e0: 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74  me="stmt">The st
98f0: 61 74 65 6d 65 6e 74 20 74 6f 20 63 68 65 63 6b  atement to check
9900: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
9910: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65  // <returns>True
9920: 20 69 66 20 74 68 65 20 6f 75 74 65 72 20 71 75   if the outer qu
9930: 65 72 79 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ery is read-only
9940: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
9950: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9960: 64 65 20 62 6f 6f 6c 20 49 73 52 65 61 64 4f 6e  de bool IsReadOn
9970: 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ly(..        SQL
9980: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
9990: 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  t..        )..  
99a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79    {..        try
99b0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
99c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 68 61 76           if (hav
99d0: 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 20  e_stmt_readonly 
99e0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
99f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9a00: 20 20 20 20 20 20 20 20 20 69 6e 74 20 76 65 72           int ver
9a10: 73 69 6f 6e 4e 75 6d 62 65 72 20 3d 20 53 51 4c  sionNumber = SQL
9a20: 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72  iteVersionNumber
9a30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9a40: 20 20 20 68 61 76 65 5f 73 74 6d 74 5f 72 65 61     have_stmt_rea
9a50: 64 6f 6e 6c 79 20 3d 20 28 76 65 72 73 69 6f 6e  donly = (version
9a60: 4e 75 6d 62 65 72 20 3e 3d 20 33 30 30 37 30 30  Number >= 300700
9a70: 34 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  4);..           
9a80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
9a90: 20 20 69 66 20 28 28 62 6f 6f 6c 29 68 61 76 65    if ((bool)have
9aa0: 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 29 0d  _stmt_readonly).
9ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
9ae0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9af0: 65 33 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79  e3_stmt_readonly
9b00: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9b10: 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c         stmt._sql
9b20: 69 74 65 5f 73 74 6d 74 29 20 21 3d 20 30 3b 0d  ite_stmt) != 0;.
9b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9b40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9b50: 20 20 20 63 61 74 63 68 20 28 45 6e 74 72 79 50     catch (EntryP
9b60: 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78 63 65  ointNotFoundExce
9b70: 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ption)..        
9b80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
9b90: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
9ba0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9bb0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
9bc0: 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55 6e 6b 6e 6f  ; /* NOTE: Unkno
9bd0: 77 6e 2c 20 61 73 73 75 6d 65 20 66 61 6c 73 65  wn, assume false
9be0: 2e 20 2a 2f 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  . */..    }.... 
9bf0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9c00: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
9c10: 43 6f 64 65 20 52 65 73 65 74 28 53 51 4c 69 74  Code Reset(SQLit
9c20: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29  eStatement stmt)
9c30: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
9c40: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
9c50: 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
9c60: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
9c70: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
9c80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9c90: 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 73  _reset_interop(s
9ca0: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9cb0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
9cc0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
9cd0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
9ce0: 5f 72 65 73 65 74 28 73 74 6d 74 2e 5f 73 71 6c  _reset(stmt._sql
9cf0: 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6e 64  ite_stmt);..#end
9d00: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49  if....      // I
9d10: 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  f the schema cha
9d20: 6e 67 65 64 2c 20 74 72 79 20 61 6e 64 20 72 65  nged, try and re
9d30: 2d 70 72 65 70 61 72 65 20 69 74 0d 0a 20 20 20  -prepare it..   
9d40: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
9d50: 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65  teErrorCode.Sche
9d60: 6d 61 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ma)..      {..  
9d70: 20 20 20 20 20 20 2f 2f 20 52 65 63 72 65 61 74        // Recreat
9d80: 65 20 61 20 64 75 6d 6d 79 20 73 74 61 74 65 6d  e a dummy statem
9d90: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 73 74 72  ent..        str
9da0: 69 6e 67 20 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d  ing str = null;.
9db0: 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28  .        using (
9dc0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
9dd0: 74 6d 70 20 3d 20 50 72 65 70 61 72 65 28 6e 75  tmp = Prepare(nu
9de0: 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c 53 74 61  ll, stmt._sqlSta
9df0: 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c 20 28 75  tement, null, (u
9e00: 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d 6d 61  int)(stmt._comma
9e10: 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d 65 6f  nd._commandTimeo
9e20: 75 74 20 2a 20 31 30 30 30 29 2c 20 72 65 66 20  ut * 1000), ref 
9e30: 73 74 72 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  str))..        {
9e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 46  ..          // F
9e50: 69 6e 61 6c 69 7a 65 20 74 68 65 20 65 78 69 73  inalize the exis
9e60: 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 0d 0a  ting statement..
9e70: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f            stmt._
9e80: 73 71 6c 69 74 65 5f 73 74 6d 74 2e 44 69 73 70  sqlite_stmt.Disp
9e90: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
9ea0: 20 20 2f 2f 20 52 65 61 73 73 69 67 6e 20 61 20    // Reassign a 
9eb0: 6e 65 77 20 73 74 61 74 65 6d 65 6e 74 20 70 6f  new statement po
9ec0: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f 6c 64  inter to the old
9ed0: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 63   statement and c
9ee0: 6c 65 61 72 20 74 68 65 20 74 65 6d 70 6f 72 61  lear the tempora
9ef0: 72 79 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20  ry one..        
9f00: 20 20 69 66 20 28 74 6d 70 20 21 3d 20 6e 75 6c    if (tmp != nul
9f10: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
9f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d  .            stm
9f30: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 20 3d  t._sqlite_stmt =
9f40: 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d   tmp._sqlite_stm
9f50: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
9f60: 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmp._sqlite_stmt
9f70: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
9f80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9f90: 20 20 20 2f 2f 20 52 65 61 70 70 6c 79 20 70 61     // Reapply pa
9fa0: 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20 20 20  rameters..      
9fb0: 20 20 20 20 73 74 6d 74 2e 42 69 6e 64 50 61 72      stmt.BindPar
9fc0: 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20 20 20 20  ameters();..    
9fd0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72      }..        r
9fe0: 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
9ff0: 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77 6e 3b 20 2f  rCode.Unknown; /
a000: 2f 20 52 65 73 65 74 20 77 61 73 20 4f 4b 2c 20  / Reset was OK, 
a010: 77 69 74 68 20 73 63 68 65 6d 61 20 63 68 61 6e  with schema chan
a020: 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  ge..      }..   
a030: 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
a040: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a050: 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20  .Locked || n == 
a060: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a070: 42 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 72  Busy)..        r
a080: 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20  eturn n;....    
a090: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
a0a0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
a0b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
a0c0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
a0d0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
a0e0: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  r());....      r
a0f0: 65 74 75 72 6e 20 6e 3b 20 2f 2f 20 57 65 20 72  eturn n; // We r
a100: 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73 63 68 65  eset OK, no sche
a110: 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20 20 20 20  ma changes..    
a120: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
a130: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
a140: 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  g GetLastError()
a150: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
a160: 20 72 65 74 75 72 6e 20 47 65 74 4c 61 73 74 45   return GetLastE
a170: 72 72 6f 72 28 6e 75 6c 6c 29 3b 0d 0a 20 20 20  rror(null);..   
a180: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
a190: 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
a1a0: 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  ng GetLastError(
a1b0: 73 74 72 69 6e 67 20 64 65 66 56 61 6c 75 65 29  string defValue)
a1c0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
a1d0: 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d   string result =
a1e0: 20 53 51 4c 69 74 65 42 61 73 65 2e 47 65 74 4c   SQLiteBase.GetL
a1f0: 61 73 74 45 72 72 6f 72 28 5f 73 71 6c 2c 20 5f  astError(_sql, _
a200: 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  sql);..        i
a210: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
a220: 4f 72 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29  OrEmpty(result))
a230: 20 72 65 73 75 6c 74 20 3d 20 64 65 66 56 61 6c   result = defVal
a240: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ue;..        ret
a250: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
a260: 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f  ////////////////
a2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a2d0: 20 23 72 65 67 69 6f 6e 20 51 75 65 72 79 20 44   #region Query D
a2e0: 69 61 67 6e 6f 73 74 69 63 73 20 53 75 70 70 6f  iagnostics Suppo
a2f0: 72 74 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  rt..#if !PLATFOR
a300: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
a310: 52 4b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  RK..    /// <sum
a320: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
a330: 68 69 73 20 66 69 65 6c 64 20 69 73 20 75 73 65  his field is use
a340: 64 20 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 20  d to keep track 
a350: 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
a360: 74 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 22  t the..    /// "
a370: 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c 6f 67 50  SQLite_ForceLogP
a380: 72 65 70 61 72 65 22 20 65 6e 76 69 72 6f 6e 6d  repare" environm
a390: 65 6e 74 20 76 61 72 69 61 62 6c 65 20 68 61 73  ent variable has
a3a0: 20 62 65 65 6e 20 71 75 65 72 69 65 64 2e 20 20   been queried.  
a3b0: 49 66 20 73 6f 2c 0d 0a 20 20 20 20 2f 2f 2f 20  If so,..    /// 
a3c0: 69 74 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20  it will only be 
a3d0: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
a3e0: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
a3f0: 61 62 6c 65 20 77 61 73 20 70 72 65 73 65 6e 74  able was present
a400: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
a410: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
a420: 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20  te static bool? 
a430: 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20  forceLogPrepare 
a440: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f  = null;....    /
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a4b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
a4c0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
a4d0: 65 72 6d 69 6e 65 73 20 69 66 20 61 6c 6c 20 63  ermines if all c
a4e0: 61 6c 6c 73 20 74 6f 20 70 72 65 70 61 72 65 20  alls to prepare 
a4f0: 61 20 53 51 4c 20 71 75 65 72 79 20 77 69 6c 6c  a SQL query will
a500: 20 62 65 20 6c 6f 67 67 65 64 2c 0d 0a 20 20 20   be logged,..   
a510: 20 2f 2f 2f 20 72 65 67 61 72 64 6c 65 73 73 20   /// regardless 
a520: 6f 66 20 74 68 65 20 66 6c 61 67 73 20 66 6f 72  of the flags for
a530: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
a540: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
a550: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
a560: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
a570: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  s>..    /// Non-
a580: 7a 65 72 6f 20 74 6f 20 6c 6f 67 20 61 6c 6c 20  zero to log all 
a590: 63 61 6c 6c 73 20 74 6f 20 70 72 65 70 61 72 65  calls to prepare
a5a0: 20 61 20 53 51 4c 20 71 75 65 72 79 2e 0d 0a 20   a SQL query... 
a5b0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
a5c0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  >..    private s
a5d0: 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 63 65  tatic bool Force
a5e0: 4c 6f 67 50 72 65 70 61 72 65 28 29 0d 0a 20 20  LogPrepare()..  
a5f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63    {..        loc
a600: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20  k (syncRoot)..  
a610: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a620: 20 20 20 20 20 69 66 20 28 66 6f 72 63 65 4c 6f       if (forceLo
a630: 67 50 72 65 70 61 72 65 20 3d 3d 20 6e 75 6c 6c  gPrepare == null
a640: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
a650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a660: 20 20 69 66 20 28 55 6e 73 61 66 65 4e 61 74 69    if (UnsafeNati
a670: 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 53 65 74  veMethods.GetSet
a680: 74 69 6e 67 56 61 6c 75 65 28 0d 0a 20 20 20 20  tingValue(..    
a690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6a0: 20 20 20 20 22 53 51 4c 69 74 65 5f 46 6f 72 63      "SQLite_Forc
a6b0: 65 4c 6f 67 50 72 65 70 61 72 65 22 2c 20 6e 75  eLogPrepare", nu
a6c0: 6c 6c 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ll) != null)..  
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
a6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a6f0: 20 20 20 20 20 66 6f 72 63 65 4c 6f 67 50 72 65       forceLogPre
a700: 70 61 72 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20  pare = true;..  
a710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
a720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a730: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
a740: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
a760: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 20  rceLogPrepare = 
a770: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
a780: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a790: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a7a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
a7b0: 62 6f 6f 6c 29 66 6f 72 63 65 4c 6f 67 50 72 65  bool)forceLogPre
a7c0: 70 61 72 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  pare;..        }
a7d0: 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
a7e0: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
a7f0: 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
a850: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
a860: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
a870: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
a880: 50 72 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f  Prepare(SQLiteCo
a890: 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74  nnection cnn, st
a8a0: 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c  ring strSql, SQL
a8b0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65  iteStatement pre
a8c0: 76 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65  vious, uint time
a8d0: 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72 69 6e  outMS, ref strin
a8e0: 67 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20  g strRemain)..  
a8f0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21    {..      if (!
a900: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
a910: 6d 70 74 79 28 73 74 72 53 71 6c 29 29 20 73 74  mpty(strSql)) st
a920: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 54 72  rSql = strSql.Tr
a930: 69 6d 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  im();..      if 
a940: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
a950: 72 45 6d 70 74 79 28 73 74 72 53 71 6c 29 29 0d  rEmpty(strSql)).
a960: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
a970: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
a980: 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65 20 64 6f   NOTE: SQLite do
a990: 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74  es not support t
a9a0: 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20 73 65  he concept of se
a9b0: 70 61 72 61 74 65 20 73 63 68 65 6d 61 73 0d 0a  parate schemas..
a9c0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
a9d0: 20 69 6e 20 6f 6e 65 20 64 61 74 61 62 61 73 65   in one database
a9e0: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 6d  ; therefore, rem
a9f0: 6f 76 65 20 74 68 65 20 62 61 73 65 20 73 63 68  ove the base sch
aa00: 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ema name..      
aa10: 20 20 2f 2f 20 20 20 20 20 20 20 75 73 65 64 20    //       used 
aa20: 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72  to smooth integr
aa30: 61 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 62  ation with the b
aa40: 61 73 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ase .NET Framewo
aa50: 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  rk..        //  
aa60: 20 20 20 20 20 64 61 74 61 20 63 6c 61 73 73 65       data classe
aa70: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  s...        //..
aa80: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 62          string b
aa90: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20  aseSchemaName = 
aaa0: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
aab0: 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e  cnn._baseSchemaN
aac0: 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ame : null;.... 
aad0: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
aae0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
aaf0: 28 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29  (baseSchemaName)
ab00: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
ab10: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
ab20: 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28   strSql.Replace(
ab30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ab40: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
ab50: 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75  ringFormat(Cultu
ab60: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
ab70: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
ab80: 20 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22          "[{0}]."
ab90: 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  , baseSchemaName
aba0: 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29  ), String.Empty)
abb0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ;....          s
abc0: 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52  trSql = strSql.R
abd0: 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20  eplace(..       
abe0: 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74         HelperMet
abf0: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
ac00: 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
ac10: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d  variantCulture,.
ac20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
ac30: 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d  {0}.", baseSchem
ac40: 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45  aName), String.E
ac50: 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  mpty);..        
ac60: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
ac70: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
ac80: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 20  tionFlags flags 
ac90: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28 63 6e  =..          (cn
aca0: 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e  n != null) ? cnn
acb0: 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74 65 43  .Flags : SQLiteC
acc0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
acd0: 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20  efault;....     
ace0: 20 69 66 20 28 0d 0a 23 69 66 20 21 50 4c 41 54   if (..#if !PLAT
acf0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
ad00: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
ad10: 20 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65   ForceLogPrepare
ad20: 28 29 20 7c 7c 0d 0a 23 65 6e 64 69 66 0d 0a 20  () ||..#endif.. 
ad30: 20 20 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d           HelperM
ad40: 65 74 68 6f 64 73 2e 4c 6f 67 50 72 65 70 61 72  ethods.LogPrepar
ad50: 65 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20  e(flags))..     
ad60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
ad70: 20 28 28 73 74 72 53 71 6c 20 3d 3d 20 6e 75 6c   ((strSql == nul
ad80: 6c 29 20 7c 7c 20 28 73 74 72 53 71 6c 2e 4c 65  l) || (strSql.Le
ad90: 6e 67 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 73  ngth == 0) || (s
ada0: 74 72 53 71 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e  trSql.Trim().Len
adb0: 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20  gth == 0))..    
adc0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
add0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 22  Log.LogMessage("
ade0: 50 72 65 70 61 72 69 6e 67 20 7b 3c 6e 6f 74 68  Preparing {<noth
adf0: 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20  ing>}...");..   
ae00: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
ae10: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
ae20: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
ae30: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
ae40: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
ae50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
ae60: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
ae70: 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 72 65 70  ntCulture, "Prep
ae80: 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e  aring {{{0}}}...
ae90: 22 2c 20 73 74 72 53 71 6c 29 29 3b 0d 0a 20 20  ", strSql));..  
aea0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 49      }....      I
aeb0: 6e 74 50 74 72 20 73 74 6d 74 20 3d 20 49 6e 74  ntPtr stmt = Int
aec0: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
aed0: 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 49 6e   IntPtr ptr = In
aee0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
aef0: 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
af00: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
af10: 72 43 6f 64 65 20 6e 20 3d 20 53 51 4c 69 74 65  rCode n = SQLite
af20: 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61  ErrorCode.Schema
af30: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 65 74  ;..      int ret
af40: 72 69 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ries = 0;..     
af50: 20 69 6e 74 20 6d 61 78 69 6d 75 6d 52 65 74 72   int maximumRetr
af60: 69 65 73 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75  ies = (cnn != nu
af70: 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 70 72 65 70 61  ll) ? cnn._prepa
af80: 72 65 52 65 74 72 69 65 73 20 3a 20 53 51 4c 69  reRetries : SQLi
af90: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 44 65 66  teConnection.Def
afa0: 61 75 6c 74 50 72 65 70 61 72 65 52 65 74 72 69  aultPrepareRetri
afb0: 65 73 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b  es;..      byte[
afc0: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 73 74 72  ] b = ToUTF8(str
afd0: 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 73 74 72  Sql);..      str
afe0: 69 6e 67 20 74 79 70 65 64 65 66 73 20 3d 20 6e  ing typedefs = n
aff0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  ull;..      SQLi
b000: 74 65 53 74 61 74 65 6d 65 6e 74 20 63 6d 64 20  teStatement cmd 
b010: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 52  = null;..      R
b020: 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c  andom rnd = null
b030: 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74  ;..      uint st
b040: 61 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29  arttick = (uint)
b050: 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b  Environment.Tick
b060: 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  Count;....      
b070: 52 65 73 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74  ResetCancelCount
b080: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 47 43 48  ();....      GCH
b090: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 47  andle handle = G
b0a0: 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c  CHandle.Alloc(b,
b0b0: 20 47 43 48 61 6e 64 6c 65 54 79 70 65 2e 50 69   GCHandleType.Pi
b0c0: 6e 6e 65 64 29 3b 0d 0a 20 20 20 20 20 20 49 6e  nned);..      In
b0d0: 74 50 74 72 20 70 73 71 6c 20 3d 20 68 61 6e 64  tPtr psql = hand
b0e0: 6c 65 2e 41 64 64 72 4f 66 50 69 6e 6e 65 64 4f  le.AddrOfPinnedO
b0f0: 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20  bject();..      
b100: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
b110: 61 6e 64 6c 65 20 73 74 61 74 65 6d 65 6e 74 48  andle statementH
b120: 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  andle = null;.. 
b130: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
b140: 7b 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  {..        while
b150: 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((n == SQLiteEr
b160: 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 20 7c  rorCode.Schema |
b170: 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | n == SQLiteErr
b180: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
b190: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
b1a0: 72 43 6f 64 65 2e 42 75 73 79 29 20 26 26 20 72  rCode.Busy) && r
b1b0: 65 74 72 69 65 73 20 3c 20 6d 61 78 69 6d 75 6d  etries < maximum
b1c0: 52 65 74 72 69 65 73 29 0d 0a 20 20 20 20 20 20  Retries)..      
b1d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74    {..          t
b1e0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ry..          {.
b1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
b200: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
b210: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b220: 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e      finally /* N
b230: 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72  OTE: Thread.Abor
b240: 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20  t() protection. 
b250: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  */..          {.
b260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d  .            stm
b270: 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  t = IntPtr.Zero;
b280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 74  ..            pt
b290: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
b2a0: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
b2b0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
b2c0: 20 20 20 20 20 20 6c 65 6e 20 3d 20 30 3b 0d 0a        len = 0;..
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
b2e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b2f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70  ods.sqlite3_prep
b300: 61 72 65 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  are_interop(_sql
b310: 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68  , psql, b.Length
b320: 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20   - 1, ref stmt, 
b330: 72 65 66 20 70 74 72 2c 20 72 65 66 20 6c 65 6e  ref ptr, ref len
b340: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23 69 66 20 55  );..#else..#if U
b350: 53 45 5f 50 52 45 50 41 52 45 5f 56 32 0d 0a 20  SE_PREPARE_V2.. 
b360: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
b370: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
b380: 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ds.sqlite3_prepa
b390: 72 65 5f 76 32 28 5f 73 71 6c 2c 20 70 73 71 6c  re_v2(_sql, psql
b3a0: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
b3b0: 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74  ref stmt, ref pt
b3c0: 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  r);..#else..    
b3d0: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
b3e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b3f0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
b400: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
b410: 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20 73 74  ngth - 1, ref st
b420: 6d 74 2c 20 72 65 66 20 70 74 72 29 3b 0d 0a 23  mt, ref ptr);..#
b430: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
b440: 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65     len = -1;..#e
b450: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21 4e 45 54  ndif....#if !NET
b460: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
b470: 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 0d 0a  RACE_STATEMENT..
b480: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
b490: 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70  e.WriteLine(Help
b4a0: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
b4b0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
b4c0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
b4d0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
b4e0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
b4f0: 20 20 20 20 20 20 22 50 72 65 70 61 72 65 20 28        "Prepare (
b500: 7b 30 7d 29 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73  {0}): {1}", n, s
b510: 74 6d 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  tmt));..#endif..
b520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
b530: 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72   ((n == SQLiteEr
b540: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28  rorCode.Ok) && (
b550: 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e 5a  stmt != IntPtr.Z
b560: 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ero))..         
b570: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b580: 20 20 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e      if (statemen
b590: 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29  tHandle != null)
b5a0: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
b5b0: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
b5c0: 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
b5d0: 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 65 77  mentHandle = new
b5e0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
b5f0: 48 61 6e 64 6c 65 28 5f 73 71 6c 2c 20 73 74 6d  Handle(_sql, stm
b600: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
b610: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
b620: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
b630: 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  (statementHandle
b640: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
b650: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b660: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
b670: 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e  tion.OnChanged(n
b680: 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74  ull, new Connect
b690: 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20  ionEventArgs(.. 
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
b6b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  iteConnectionEve
b6c0: 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63  ntType.NewCritic
b6d0: 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20  alHandle, null, 
b6e0: 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
b6f0: 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c       null, null,
b700: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
b710: 2c 20 73 74 72 53 71 6c 2c 20 6e 65 77 20 6f 62  , strSql, new ob
b720: 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ject[] {..      
b730: 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53          typeof(S
b740: 51 4c 69 74 65 33 29 2c 20 63 6e 6e 2c 20 73 74  QLite3), cnn, st
b750: 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20  rSql, previous, 
b760: 74 69 6d 65 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a  timeoutMS }));..
b770: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b780: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 68 6f           if (Sho
b790: 75 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65  uldThrowForCance
b7a0: 6c 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  l())..          
b7b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b7c0: 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74   if ((n == SQLit
b7d0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c  eErrorCode.Ok) |
b7e0: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
b7f0: 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74       (n == SQLit
b800: 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20  eErrorCode.Row) 
b810: 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
b820: 20 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69        (n == SQLi
b830: 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65  teErrorCode.Done
b840: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
b850: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b860: 20 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69 74         n = SQLit
b870: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
b880: 72 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rupt;..         
b890: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b8a0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
b8b0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
b8c0: 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  n(n, null);..   
b8d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b8e0: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
b8f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49  QLiteErrorCode.I
b900: 6e 74 65 72 72 75 70 74 29 0d 0a 20 20 20 20 20  nterrupt)..     
b910: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
b920: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
b930: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
b940: 6f 72 43 6f 64 65 2e 53 63 68 65 6d 61 29 0d 0a  orCode.Schema)..
b950: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 72              retr
b960: 69 65 73 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ies++;..        
b970: 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
b980: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
b990: 45 72 72 6f 72 29 0d 0a 20 20 20 20 20 20 20 20  Error)..        
b9a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b9b0: 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70   if (String.Comp
b9c0: 61 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72  are(GetLastError
b9d0: 28 29 2c 20 22 6e 65 61 72 20 5c 22 54 59 50 45  (), "near \"TYPE
b9e0: 53 5c 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f  S\": syntax erro
b9f0: 72 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  r", StringCompar
ba00: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
ba10: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
ba20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
ba40: 70 6f 73 20 3d 20 73 74 72 53 71 6c 2e 49 6e 64  pos = strSql.Ind
ba50: 65 78 4f 66 28 27 3b 27 29 3b 0d 0a 20 20 20 20  exOf(';');..    
ba60: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6f            if (po
ba70: 73 20 3d 3d 20 2d 31 29 20 70 6f 73 20 3d 20 73  s == -1) pos = s
ba80: 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 31  trSql.Length - 1
ba90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
baa0: 20 20 20 74 79 70 65 64 65 66 73 20 3d 20 73 74     typedefs = st
bab0: 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 30  rSql.Substring(0
bac0: 2c 20 70 6f 73 20 2b 20 31 29 3b 0d 0a 20 20 20  , pos + 1);..   
bad0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71             strSq
bae0: 6c 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74  l = strSql.Subst
baf0: 72 69 6e 67 28 70 6f 73 20 2b 20 31 29 3b 0d 0a  ring(pos + 1);..
bb00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bb10: 73 74 72 52 65 6d 61 69 6e 20 3d 20 53 74 72 69  strRemain = Stri
bb20: 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20  ng.Empty;....   
bb30: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
bb40: 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c 20 26 26   (cmd == null &&
bb50: 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68 20 3e   strSql.Length >
bb60: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
bb70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bb80: 20 20 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70        cmd = Prep
bb90: 61 72 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c  are(cnn, strSql,
bba0: 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f   previous, timeo
bbb0: 75 74 4d 53 2c 20 72 65 66 20 73 74 72 52 65 6d  utMS, ref strRem
bbc0: 61 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ain);..         
bbd0: 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20         strSql = 
bbe0: 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20  strRemain;..    
bbf0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
bc10: 28 63 6d 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  (cmd != null).. 
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
bc30: 6d 64 2e 53 65 74 54 79 70 65 73 28 74 79 70 65  md.SetTypes(type
bc40: 64 65 66 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  defs);....      
bc50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
bc60: 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  md;..           
bc70: 20 7d 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35 20   }..#if (NET_35 
bc80: 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54  || NET_40 || NET
bc90: 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 20 7c  _45 || NET_451 |
bca0: 7c 20 4e 45 54 5f 34 35 32 20 7c 7c 20 4e 45 54  | NET_452 || NET
bcb0: 5f 34 36 20 7c 7c 20 4e 45 54 5f 34 36 31 20 7c  _46 || NET_461 |
bcc0: 7c 20 4e 45 54 5f 34 36 32 20 7c 7c 20 4e 45 54  | NET_462 || NET
bcd0: 5f 34 37 20 7c 7c 20 4e 45 54 5f 34 37 31 20 7c  _47 || NET_471 |
bce0: 7c 20 4e 45 54 5f 34 37 32 29 20 26 26 20 21 50  | NET_472) && !P
bcf0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
bd00: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
bd10: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
bd20: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
bd30: 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e  = false && Strin
bd40: 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73  g.Compare(GetLas
bd50: 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22 6e 6f  tError(), 0, "no
bd60: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54 45 4d   such table: TEM
bd70: 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20 32 36  P.SCHEMA", 0, 26
bd80: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
bd90: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
bda0: 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20  Case) == 0)..   
bdb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
bdc0: 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65 6d            strRem
bdd0: 61 69 6e 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70  ain = String.Emp
bde0: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
bdf0: 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65     _buildingSche
be00: 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ma = true;..    
be10: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be40: 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74  ISQLiteSchemaExt
be50: 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28 28  ensions ext = ((
be60: 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65 72  IServiceProvider
be70: 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e 49  )SQLiteFactory.I
be80: 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72 76  nstance).GetServ
be90: 69 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c 69  ice(typeof(ISQLi
bea0: 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f  teSchemaExtensio
beb0: 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74 65 53  ns)) as ISQLiteS
bec0: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 3b  chemaExtensions;
bed0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bee0: 20 20 20 20 69 66 20 28 65 78 74 20 21 3d 20 6e      if (ext != n
bef0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
bf00: 20 20 20 20 20 20 20 20 65 78 74 2e 42 75 69 6c          ext.Buil
bf10: 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e 29  dTempSchema(cnn)
bf20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
bf30: 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20       while (cmd 
bf40: 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71  == null && strSq
bf50: 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20  l.Length > 0).. 
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
bf70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bf80: 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72      cmd = Prepar
bf90: 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70  e(cnn, strSql, p
bfa0: 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74  revious, timeout
bfb0: 4d 53 2c 20 72 65 66 20 73 74 72 52 65 6d 61 69  MS, ref strRemai
bfc0: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
bfd0: 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20         strSql = 
bfe0: 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20  strRemain;..    
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
c000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c010: 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20   return cmd;..  
c020: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c030: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e               fin
c040: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
c050: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c060: 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67         _building
c070: 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b 0d  Schema = false;.
c080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
c090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
c0a0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
c0b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
c0c0: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
c0d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
c0e0: 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c  cked || n == SQL
c0f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
c100: 79 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20  y) // Locked -- 
c110: 64 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61 6d  delay a small am
c120: 6f 75 6e 74 20 62 65 66 6f 72 65 20 72 65 74 72  ount before retr
c130: 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ying..          
c140: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
c150: 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20  / Keep trying.. 
c160: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
c170: 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46  nd == null) // F
c180: 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20  irst time we've 
c190: 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20  encountered the 
c1a0: 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  lock..          
c1b0: 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61      rnd = new Ra
c1c0: 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndom();....     
c1d0: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
c1e0: 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20  ve exceeded the 
c1f0: 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75  command's timeou
c200: 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74  t, give up and t
c210: 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20  hrow an error.. 
c220: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
c230: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
c240: 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61  .TickCount - sta
c250: 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74  rttick > timeout
c260: 4d 53 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  MS)..           
c270: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c280: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
c290: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
c2a0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
c2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
c2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
c2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
c2f0: 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65  / Otherwise slee
c300: 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61  p for a random a
c310: 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70  mount of time up
c320: 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20   to 150ms..     
c330: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
c340: 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64  Threading.Thread
c350: 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28  .Sleep(rnd.Next(
c360: 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20  1, 150));..     
c370: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c380: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
c390: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
c3a0: 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72 43 61  ShouldThrowForCa
c3b0: 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20 20 20  ncel())..       
c3c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c3d0: 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65  if ((n == SQLite
c3e0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c  ErrorCode.Ok) ||
c3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c400: 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72    (n == SQLiteEr
c410: 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d  rorCode.Row) ||.
c420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c430: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
c440: 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a 20  orCode.Done)).. 
c450: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 20                n 
c470: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
c480: 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20  e.Interrupt;..  
c490: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
c4a0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
c4b0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
c4c0: 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a  tion(n, null);..
c4d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c4e0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
c4f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e  LiteErrorCode.In
c500: 74 65 72 72 75 70 74 29 20 72 65 74 75 72 6e 20  terrupt) return 
c510: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69  null;..        i
c520: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
c530: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
c540: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
c550: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
c560: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
c570: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
c580: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74   UTF8ToString(pt
c590: 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20  r, len);....    
c5a0: 20 20 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e      if (statemen
c5b0: 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29  tHandle != null)
c5c0: 20 63 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69 74   cmd = new SQLit
c5d0: 65 53 74 61 74 65 6d 65 6e 74 28 74 68 69 73 2c  eStatement(this,
c5e0: 20 66 6c 61 67 73 2c 20 73 74 61 74 65 6d 65 6e   flags, statemen
c5f0: 74 48 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2e  tHandle, strSql.
c600: 53 75 62 73 74 72 69 6e 67 28 30 2c 20 73 74 72  Substring(0, str
c610: 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74 72  Sql.Length - str
c620: 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c 20  Remain.Length), 
c630: 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20  previous);....  
c640: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64        return cmd
c650: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
c660: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
c670: 20 7b 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64   {..        hand
c680: 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20 20  le.Free();..    
c690: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
c6a0: 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74    protected stat
c6b0: 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28  ic void LogBind(
c6c0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
c6d0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e  andle handle, in
c6e0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
c6f0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
c700: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
c710: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
c720: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
c730: 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74  essage(HelperMet
c740: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
c750: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
c760: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
c770: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
c780: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
c790: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
c7a0: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
c7b0: 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20   NULL...",..    
c7c0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
c7d0: 74 50 74 72 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  tPtr, index));..
c7e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
c7f0: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
c800: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
c810: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
c820: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
c830: 65 78 2c 20 56 61 6c 75 65 54 79 70 65 20 76 61  ex, ValueType va
c840: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
c850: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
c860: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
c870: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
c880: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
c890: 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
c8a0: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
c8c0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
c8d0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
c8e0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
c8f0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
c900: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
c910: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
c920: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
c930: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
c940: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
c950: 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 2c  value.GetType(),
c960: 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d   value));..    }
c970: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
c980: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f  static string Fo
c990: 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44 61 74  rmatDateTime(Dat
c9a0: 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20  eTime value)..  
c9b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74 72    {..        Str
c9c0: 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c  ingBuilder resul
c9d0: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  t = new StringBu
c9e0: 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  ilder();....    
c9f0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
ca00: 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67  d(value.ToString
ca10: 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a  ("yyyy-MM-ddTHH:
ca20: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 29  mm:ss.FFFFFFFK")
ca30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
ca40: 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d  lt.Append(' ');.
ca50: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
ca60: 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b 69 6e  Append(value.Kin
ca70: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  d);..        res
ca80: 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b  ult.Append(' ');
ca90: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
caa0: 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 69  .Append(value.Ti
cab0: 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  cks);....       
cac0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
cad0: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
cae0: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
caf0: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
cb00: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
cb10: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
cb20: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
cb30: 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d  DateTime value).
cb40: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
cb50: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
cb60: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
cb70: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
cb80: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65  og.LogMessage(He
cb90: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
cba0: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
cbb0: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
cbc0: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
cbd0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
cbe0: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
cbf0: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
cc00: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
cc10: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
cc20: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
cc30: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
cc40: 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f  tr, index, typeo
cc50: 66 28 44 61 74 65 54 69 6d 65 29 2c 20 46 6f 72  f(DateTime), For
cc60: 6d 61 74 44 61 74 65 54 69 6d 65 28 76 61 6c 75  matDateTime(valu
cc70: 65 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  e)));..    }....
cc80: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
cc90: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
cca0: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
ccb0: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
ccc0: 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e  int index, strin
ccd0: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
cce0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
ccf0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
cd00: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
cd10: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
cd20: 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74  essage(HelperMet
cd30: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
cd40: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
cd50: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
cd60: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
cd70: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
cd80: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
cd90: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
cda0: 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76   type {2} with v
cdb0: 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22  alue {{{3}}}..."
cdc0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
cdd0: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
cde0: 65 78 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e  ex, typeof(Strin
cdf0: 67 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75  g), (value != nu
ce00: 6c 6c 29 20 3f 20 76 61 6c 75 65 20 3a 20 22 3c  ll) ? value : "<
ce10: 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d  null>"));..    }
ce20: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
ce30: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 6f  static string To
ce40: 48 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e  HexadecimalStrin
ce50: 67 28 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65  g(..        byte
ce60: 5b 5d 20 61 72 72 61 79 0d 0a 20 20 20 20 20 20  [] array..      
ce70: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
ce80: 20 20 20 20 69 66 20 28 61 72 72 61 79 20 3d 3d      if (array ==
ce90: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
cea0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
ceb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69  ....        Stri
cec0: 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74  ngBuilder result
ced0: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
cee0: 6c 64 65 72 28 61 72 72 61 79 2e 4c 65 6e 67 74  lder(array.Lengt
cef0: 68 20 2a 20 32 29 3b 0d 0a 0d 0a 20 20 20 20 20  h * 2);....     
cf00: 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20     int length = 
cf10: 61 72 72 61 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d  array.Length;...
cf20: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e  .        for (in
cf30: 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
cf40: 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64  ex < length; ind
cf50: 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
cf60: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
cf70: 28 61 72 72 61 79 5b 69 6e 64 65 78 5d 2e 54 6f  (array[index].To
cf80: 53 74 72 69 6e 67 28 22 78 32 22 29 29 3b 0d 0a  String("x2"));..
cf90: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
cfa0: 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67   result.ToString
cfb0: 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ();..    }....  
cfc0: 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74    protected stat
cfd0: 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28  ic void LogBind(
cfe0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
cff0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e  andle handle, in
d000: 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20  t index, byte[] 
d010: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
d020: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
d030: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
d040: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
d050: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
d060: 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  sage(HelperMetho
d070: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
d080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 75  ..            Cu
d090: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
d0a0: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
d0b0: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
d0c0: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
d0d0: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
d0e0: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
d0f0: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
d100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
d110: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
d120: 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29  , typeof(Byte[])
d130: 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c  , (value != null
d140: 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ) ? ToHexadecima
d150: 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a  lString(value) :
d160: 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20   "<null>"));..  
d170: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
d180: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
d190: 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51  d Bind_Double(SQ
d1a0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
d1b0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
d1c0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
d1d0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62   int index, doub
d1e0: 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  le value)..    {
d1f0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d200: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
d210: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
d220: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
d230: 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65         if (Helpe
d240: 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64  rMethods.LogBind
d250: 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  (flags))..      
d260: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d270: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
d280: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
d290: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69  .        }....#i
d2a0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
d2b0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
d2c0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
d2d0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
d2e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d2f0: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
d300: 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  e(handle, index,
d310: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
d320: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
d330: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
d340: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
d350: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
d360: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65  astError());..#e
d370: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
d380: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51  DARD..        SQ
d390: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
d3a0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
d3b0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
d3c0: 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  nd_double_intero
d3d0: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
d3e0: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
d3f0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
d400: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
d410: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
d420: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
d430: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
d440: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
d450: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
d460: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
d470: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
d480: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
d490: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
d4a0: 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53 51  id Bind_Int32(SQ
d4b0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
d4c0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
d4d0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
d4e0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
d4f0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
d500: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
d510: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
d520: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
d530: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20  te_stmt;....    
d540: 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65      if (HelperMe
d550: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
d560: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ags))..        {
d570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
d580: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
d590: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
d5a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d5b0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
d5c0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
d5d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d5e0: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64  e3_bind_int(hand
d5f0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
d600: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
d610: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
d620: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
d630: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
d640: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
d650: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
d660: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d670: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
d680: 5f 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  _UInt32(SQLiteSt
d690: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
d6a0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
d6b0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
d6c0: 6e 64 65 78 2c 20 75 69 6e 74 20 76 61 6c 75 65  ndex, uint value
d6d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d6e0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
d6f0: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
d700: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
d710: 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  mt;....        i
d720: 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  f (HelperMethods
d730: 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29  .LogBind(flags))
d740: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
d750: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
d760: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
d770: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
d780: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51   }....        SQ
d790: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b  LiteErrorCode n;
d7a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
d7b0: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
d7c0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42  onnectionFlags.B
d7d0: 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36 34  indUInt32AsInt64
d7e0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
d7f0: 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 55  ctionFlags.BindU
d800: 49 6e 74 33 32 41 73 49 6e 74 36 34 29 0d 0a 20  Int32AsInt64).. 
d810: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d820: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
d830: 32 20 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 23 69  2 = value;....#i
d840: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
d850: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
d860: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
d870: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d880: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
d890: 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64  nt64(handle, ind
d8a0: 65 78 2c 20 76 61 6c 75 65 32 29 3b 0d 0a 23 65  ex, value2);..#e
d8b0: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
d8c0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
d8d0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
d8e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
d8f0: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74  3_bind_int64_int
d900: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
d910: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 32 29 3b  ex, ref value2);
d920: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
d930: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
d940: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
d950: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
d960: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  f..        }..  
d970: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
d980: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d990: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
d9a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
d9b0: 65 33 5f 62 69 6e 64 5f 75 69 6e 74 28 68 61 6e  e3_bind_uint(han
d9c0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
d9d0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
d9e0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
d9f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
da00: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
da10: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
da20: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
da30: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
da40: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
da50: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74  de void Bind_Int
da60: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
da70: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
da80: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
da90: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
daa0: 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20   long value)..  
dab0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
dac0: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
dad0: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
dae0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
daf0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 48 65  ..        if (He
db00: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42  lperMethods.LogB
db10: 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20  ind(flags))..   
db20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
db30: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
db40: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
db50: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
db60: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
db70: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
db80: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
db90: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
dba0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
dbb0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
dbc0: 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  t64(handle, inde
dbd0: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
dbe0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
dbf0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
dc00: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
dc10: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
dc20: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
dc30: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
dc40: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
dc50: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
dc60: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
dc70: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
dc80: 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72  bind_int64_inter
dc90: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
dca0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20  , ref value);.. 
dcb0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
dcc0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
dcd0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
dce0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
dcf0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
dd00: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
dd10: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
dd20: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
dd30: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
dd40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
dd50: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
dd60: 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34 28  oid Bind_UInt64(
dd70: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
dd80: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
dd90: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
dda0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 6c  s, int index, ul
ddb0: 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ong value)..    
ddc0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
ddd0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
dde0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
ddf0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
de00: 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70          if (Help
de10: 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e  erMethods.LogBin
de20: 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20  d(flags))..     
de30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
de40: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
de50: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
de60: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23  ..        }....#
de70: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
de80: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
de90: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
dea0: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
deb0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
dec0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74  qlite3_bind_uint
ded0: 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  64(handle, index
dee0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
def0: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
df00: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
df10: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
df20: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
df30: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
df40: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
df50: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53  NDARD..        S
df60: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
df70: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
df80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
df90: 69 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72  ind_uint64_inter
dfa0: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
dfb0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20  , ref value);.. 
dfc0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
dfd0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
dfe0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
dff0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
e000: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
e010: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
e020: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
e030: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
e040: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
e050: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
e060: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
e070: 6f 69 64 20 42 69 6e 64 5f 42 6f 6f 6c 65 61 6e  oid Bind_Boolean
e080: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
e090: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
e0a0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
e0b0: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62  gs, int index, b
e0c0: 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ool value)..    
e0d0: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
e0e0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
e0f0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
e100: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
e110: 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70          if (Help
e120: 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e  erMethods.LogBin
e130: 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20  d(flags))..     
e140: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e150: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
e160: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
e170: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
e180: 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c 75 65         int value
e190: 32 20 3d 20 76 61 6c 75 65 20 3f 20 31 20 3a 20  2 = value ? 1 : 
e1a0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  0;....        SQ
e1b0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
e1c0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
e1d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
e1e0: 6e 64 5f 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69  nd_int(handle, i
e1f0: 6e 64 65 78 2c 20 76 61 6c 75 65 32 29 3b 0d 0a  ndex, value2);..
e200: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
e210: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
e220: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
e230: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
e240: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
e250: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
e260: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
e270: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 54 65 78  de void Bind_Tex
e280: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
e290: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
e2a0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
e2b0: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
e2c0: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
e2d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
e2e0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
e2f0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
e300: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
e310: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 48  ...        if (H
e320: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67  elperMethods.Log
e330: 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20  Bind(flags))..  
e340: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e350: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
e360: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
e370: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
e380: 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d  ..        byte[]
e390: 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75   b = ToUTF8(valu
e3a0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  e);....        i
e3b0: 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  f (HelperMethods
e3c0: 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29  .LogBind(flags))
e3d0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e3e0: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
e3f0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
e400: 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  b);..        }..
e410: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
e420: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
e430: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e440: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  s.sqlite3_bind_t
e450: 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ext(handle, inde
e460: 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  x, b, b.Length -
e470: 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29   1, (IntPtr)(-1)
e480: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
e490: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
e4a0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
e4b0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
e4c0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
e4d0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
e4e0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
e4f0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
e500: 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65  _DateTime(SQLite
e510: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
e520: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e530: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
e540: 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65   index, DateTime
e550: 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20   dt)..    {..   
e560: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
e570: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
e580: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
e590: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
e5a0: 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68    if (HelperMeth
e5b0: 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67  ods.LogBind(flag
e5c0: 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  s))..        {..
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
e5e0: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
e5f0: 78 2c 20 64 74 29 3b 0d 0a 20 20 20 20 20 20 20  x, dt);..       
e600: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
e610: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
e620: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
e630: 2e 42 69 6e 64 44 61 74 65 54 69 6d 65 57 69 74  .BindDateTimeWit
e640: 68 4b 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  hKind) == SQLite
e650: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
e660: 42 69 6e 64 44 61 74 65 54 69 6d 65 57 69 74 68  BindDateTimeWith
e670: 4b 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Kind)..        {
e680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
e690: 20 28 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64   ((_datetimeKind
e6a0: 20 21 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64   != DateTimeKind
e6b0: 2e 55 6e 73 70 65 63 69 66 69 65 64 29 20 26 26  .Unspecified) &&
e6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e6d0: 20 20 28 64 74 2e 4b 69 6e 64 20 21 3d 20 44 61    (dt.Kind != Da
e6e0: 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65  teTimeKind.Unspe
e6f0: 63 69 66 69 65 64 29 20 26 26 0d 0a 20 20 20 20  cified) &&..    
e700: 20 20 20 20 20 20 20 20 20 20 20 20 28 64 74 2e              (dt.
e710: 4b 69 6e 64 20 21 3d 20 5f 64 61 74 65 74 69 6d  Kind != _datetim
e720: 65 4b 69 6e 64 29 29 0d 0a 20 20 20 20 20 20 20  eKind))..       
e730: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e740: 20 20 20 20 20 20 20 20 69 66 20 28 5f 64 61 74          if (_dat
e750: 65 74 69 6d 65 4b 69 6e 64 20 3d 3d 20 44 61 74  etimeKind == Dat
e760: 65 54 69 6d 65 4b 69 6e 64 2e 55 74 63 29 0d 0a  eTimeKind.Utc)..
e770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e780: 20 20 20 20 64 74 20 3d 20 64 74 2e 54 6f 55 6e      dt = dt.ToUn
e790: 69 76 65 72 73 61 6c 54 69 6d 65 28 29 3b 0d 0a  iversalTime();..
e7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7b0: 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69  else if (_dateti
e7c0: 6d 65 4b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69  meKind == DateTi
e7d0: 6d 65 4b 69 6e 64 2e 4c 6f 63 61 6c 29 0d 0a 20  meKind.Local).. 
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7f0: 20 20 20 64 74 20 3d 20 64 74 2e 54 6f 4c 6f 63     dt = dt.ToLoc
e800: 61 6c 54 69 6d 65 28 29 3b 0d 0a 20 20 20 20 20  alTime();..     
e810: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e820: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73    }....        s
e830: 77 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65  witch (_datetime
e840: 46 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20  Format)..       
e850: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e860: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
e870: 6f 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20  ormats.Ticks:.. 
e880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
e890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e8a0: 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65        long value
e8b0: 20 3d 20 64 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a   = dt.Ticks;....
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8d0: 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65      if (HelperMe
e8e0: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
e8f0: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ags))..         
e900: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e920: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
e930: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
e940: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
e950: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23            }....#
e960: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
e970: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
e980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e990: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
e9a0: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
e9b0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
e9c0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61  e3_bind_int64(ha
e9d0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
e9e0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
e9f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
ea00: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
ea10: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
ea20: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
ea30: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
ea40: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
ea50: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
ea60: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
ea70: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
ea90: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
eaa0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
eab0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
eac0: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
ead0: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
eae0: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ref value);..   
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb00: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
eb10: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
eb20: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
eb30: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
eb40: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb60: 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a   break;..#else..
eb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb80: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
eb90: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
eba0: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
ebb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ebc0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
ebd0: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
ebe0: 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61  Formats.JulianDa
ebf0: 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y:..            
ec00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ec10: 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c             doubl
ec20: 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69  e value = ToJuli
ec30: 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 20 20  anDay(dt);....  
ec40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec50: 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68    if (HelperMeth
ec60: 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67  ods.LogBind(flag
ec70: 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s))..           
ec80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eca0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
ecb0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
ecc0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
ecd0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66          }....#if
ece0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
ecf0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
ed00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed10: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
ed20: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
ed30: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ed40: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e  _bind_double(han
ed50: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
ed60: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
ed70: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
ed80: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
ed90: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
eda0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
edb0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
edc0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
edd0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
ede0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
edf0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
ee00: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
ee10: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
ee20: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ee30: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
ee40: 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  d_double_interop
ee50: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
ee60: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ref value);..   
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee80: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
ee90: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
eea0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
eeb0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
eec0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eee0: 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a   break;..#else..
eef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef00: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
ef10: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
ef20: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
ef30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ef40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
ef50: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
ef60: 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63  Formats.UnixEpoc
ef70: 68 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h:..            
ef80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ef90: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
efa0: 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e  value = Convert.
efb0: 54 6f 49 6e 74 36 34 28 64 74 2e 53 75 62 74 72  ToInt64(dt.Subtr
efc0: 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54  act(UnixEpoch).T
efd0: 6f 74 61 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d  otalSeconds);...
efe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eff0: 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d       if (HelperM
f000: 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66  ethods.LogBind(f
f010: 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  lags))..        
f020: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f040: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
f050: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
f060: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
f070: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
f080: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
f090: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0b0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
f0c0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
f0d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f0e0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68  te3_bind_int64(h
f0f0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
f100: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
f110: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
f120: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
f130: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
f140: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
f150: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
f160: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
f170: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
f180: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
f190: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
f1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
f1b0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
f1c0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
f1d0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
f1e0: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
f1f0: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
f200: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f220: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
f230: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
f240: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
f250: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
f260: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
f270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f280: 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d    break;..#else.
f290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f2a0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
f2b0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
f2c0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
f2d0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
f2e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
f2f0: 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
f300: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f320: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
f330: 55 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 20 20 20  UTF8(dt);....   
f340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f350: 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f   if (HelperMetho
f360: 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73  ds.LogBind(flags
f370: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
f380: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3a0: 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c     LogBind(handl
f3b0: 65 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20  e, index, b);.. 
f3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f3e0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
f3f0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
f400: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f410: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
f420: 5f 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e  _text(handle, in
f430: 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68  dex, b, b.Length
f440: 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d   - 1, (IntPtr)(-
f450: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  1));..          
f460: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
f470: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
f480: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
f490: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
f4a0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
f4b0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
f4c0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
f4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f4e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
f4f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
f500: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
f510: 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51  oid Bind_Blob(SQ
f520: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
f530: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
f540: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
f550: 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65   int index, byte
f560: 5b 5d 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20  [] blobData)..  
f570: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
f580: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
f590: 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74  le handle = stmt
f5a0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a  ._sqlite_stmt;..
f5b0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 48 65  ..        if (He
f5c0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42  lperMethods.LogB
f5d0: 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20  ind(flags))..   
f5e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f5f0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
f600: 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44  le, index, blobD
f610: 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ata);..        }
f620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
f630: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
f640: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
f650: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
f660: 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69 6e  _blob(handle, in
f670: 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20 62  dex, blobData, b
f680: 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c 20  lobData.Length, 
f690: 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
f6a0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
f6b0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f6c0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
f6d0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
f6e0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
f6f0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
f700: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
f710: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75 6c  de void Bind_Nul
f720: 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  l(SQLiteStatemen
f730: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
f740: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
f750: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  ags, int index).
f760: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
f770: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
f780: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73  andle handle = s
f790: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
f7a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
f7b0: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c  (HelperMethods.L
f7c0: 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a  ogBind(flags))..
f7d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f7e0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
f7f0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a  andle, index);..
f800: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
f810: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
f820: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
f830: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
f840: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 68  ite3_bind_null(h
f850: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a  andle, index);..
f860: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
f870: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f880: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
f890: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
f8a0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
f8b0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
f8c0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
f8d0: 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61  de int Bind_Para
f8e0: 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61  mCount(SQLiteSta
f8f0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
f900: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
f910: 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b  gs flags)..    {
f920: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
f930: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
f940: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
f950: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
f960: 20 20 20 20 20 69 6e 74 20 76 61 6c 75 65 20 3d       int value =
f970: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f980: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
f990: 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e  d_parameter_coun
f9a0: 74 28 68 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20  t(handle);....  
f9b0: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
f9c0: 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28  Methods.LogBind(
f9d0: 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  flags))..       
f9e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f9f0: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
fa00: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
fa10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
fa20: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
fa30: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
fa40: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
fa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
fa60: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
fa70: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
fa90: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
faa0: 74 65 72 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d  ter count is {1}
fab0: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
fac0: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
fad0: 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20  r, value));..   
fae0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
faf0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
fb00: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
fb10: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
fb20: 73 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61  string Bind_Para
fb30: 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  mName(SQLiteStat
fb40: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
fb50: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
fb60: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
fb70: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
fb80: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
fb90: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
fba0: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
fbb0: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 73  stmt;..        s
fbc0: 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23  tring name;....#
fbd0: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
fbe0: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ARD..        int
fbf0: 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
fc00: 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f     name = UTF8To
fc10: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
fc20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
fc30: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
fc40: 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 68  r_name_interop(h
fc50: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
fc60: 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  f len), len);..#
fc70: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6e 61  else..        na
fc80: 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  me = UTF8ToStrin
fc90: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
fca0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
fcb0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
fcc0: 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  e(handle, index)
fcd0: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
fce0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 48 65  ..        if (He
fcf0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42  lperMethods.LogB
fd00: 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20  ind(flags))..   
fd10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fd20: 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
fd30: 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65  eIntPtr = handle
fd40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fd50: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
fd60: 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74 68  ssage(HelperMeth
fd70: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
fd80: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
fd90: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
fda0: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdc0: 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70  "Statement {0} p
fdd0: 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 6e 61 6d  aramter #{1} nam
fde0: 65 20 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d  e is {{{2}}}.",.
fdf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fe00: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
fe10: 6e 64 65 78 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20  ndex, name));.. 
fe20: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
fe30: 20 20 20 20 72 65 74 75 72 6e 20 6e 61 6d 65 3b      return name;
fe40: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
fe50: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
fe60: 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 49   int Bind_ParamI
fe70: 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65  ndex(SQLiteState
fe80: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
fe90: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
fea0: 20 66 6c 61 67 73 2c 20 73 74 72 69 6e 67 20 70   flags, string p
feb0: 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  aramName)..    {
fec0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
fed0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
fee0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
fef0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20  qlite_stmt;..   
ff00: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d       int index =
ff10: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ff20: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
ff30: 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65  d_parameter_inde
ff40: 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55 54 46 38  x(handle, ToUTF8
ff50: 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d  (paramName));...
ff60: 0a 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c  .        if (Hel
ff70: 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69  perMethods.LogBi
ff80: 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20  nd(flags))..    
ff90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ffa0: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
ffb0: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
ffc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ffd0: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
ffe0: 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  sage(HelperMetho
fff0: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
10000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10010 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
10020 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10040 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  Statement {0} pa
10050 72 61 6d 74 65 72 20 69 6e 64 65 78 20 6f 66 20  ramter index of 
10060 6e 61 6d 65 20 7b 7b 7b 31 7d 7d 7d 20 69 73 20  name {{{1}}} is 
10070 23 7b 32 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20  #{2}.",..       
10080 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
10090 6e 74 50 74 72 2c 20 70 61 72 61 6d 4e 61 6d 65  ntPtr, paramName
100a0 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20  , index));..    
100b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
100c0 20 72 65 74 75 72 6e 20 69 6e 64 65 78 3b 0d 0a   return index;..
100d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
100e0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
100f0 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53  nt ColumnCount(S
10100 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
10110 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  tmt)..    {..   
10120 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
10130 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10140 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
10150 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  nt(stmt._sqlite_
10160 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  stmt);..    }...
10170 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
10180 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
10190 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c 69 74 65 53  lumnName(SQLiteS
101a0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
101b0 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
101c0 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
101d0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
101e0 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  t len = 0;..    
101f0 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73    IntPtr p = Uns
10200 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10210 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
10220 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  name_interop(stm
10230 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
10240 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b  index, ref len);
10250 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 49  ..#else..      I
10260 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65  ntPtr p = Unsafe
10270 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10280 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
10290 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
102a0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
102b0 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
102c0 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  p == IntPtr.Zero
102d0 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
102e0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
102f0 74 69 6f 6e 28 53 51 4c 69 74 65 45 72 72 6f 72  tion(SQLiteError
10300 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 20 47 65 74 4c  Code.NoMem, GetL
10310 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 69  astError());..#i
10320 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
10330 52 44 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  RD..      return
10340 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c   UTF8ToString(p,
10350 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
10360 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
10370 54 6f 53 74 72 69 6e 67 28 70 2c 20 2d 31 29 3b  ToString(p, -1);
10380 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
10390 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
103a0 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66 66  override TypeAff
103b0 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69  inity ColumnAffi
103c0 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61 74 65  nity(SQLiteState
103d0 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
103e0 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
103f0 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
10400 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10410 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79  qlite3_column_ty
10420 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  pe(stmt._sqlite_
10430 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
10440 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10450 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
10460 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28  ring ColumnType(
10470 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
10480 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
10490 20 72 65 66 20 54 79 70 65 41 66 66 69 6e 69 74   ref TypeAffinit
104a0 79 20 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20  y nAffinity)..  
104b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74    {..        int
104c0 20 6c 65 6e 3b 0d 0a 23 69 66 20 21 53 51 4c 49   len;..#if !SQLI
104d0 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
104e0 20 20 20 20 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20       len = 0;.. 
104f0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20         IntPtr p 
10500 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
10510 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
10520 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e  lumn_decltype_in
10530 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
10540 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
10550 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  ref len);..#else
10560 0d 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20  ..        len = 
10570 2d 31 3b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  -1;..        Int
10580 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61  Ptr p = UnsafeNa
10590 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
105a0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
105b0 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ype(stmt._sqlite
105c0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
105d0 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
105e0 6e 41 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c 75  nAffinity = Colu
105f0 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c  mnAffinity(stmt,
10600 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
10610 20 20 20 20 69 66 20 28 28 70 20 21 3d 20 49 6e      if ((p != In
10620 74 50 74 72 2e 5a 65 72 6f 29 20 26 26 20 28 28  tPtr.Zero) && ((
10630 6c 65 6e 20 3e 20 30 29 20 7c 7c 20 28 6c 65 6e  len > 0) || (len
10640 20 3d 3d 20 2d 31 29 29 29 0d 0a 20 20 20 20 20   == -1)))..     
10650 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10660 20 20 73 74 72 69 6e 67 20 64 65 63 6c 54 79 70    string declTyp
10670 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
10680 28 70 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20  (p, len);....   
10690 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
106a0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
106b0 74 79 28 64 65 63 6c 54 79 70 65 29 29 0d 0a 20  ty(declType)).. 
106c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
106d0 65 74 75 72 6e 20 64 65 63 6c 54 79 70 65 3b 0d  eturn declType;.
106e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
106f0 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
10700 72 20 3d 20 73 74 6d 74 2e 54 79 70 65 44 65 66  r = stmt.TypeDef
10710 69 6e 69 74 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20  initions;....   
10720 20 20 20 20 20 69 66 20 28 61 72 20 21 3d 20 6e       if (ar != n
10730 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
10740 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
10750 28 69 6e 64 65 78 20 3c 20 61 72 2e 4c 65 6e 67  (index < ar.Leng
10760 74 68 20 26 26 20 61 72 5b 69 6e 64 65 78 5d 20  th && ar[index] 
10770 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
10780 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10790 20 61 72 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20   ar[index];..   
107a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
107b0 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
107c0 45 6d 70 74 79 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Empty;..    }...
107d0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
107e0 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d  erride int Colum
107f0 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  nIndex(SQLiteSta
10800 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72  tement stmt, str
10810 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 0d  ing columnName).
10820 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
10830 74 20 78 20 3d 20 43 6f 6c 75 6d 6e 43 6f 75 6e  t x = ColumnCoun
10840 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20  t(stmt);....    
10850 20 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30    for (int n = 0
10860 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b 29 0d 0a 20  ; n < x; n++).. 
10870 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10880 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61  if (String.Compa
10890 72 65 28 63 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 43  re(columnName, C
108a0 6f 6c 75 6d 6e 4e 61 6d 65 28 73 74 6d 74 2c 20  olumnName(stmt, 
108b0 6e 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  n), StringCompar
108c0 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
108d0 72 65 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20  reCase) == 0).. 
108e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
108f0 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n;..      }..   
10900 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 20     return -1;.. 
10910 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10920 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
10930 72 69 6e 67 20 43 6f 6c 75 6d 6e 4f 72 69 67 69  ring ColumnOrigi
10940 6e 61 6c 4e 61 6d 65 28 53 51 4c 69 74 65 53 74  nalName(SQLiteSt
10950 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
10960 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
10970 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
10980 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
10990 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
109a0 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
109b0 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
109c0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
109d0 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
109e0 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ame_interop(stmt
109f0 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
10a00 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20  ndex, ref len), 
10a10 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
10a20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
10a30 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
10a40 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10a50 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
10a60 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c  n_name(stmt._sql
10a70 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
10a80 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
10a90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
10aa0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
10ab0 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74 61  tring ColumnData
10ac0 62 61 73 65 4e 61 6d 65 28 53 51 4c 69 74 65 53  baseName(SQLiteS
10ad0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
10ae0 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
10af0 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
10b00 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
10b10 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  t len = 0;..    
10b20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
10b30 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
10b40 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10b50 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
10b60 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  e_name_interop(s
10b70 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
10b80 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e  , index, ref len
10b90 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
10ba0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
10bb0 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
10bc0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
10bd0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
10be0 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74  tabase_name(stmt
10bf0 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
10c00 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e  ndex), -1);..#en
10c10 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
10c20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
10c30 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d  ide string Colum
10c40 6e 54 61 62 6c 65 4e 61 6d 65 28 53 51 4c 69 74  nTableName(SQLit
10c50 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
10c60 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
10c70 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
10c80 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
10c90 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  int len = 0;..  
10ca0 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
10cb0 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
10cc0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
10cd0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
10ce0 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74  _name_interop(st
10cf0 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
10d00 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29   index, ref len)
10d10 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  , len);..#else..
10d20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
10d30 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
10d40 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10d50 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
10d60 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71  le_name(stmt._sq
10d70 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
10d80 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
10d90 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10da0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10db0 62 6f 6f 6c 20 44 6f 65 73 54 61 62 6c 65 45 78  bool DoesTableEx
10dc0 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 73 74  ist(..        st
10dd0 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c 0d 0a  ring dataBase,..
10de0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
10df0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 29 0d  able..        ).
10e00 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
10e10 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65 20  string dataType 
10e20 3d 20 6e 75 6c 6c 3b 20 2f 2a 20 4e 4f 54 20 55  = null; /* NOT U
10e30 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  SED */..        
10e40 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65  string collateSe
10e50 71 75 65 6e 63 65 20 3d 20 6e 75 6c 6c 3b 20 2f  quence = null; /
10e60 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20  * NOT USED */.. 
10e70 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 74 4e         bool notN
10e80 75 6c 6c 20 3d 20 66 61 6c 73 65 3b 20 2f 2a 20  ull = false; /* 
10e90 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20 20  NOT USED */..   
10ea0 20 20 20 20 20 62 6f 6f 6c 20 70 72 69 6d 61 72       bool primar
10eb0 79 4b 65 79 20 3d 20 66 61 6c 73 65 3b 20 2f 2a  yKey = false; /*
10ec0 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20   NOT USED */..  
10ed0 20 20 20 20 20 20 62 6f 6f 6c 20 61 75 74 6f 49        bool autoI
10ee0 6e 63 72 65 6d 65 6e 74 20 3d 20 66 61 6c 73 65  ncrement = false
10ef0 3b 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f  ; /* NOT USED */
10f00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
10f10 72 6e 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74  rn ColumnMetaDat
10f20 61 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a(..            
10f30 64 61 74 61 42 61 73 65 2c 20 74 61 62 6c 65 2c  dataBase, table,
10f40 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 2c 20 72 65   null, false, re
10f50 66 20 64 61 74 61 54 79 70 65 2c 0d 0a 20 20 20  f dataType,..   
10f60 20 20 20 20 20 20 20 20 20 72 65 66 20 63 6f 6c           ref col
10f70 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 72 65  lateSequence, re
10f80 66 20 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 70  f notNull, ref p
10f90 72 69 6d 61 72 79 4b 65 79 2c 0d 0a 20 20 20 20  rimaryKey,..    
10fa0 20 20 20 20 20 20 20 20 72 65 66 20 61 75 74 6f          ref auto
10fb0 49 6e 63 72 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  Increment);..   
10fc0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
10fd0 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
10fe0 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28   ColumnMetaData(
10ff0 73 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c  string dataBase,
11000 20 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73   string table, s
11010 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 62 6f  tring column, bo
11020 6f 6c 20 63 61 6e 54 68 72 6f 77 2c 20 72 65 66  ol canThrow, ref
11030 20 73 74 72 69 6e 67 20 64 61 74 61 54 79 70 65   string dataType
11040 2c 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f 6c  , ref string col
11050 6c 61 74 65 53 65 71 75 65 6e 63 65 2c 20 72 65  lateSequence, re
11060 66 20 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20  f bool notNull, 
11070 72 65 66 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79  ref bool primary
11080 4b 65 79 2c 20 72 65 66 20 62 6f 6f 6c 20 61 75  Key, ref bool au
11090 74 6f 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20  toIncrement)..  
110a0 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74    {..      IntPt
110b0 72 20 64 61 74 61 54 79 70 65 50 74 72 20 3d 20  r dataTypePtr = 
110c0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
110d0 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53      IntPtr collS
110e0 65 71 50 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a  eqPtr = IntPtr.Z
110f0 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
11100 6e 6e 6f 74 4e 75 6c 6c 20 3d 20 30 3b 0d 0a 20  nnotNull = 0;.. 
11110 20 20 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72       int nprimar
11120 79 4b 65 79 20 3d 20 30 3b 0d 0a 20 20 20 20 20  yKey = 0;..     
11130 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63 20 3d 20   int nautoInc = 
11140 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  0;..      SQLite
11150 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20  ErrorCode n;..  
11160 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a      int dtLen;..
11170 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b        int csLen;
11180 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
11190 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
111a0 64 74 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  dtLen = 0;..    
111b0 20 20 63 73 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20    csLen = 0;..  
111c0 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
111d0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
111e0 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
111f0 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f  _metadata_intero
11200 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64  p(_sql, ToUTF8(d
11210 61 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38  ataBase), ToUTF8
11220 28 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28  (table), ToUTF8(
11230 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61 74  column), ref dat
11240 61 54 79 70 65 50 74 72 2c 20 72 65 66 20 63 6f  aTypePtr, ref co
11250 6c 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e 6e  llSeqPtr, ref nn
11260 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72 69  otNull, ref npri
11270 6d 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61 75  maryKey, ref nau
11280 74 6f 49 6e 63 2c 20 72 65 66 20 64 74 4c 65 6e  toInc, ref dtLen
11290 2c 20 72 65 66 20 63 73 4c 65 6e 29 3b 0d 0a 23  , ref csLen);..#
112a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 64 74 4c 65  else..      dtLe
112b0 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63  n = -1;..      c
112c0 73 4c 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20  sLen = -1;....  
112d0 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
112e0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
112f0 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
11300 5f 6d 65 74 61 64 61 74 61 28 5f 73 71 6c 2c 20  _metadata(_sql, 
11310 54 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29  ToUTF8(dataBase)
11320 2c 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c  , ToUTF8(table),
11330 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c   ToUTF8(column),
11340 20 72 65 66 20 64 61 74 61 54 79 70 65 50 74 72   ref dataTypePtr
11350 2c 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74 72  , ref collSeqPtr
11360 2c 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20  , ref nnotNull, 
11370 72 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c  ref nprimaryKey,
11380 20 72 65 66 20 6e 61 75 74 6f 49 6e 63 29 3b 0d   ref nautoInc);.
11390 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
113a0 66 20 28 63 61 6e 54 68 72 6f 77 20 26 26 20 28  f (canThrow && (
113b0 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
113c0 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72 6f 77 20  Code.Ok)) throw 
113d0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
113e0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
113f0 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
11400 20 64 61 74 61 54 79 70 65 20 3d 20 55 54 46 38   dataType = UTF8
11410 54 6f 53 74 72 69 6e 67 28 64 61 74 61 54 79 70  ToString(dataTyp
11420 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20  ePtr, dtLen);.. 
11430 20 20 20 20 20 63 6f 6c 6c 61 74 65 53 65 71 75       collateSequ
11440 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72  ence = UTF8ToStr
11450 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20  ing(collSeqPtr, 
11460 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  csLen);....     
11470 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74   notNull = (nnot
11480 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20  Null == 1);..   
11490 20 20 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20     primaryKey = 
114a0 28 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20  (nprimaryKey == 
114b0 31 29 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f 49  1);..      autoI
114c0 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74  ncrement = (naut
114d0 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 0d 0a 20  oInc == 1);.... 
114e0 20 20 20 20 20 72 65 74 75 72 6e 20 28 6e 20 3d       return (n =
114f0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
11500 65 2e 4f 6b 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  e.Ok);..    }...
11510 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11520 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65  erride object Ge
11530 74 4f 62 6a 65 63 74 28 53 51 4c 69 74 65 53 74  tObject(SQLiteSt
11540 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
11550 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
11560 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
11570 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  (ColumnAffinity(
11580 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 0d 0a 20  stmt, index)).. 
11590 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
115a0 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
115b0 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a  ffinity.Int64:..
115c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
115e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
115f0 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
11600 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
11610 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11620 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
11630 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a  finity.Double:..
11640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11650 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11660 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
11670 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e  tDouble(stmt, in
11680 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
11690 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
116a0 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
116b0 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d 0a 20  ffinity.Text:.. 
116c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
116d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
116e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
116f0 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78  Text(stmt, index
11700 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
11710 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11720 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
11730 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20  nity.Blob:..    
11740 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11760 20 20 20 6c 6f 6e 67 20 73 69 7a 65 20 3d 20 47     long size = G
11770 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e  etBytes(stmt, in
11780 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c  dex, 0, null, 0,
11790 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   0);....        
117a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
117b0 28 73 69 7a 65 20 3e 20 30 29 20 26 26 20 28 73  (size > 0) && (s
117c0 69 7a 65 20 3c 3d 20 69 6e 74 2e 4d 61 78 56 61  ize <= int.MaxVa
117d0 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lue))..         
117e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11800 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74        byte[] byt
11810 65 73 20 3d 20 6e 65 77 20 62 79 74 65 5b 28 69  es = new byte[(i
11820 6e 74 29 73 69 7a 65 5d 3b 0d 0a 0d 0a 20 20 20  nt)size];....   
11830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11840 20 20 20 20 20 47 65 74 42 79 74 65 73 28 73 74       GetBytes(st
11850 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 79  mt, index, 0, by
11860 74 65 73 2c 20 30 2c 20 28 69 6e 74 29 73 69 7a  tes, 0, (int)siz
11870 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11890 65 74 75 72 6e 20 62 79 74 65 73 3b 0d 0a 20 20  eturn bytes;..  
118a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
118c0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
118d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
118e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
118f0 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
11900 79 2e 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20  y.Null:..       
11910 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11930 72 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61  return DBNull.Va
11940 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
11950 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11960 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 68   }....        th
11970 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
11980 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
11990 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
119a0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
119b0 64 65 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75  de double GetDou
119c0 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
119d0 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
119e0 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
119f0 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
11a00 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
11a10 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
11a20 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11a30 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
11a40 62 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ble(stmt._sqlite
11a50 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
11a60 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
11a70 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 64 6f  ANDARD..      do
11a80 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 30 2e 30  uble value = 0.0
11a90 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  ;..      UnsafeN
11aa0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11ab0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
11ac0 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  le_interop(stmt.
11ad0 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
11ae0 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
11af0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
11b00 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  alue;..#else..  
11b10 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
11b20 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
11b30 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
11b40 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
11b50 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
11b60 20 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61 6e   bool GetBoolean
11b70 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
11b80 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
11b90 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11ba0 72 65 74 75 72 6e 20 54 6f 42 6f 6f 6c 65 61 6e  return ToBoolean
11bb0 28 47 65 74 4f 62 6a 65 63 74 28 73 74 6d 74 2c  (GetObject(stmt,
11bc0 20 69 6e 64 65 78 29 2c 20 43 75 6c 74 75 72 65   index), Culture
11bd0 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
11be0 6c 74 75 72 65 2c 20 66 61 6c 73 65 29 3b 0d 0a  lture, false);..
11bf0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11c00 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
11c10 62 79 74 65 20 47 65 74 53 42 79 74 65 28 53 51  byte GetSByte(SQ
11c20 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
11c30 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
11c40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
11c50 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 73  urn unchecked((s
11c60 62 79 74 65 29 28 47 65 74 49 6e 74 33 32 28 73  byte)(GetInt32(s
11c70 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 62 79  tmt, index) & by
11c80 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a  te.MaxValue));..
11c90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11ca0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
11cb0 79 74 65 20 47 65 74 42 79 74 65 28 53 51 4c 69  yte GetByte(SQLi
11cc0 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
11cd0 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
11ce0 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
11cf0 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 62 79 74  n unchecked((byt
11d00 65 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  e)(GetInt32(stmt
11d10 2c 20 69 6e 64 65 78 29 20 26 20 62 79 74 65 2e  , index) & byte.
11d20 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20  MaxValue));..   
11d30 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
11d40 61 6c 20 6f 76 65 72 72 69 64 65 20 73 68 6f 72  al override shor
11d50 74 20 47 65 74 49 6e 74 31 36 28 53 51 4c 69 74  t GetInt16(SQLit
11d60 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
11d70 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
11d80 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
11d90 20 75 6e 63 68 65 63 6b 65 64 28 28 73 68 6f 72   unchecked((shor
11da0 74 29 28 47 65 74 49 6e 74 33 32 28 73 74 6d 74  t)(GetInt32(stmt
11db0 2c 20 69 6e 64 65 78 29 20 26 20 75 73 68 6f 72  , index) & ushor
11dc0 74 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d 0a 20  t.MaxValue));.. 
11dd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
11de0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 73  rnal override us
11df0 68 6f 72 74 20 47 65 74 55 49 6e 74 31 36 28 53  hort GetUInt16(S
11e00 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
11e10 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
11e20 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
11e30 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
11e40 75 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32  ushort)(GetInt32
11e50 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
11e60 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29  ushort.MaxValue)
11e70 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
11e80 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11e90 64 65 20 69 6e 74 20 47 65 74 49 6e 74 33 32 28  de int GetInt32(
11ea0 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
11eb0 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
11ec0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
11ed0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
11ee0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
11ef0 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d  3_column_int(stm
11f00 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
11f10 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a  index);..    }..
11f20 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11f30 76 65 72 72 69 64 65 20 75 69 6e 74 20 47 65 74  verride uint Get
11f40 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  UInt32(SQLiteSta
11f50 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
11f60 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
11f70 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63        return unc
11f80 68 65 63 6b 65 64 28 28 75 69 6e 74 29 47 65 74  hecked((uint)Get
11f90 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
11fa0 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  x));..    }.... 
11fb0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
11fc0 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74  ride long GetInt
11fd0 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
11fe0 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
11ff0 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
12000 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
12010 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
12020 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
12030 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12040 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
12050 34 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  4(stmt._sqlite_s
12060 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
12070 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
12080 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67  DARD..      long
12090 20 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20 20 20   value = 0;..   
120a0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
120b0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
120c0 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65  olumn_int64_inte
120d0 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
120e0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65  _stmt, index, re
120f0 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
12100 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
12110 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
12120 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
12130 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
12140 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
12150 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12160 20 6f 76 65 72 72 69 64 65 20 75 6c 6f 6e 67 20   override ulong 
12170 47 65 74 55 49 6e 74 36 34 28 53 51 4c 69 74 65  GetUInt64(SQLite
12180 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
12190 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
121a0 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
121b0 75 6e 63 68 65 63 6b 65 64 28 28 75 6c 6f 6e 67  unchecked((ulong
121c0 29 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20  )GetInt64(stmt, 
121d0 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d  index));..    }.
121e0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
121f0 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
12200 47 65 74 54 65 78 74 28 53 51 4c 69 74 65 53 74  GetText(SQLiteSt
12210 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
12220 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
12230 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
12240 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e 74  NDARD..      int
12250 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
12260 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
12270 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
12280 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12290 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74  _column_text_int
122a0 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
122b0 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
122c0 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
122d0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
122e0 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
122f0 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
12300 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
12310 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f 73  umn_text(stmt._s
12320 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
12330 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  x),..        Uns
12340 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12350 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
12360 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69  bytes(stmt._sqli
12370 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 29  te_stmt, index))
12380 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
12390 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
123a0 20 6f 76 65 72 72 69 64 65 20 44 61 74 65 54 69   override DateTi
123b0 6d 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 53  me GetDateTime(S
123c0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
123d0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
123e0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
123f0 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61   (_datetimeForma
12400 74 20 3d 3d 20 53 51 4c 69 74 65 44 61 74 65 46  t == SQLiteDateF
12410 6f 72 6d 61 74 73 2e 54 69 63 6b 73 29 0d 0a 20  ormats.Ticks).. 
12420 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 69         return Ti
12430 63 6b 73 54 6f 44 61 74 65 54 69 6d 65 28 47 65  cksToDateTime(Ge
12440 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
12450 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69  ex), _datetimeKi
12460 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  nd);..      else
12470 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46 6f   if (_datetimeFo
12480 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44 61  rmat == SQLiteDa
12490 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e  teFormats.Julian
124a0 44 61 79 29 0d 0a 20 20 20 20 20 20 20 20 72 65  Day)..        re
124b0 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28  turn ToDateTime(
124c0 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c 20  GetDouble(stmt, 
124d0 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d  index), _datetim
124e0 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 65  eKind);..      e
124f0 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69 6d  lse if (_datetim
12500 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74  eFormat == SQLit
12510 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69  eDateFormats.Uni
12520 78 45 70 6f 63 68 29 0d 0a 20 20 20 20 20 20 20  xEpoch)..       
12530 20 72 65 74 75 72 6e 20 55 6e 69 78 45 70 6f 63   return UnixEpoc
12540 68 54 6f 44 61 74 65 54 69 6d 65 28 47 65 74 49  hToDateTime(GetI
12550 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
12560 29 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  ), _datetimeKind
12570 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  );....#if !SQLIT
12580 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
12590 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
125a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44        return ToD
125b0 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61  ateTime(UnsafeNa
125c0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
125d0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f  te3_column_text_
125e0 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
125f0 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
12600 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29  , ref len), len)
12610 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
12620 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
12630 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e(UnsafeNativeMe
12640 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
12650 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2e 5f  lumn_text(stmt._
12660 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
12670 65 78 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e  ex),..        Un
12680 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12690 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
126a0 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c  _bytes(stmt._sql
126b0 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
126c0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
126d0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
126e0 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
126f0 47 65 74 42 79 74 65 73 28 53 51 4c 69 74 65 53  GetBytes(SQLiteS
12700 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
12710 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44  nt index, int nD
12720 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b  ataOffset, byte[
12730 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74  ] bDest, int nSt
12740 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68  art, int nLength
12750 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12760 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66  int nlen = Unsaf
12770 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12780 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
12790 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tes(stmt._sqlite
127a0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
127b0 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f  ..      // If no
127c0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66   destination buf
127d0 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20  fer, return the 
127e0 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20  size needed...  
127f0 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
12800 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
12810 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74  en;....      int
12820 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
12830 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
12840 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
12850 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
12860 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
12870 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
12880 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
12890 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
128a0 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
128b0 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
128c0 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
128d0 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
128e0 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   0)..      {..  
128f0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
12900 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
12910 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
12920 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d 74 2e  olumn_blob(stmt.
12930 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
12940 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex);....       
12950 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49   Marshal.Copy((I
12960 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74  ntPtr)(ptr.ToInt
12970 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73  64() + nDataOffs
12980 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61  et), bDest, nSta
12990 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20  rt, nCopied);.. 
129a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
129b0 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  se..      {..   
129c0 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30       nCopied = 0
129d0 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
129e0 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69      return nCopi
129f0 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ed;..    }....  
12a00 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
12a10 69 64 65 20 63 68 61 72 20 47 65 74 43 68 61 72  ide char GetChar
12a20 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
12a30 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
12a40 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12a50 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
12a60 6f 43 68 61 72 28 47 65 74 55 49 6e 74 31 36 28  oChar(GetUInt16(
12a70 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
12a80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
12a90 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
12aa0 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53 51 4c  ong GetChars(SQL
12ab0 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
12ac0 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  t, int index, in
12ad0 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 63  t nDataOffset, c
12ae0 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  har[] bDest, int
12af0 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
12b00 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
12b10 20 20 20 20 69 6e 74 20 6e 6c 65 6e 3b 0d 0a 20      int nlen;.. 
12b20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64       int nCopied
12b30 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20   = nLength;.... 
12b40 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20       string str 
12b50 3d 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  = GetText(stmt, 
12b60 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 6e  index);..      n
12b70 6c 65 6e 20 3d 20 73 74 72 2e 4c 65 6e 67 74 68  len = str.Length
12b80 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ;....      if (b
12b90 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
12ba0 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
12bb0 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
12bc0 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
12bd0 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
12be0 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
12bf0 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
12c00 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
12c10 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
12c20 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
12c30 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
12c40 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
12c50 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
12c60 20 20 20 20 73 74 72 2e 43 6f 70 79 54 6f 28 6e      str.CopyTo(n
12c70 44 61 74 61 4f 66 66 73 65 74 2c 20 62 44 65 73  DataOffset, bDes
12c80 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
12c90 65 64 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65  ed);..      else
12ca0 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 0d   nCopied = 0;...
12cb0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43  .      return nC
12cc0 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  opied;..    }...
12cd0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
12ce0 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4e 75  erride bool IsNu
12cf0 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
12d00 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
12d10 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
12d20 20 20 72 65 74 75 72 6e 20 28 43 6f 6c 75 6d 6e    return (Column
12d30 41 66 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69  Affinity(stmt, i
12d40 6e 64 65 78 29 20 3d 3d 20 54 79 70 65 41 66 66  ndex) == TypeAff
12d50 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b 0d 0a 20 20  inity.Null);..  
12d60 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
12d70 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
12d80 20 41 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28   AggregateCount(
12d90 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
12da0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
12db0 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
12dc0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12dd0 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74  _aggregate_count
12de0 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20  (context);..    
12df0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12e00 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  l override SQLit
12e10 65 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74  eErrorCode Creat
12e20 65 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67  eFunction(string
12e30 20 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e   strFunction, in
12e40 74 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65  t nArgs, bool ne
12e50 65 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74  edCollSeq, SQLit
12e60 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20  eCallback func, 
12e70 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66  SQLiteCallback f
12e80 75 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46  uncstep, SQLiteF
12e90 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e  inalCallback fun
12ea0 63 66 69 6e 61 6c 2c 20 62 6f 6f 6c 20 63 61 6e  cfinal, bool can
12eb0 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a 20  Throw)..    {.. 
12ec0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
12ed0 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21  Code n;....#if !
12ee0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
12ef0 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
12f00 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12f10 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
12f20 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f  nction_interop(_
12f30 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
12f40 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
12f50 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   4, IntPtr.Zero,
12f60 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
12f70 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65   funcfinal, (nee
12f80 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65  dCollSeq == true
12f90 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20 20  ) ? 1 : 0);..   
12fa0 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
12fb0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
12fc0 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
12fd0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12fe0 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
12ff0 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f  interop(_sql, To
13000 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e  UTF8(strFunction
13010 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74  ), nArgs, 1, Int
13020 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20  Ptr.Zero, func, 
13030 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69  funcstep, funcfi
13040 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65  nal, (needCollSe
13050 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a  q == true) ? 1 :
13060 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20   0);..#else..   
13070 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
13080 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13090 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
130a0 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
130b0 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
130c0 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 4, IntPtr.Z
130d0 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
130e0 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b  tep, funcfinal);
130f0 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
13100 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
13110 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e  .Ok) n = UnsafeN
13120 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13130 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
13140 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46  tion(_sql, ToUTF
13150 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20  8(strFunction), 
13160 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72  nArgs, 1, IntPtr
13170 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e  .Zero, func, fun
13180 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c  cstep, funcfinal
13190 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
131a0 20 20 69 66 20 28 63 61 6e 54 68 72 6f 77 20 26    if (canThrow &
131b0 26 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  & (n != SQLiteEr
131c0 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72  rorCode.Ok)) thr
131d0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
131e0 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
131f0 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
13200 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20    return n;..   
13210 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
13220 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
13230 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61  teErrorCode Crea
13240 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69  teCollation(stri
13250 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c  ng strCollation,
13260 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e   SQLiteCollation
13270 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c   func, SQLiteCol
13280 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 2c 20 62  lation func16, b
13290 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20  ool canThrow).. 
132a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
132b0 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
132c0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
132d0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
132e0 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71  te_collation(_sq
132f0 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c  l, ToUTF8(strCol
13300 6c 61 74 69 6f 6e 29 2c 20 32 2c 20 49 6e 74 50  lation), 2, IntP
13310 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 31 36 29  tr.Zero, func16)
13320 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d  ;..      if (n =
13330 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
13340 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65  e.Ok) n = Unsafe
13350 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13360 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
13370 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  lation(_sql, ToU
13380 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e  TF8(strCollation
13390 29 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72  ), 1, IntPtr.Zer
133a0 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 20  o, func);..     
133b0 20 69 66 20 28 63 61 6e 54 68 72 6f 77 20 26 26   if (canThrow &&
133c0 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
133d0 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 74 68 72 6f  orCode.Ok)) thro
133e0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
133f0 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
13400 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
13410 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20   return n;..    
13420 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13430 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
13440 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d  ontextCollateCom
13450 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  pare(CollationEn
13460 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20  codingEnum enc, 
13470 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
13480 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e  string s1, strin
13490 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  g s2)..    {..#i
134a0 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
134b0 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  RD..      byte[]
134c0 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65   b1;..      byte
134d0 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79  [] b2;..      Sy
134e0 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
134f0 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e  ng converter = n
13500 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ull;....      sw
13510 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20  itch (enc)..    
13520 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
13530 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
13540 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20  ingEnum.UTF8:.. 
13550 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
13560 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
13570 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d  .Encoding.UTF8;.
13580 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
13590 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
135a0 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
135b0 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a  gEnum.UTF16LE:..
135c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
135d0 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
135e0 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f  t.Encoding.Unico
135f0 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
13600 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
13610 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
13620 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42  odingEnum.UTF16B
13630 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
13640 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
13650 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42  .Text.Encoding.B
13660 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b  igEndianUnicode;
13670 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
13680 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  k;..      }.... 
13690 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72       b1 = conver
136a0 74 65 72 2e 47 65 74 42 79 74 65 73 28 73 31 29  ter.GetBytes(s1)
136b0 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f  ;..      b2 = co
136c0 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
136d0 28 73 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  (s2);....      r
136e0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
136f0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13700 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f  3_context_collco
13710 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f  mpare_interop(co
13720 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65  ntext, b1, b1.Le
13730 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e  ngth, b2, b2.Len
13740 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  gth);..#else..  
13750 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
13760 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
13770 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
13780 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
13790 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
137a0 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c   int ContextColl
137b0 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61  ateCompare(Colla
137c0 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
137d0 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e   enc, IntPtr con
137e0 74 65 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c  text, char[] c1,
137f0 20 63 68 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20   char[] c2)..   
13800 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
13810 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
13820 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20  byte[] b1;..    
13830 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20    byte[] b2;..  
13840 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e      System.Text.
13850 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74  Encoding convert
13860 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  er = null;....  
13870 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63 29      switch (enc)
13880 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
13890 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
138a0 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
138b0 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  F8:..          c
138c0 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65  onverter = Syste
138d0 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e  m.Text.Encoding.
138e0 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  UTF8;..         
138f0 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
13900 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
13910 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31  ncodingEnum.UTF1
13920 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  6LE:..          
13930 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
13940 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
13950 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20  .Unicode;..     
13960 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
13970 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
13980 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
13990 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20  UTF16BE:..      
139a0 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
139b0 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
139c0 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e  ding.BigEndianUn
139d0 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20  icode;..        
139e0 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
139f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20  }....      b1 = 
13a00 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74  converter.GetByt
13a10 65 73 28 63 31 29 3b 0d 0a 20 20 20 20 20 20 62  es(c1);..      b
13a20 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  2 = converter.Ge
13a30 74 42 79 74 65 73 28 63 32 29 3b 0d 0a 0d 0a 20  tBytes(c2);.... 
13a40 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
13a50 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13a60 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
13a70 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65  collcompare_inte
13a80 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c  rop(context, b1,
13a90 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20   b1.Length, b2, 
13aa0 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c  b2.Length);..#el
13ab0 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
13ac0 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
13ad0 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
13ae0 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
13af0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
13b00 65 72 72 69 64 65 20 43 6f 6c 6c 61 74 69 6f 6e  erride Collation
13b10 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c  Sequence GetColl
13b20 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51  ationSequence(SQ
13b30 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e  LiteFunction fun
13b40 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  c, IntPtr contex
13b50 74 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  t)..    {..#if !
13b60 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
13b70 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e  .      Collation
13b80 53 65 71 75 65 6e 63 65 20 73 65 71 20 3d 20 6e  Sequence seq = n
13b90 65 77 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  ew CollationSequ
13ba0 65 6e 63 65 28 29 3b 0d 0a 20 20 20 20 20 20 69  ence();..      i
13bb0 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
13bc0 20 20 20 69 6e 74 20 74 79 70 65 20 3d 20 30 3b     int type = 0;
13bd0 0d 0a 20 20 20 20 20 20 69 6e 74 20 65 6e 63 20  ..      int enc 
13be0 3d 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50  = 0;..      IntP
13bf0 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
13c00 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13c10 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73  e3_context_colls
13c20 65 71 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  eq_interop(conte
13c30 78 74 2c 20 72 65 66 20 74 79 70 65 2c 20 72 65  xt, ref type, re
13c40 66 20 65 6e 63 2c 20 72 65 66 20 6c 65 6e 29 3b  f enc, ref len);
13c50 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 70 20  ....      if (p 
13c60 21 3d 20 6e 75 6c 6c 29 20 73 65 71 2e 4e 61 6d  != null) seq.Nam
13c70 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
13c80 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20 20 20 20 20  (p, len);..     
13c90 20 73 65 71 2e 54 79 70 65 20 3d 20 28 43 6f 6c   seq.Type = (Col
13ca0 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 29 74  lationTypeEnum)t
13cb0 79 70 65 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e  ype;..      seq.
13cc0 5f 66 75 6e 63 20 3d 20 66 75 6e 63 3b 0d 0a 20  _func = func;.. 
13cd0 20 20 20 20 20 73 65 71 2e 45 6e 63 6f 64 69 6e       seq.Encodin
13ce0 67 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  g = (CollationEn
13cf0 63 6f 64 69 6e 67 45 6e 75 6d 29 65 6e 63 3b 0d  codingEnum)enc;.
13d00 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
13d10 73 65 71 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  seq;..#else..   
13d20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
13d30 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
13d40 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
13d50 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
13d60 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
13d70 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c  long GetParamVal
13d80 75 65 42 79 74 65 73 28 49 6e 74 50 74 72 20 70  ueBytes(IntPtr p
13d90 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65  , int nDataOffse
13da0 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c  t, byte[] bDest,
13db0 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74   int nStart, int
13dc0 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b   nLength)..    {
13dd0 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e  ..      int nlen
13de0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
13df0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
13e00 61 6c 75 65 5f 62 79 74 65 73 28 70 29 3b 0d 0a  alue_bytes(p);..
13e10 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f  ..      // If no
13e20 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62 75 66   destination buf
13e30 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68 65 20  fer, return the 
13e40 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a 20 20  size needed...  
13e50 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d      if (bDest ==
13e60 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c   null) return nl
13e70 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74  en;....      int
13e80 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67   nCopied = nLeng
13e90 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  th;....      if 
13ea0 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72  (nCopied + nStar
13eb0 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  t > bDest.Length
13ec0 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73  ) nCopied = bDes
13ed0 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72  t.Length - nStar
13ee0 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  t;..      if (nC
13ef0 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66  opied + nDataOff
13f00 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70  set > nlen) nCop
13f10 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61  ied = nlen - nDa
13f20 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
13f30 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e     if (nCopied >
13f40 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   0)..      {..  
13f50 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
13f60 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
13f70 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
13f80 61 6c 75 65 5f 62 6c 6f 62 28 70 29 3b 0d 0a 0d  alue_blob(p);...
13f90 0a 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c  .        Marshal
13fa0 2e 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70  .Copy((IntPtr)(p
13fb0 74 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e  tr.ToInt64() + n
13fc0 44 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65  DataOffset), bDe
13fd0 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70  st, nStart, nCop
13fe0 69 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ied);..      }..
13ff0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
14000 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f    {..        nCo
14010 70 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  pied = 0;..     
14020 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
14030 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20  rn nCopied;..   
14040 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
14050 61 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62  al override doub
14060 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  le GetParamValue
14070 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74  Double(IntPtr pt
14080 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  r)..    {..#if !
14090 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
140a0 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
140b0 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
140c0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
140d0 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
140e0 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53  (ptr);..#elif !S
140f0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
14100 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c        double val
14110 75 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20  ue = 0.0;..     
14120 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14130 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
14140 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  ue_double_intero
14150 70 28 70 74 72 2c 20 72 65 66 20 76 61 6c 75 65  p(ptr, ref value
14160 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  );..      return
14170 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a   value;..#else..
14180 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
14190 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
141a0 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
141b0 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
141c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
141d0 64 65 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56  de int GetParamV
141e0 61 6c 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72  alueInt32(IntPtr
141f0 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
14200 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
14210 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
14220 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
14230 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (ptr);..    }...
14240 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14250 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50  erride long GetP
14260 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49  aramValueInt64(I
14270 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
14280 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
14290 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
142a0 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  K..      return 
142b0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
142c0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
142d0 65 5f 69 6e 74 36 34 28 70 74 72 29 3b 0d 0a 23  e_int64(ptr);..#
142e0 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
142f0 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e 74  NDARD..      Int
14300 36 34 20 76 61 6c 75 65 20 3d 20 30 3b 0d 0a 20  64 value = 0;.. 
14310 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
14320 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
14330 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74  _value_int64_int
14340 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20 76 61  erop(ptr, ref va
14350 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72 65 74  lue);..      ret
14360 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73  urn value;..#els
14370 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
14380 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
14390 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
143a0 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
143b0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
143c0 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65 74  rride string Get
143d0 50 61 72 61 6d 56 61 6c 75 65 54 65 78 74 28 49  ParamValueText(I
143e0 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
143f0 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
14400 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69  TANDARD..      i
14410 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
14420 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
14430 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
14440 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14450 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e  e3_value_text_in
14460 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20 6c  terop(ptr, ref l
14470 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
14480 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  e..      return 
14490 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
144a0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
144b0 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  .sqlite3_value_t
144c0 65 78 74 28 70 74 72 29 2c 0d 0a 20 20 20 20 20  ext(ptr),..     
144d0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
144e0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
144f0 61 6c 75 65 5f 62 79 74 65 73 28 70 74 72 29 29  alue_bytes(ptr))
14500 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
14510 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
14520 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41 66   override TypeAf
14530 66 69 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56  finity GetParamV
14540 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74 72 20  alueType(IntPtr 
14550 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
14560 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
14570 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14580 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
14590 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (ptr);..    }...
145a0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
145b0 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75  erride void Retu
145c0 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f  rnBlob(IntPtr co
145d0 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61  ntext, byte[] va
145e0 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
145f0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
14600 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
14610 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74 65  esult_blob(conte
14620 78 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65  xt, value, value
14630 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72  .Length, (IntPtr
14640 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  )(-1));..    }..
14650 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
14660 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
14670 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74 72  urnDouble(IntPtr
14680 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c 65   context, double
14690 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
146a0 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
146b0 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
146c0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
146d0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
146e0 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28  3_result_double(
146f0 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  context, value);
14700 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
14710 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
14720 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
14730 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
14740 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  lt_double_intero
14750 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76  p(context, ref v
14760 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alue);..#else.. 
14770 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
14780 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
14790 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
147a0 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
147b0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
147c0 65 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72 72  e void ReturnErr
147d0 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78  or(IntPtr contex
147e0 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 29  t, string value)
147f0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
14800 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14810 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
14820 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
14830 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 2c 20   ToUTF8(value), 
14840 76 61 6c 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a  value.Length);..
14850 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
14860 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
14870 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33 32 28  oid ReturnInt32(
14880 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
14890 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  int value)..    
148a0 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
148b0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
148c0 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
148d0 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  context, value);
148e0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
148f0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
14900 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36   void ReturnInt6
14910 34 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  4(IntPtr context
14920 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20  , long value).. 
14930 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
14940 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
14950 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61  WORK..      Unsa
14960 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
14970 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
14980 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 76 61  nt64(context, va
14990 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  lue);..#elif !SQ
149a0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
149b0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
149c0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
149d0 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e  _result_int64_in
149e0 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72  terop(context, r
149f0 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
14a00 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
14a10 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
14a20 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
14a30 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
14a40 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14a50 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
14a60 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e  nNull(IntPtr con
14a70 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  text)..    {..  
14a80 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
14a90 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14aa0 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
14ab0 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ext);..    }....
14ac0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14ad0 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
14ae0 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e  nText(IntPtr con
14af0 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c  text, string val
14b00 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
14b10 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
14b20 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20  TF8(value);..   
14b30 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
14b40 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
14b50 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65  esult_text(conte
14b60 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75 65  xt, ToUTF8(value
14b70 29 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c  ), b.Length - 1,
14b80 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
14b90 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e  .    }....#if IN
14ba0 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
14bb0 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
14bc0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
14bd0 44 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 66  Determines the f
14be0 69 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ile name of the 
14bf0 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 63  native library c
14c00 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6e 61  ontaining the na
14c10 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 22 76  tive..    /// "v
14c20 74 73 68 69 6d 22 20 65 78 74 65 6e 73 69 6f 6e  tshim" extension
14c30 20 2d 41 4e 44 2d 20 77 68 65 74 68 65 72 20 69   -AND- whether i
14c40 74 20 73 68 6f 75 6c 64 20 62 65 20 64 79 6e 61  t should be dyna
14c50 6d 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20 62  mically loaded b
14c60 79 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69 73 20  y..    /// this 
14c70 63 6c 61 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  class...    /// 
14c80 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
14c90 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
14ca0 22 69 73 4c 6f 61 64 4e 65 65 64 65 64 22 3e 0d  "isLoadNeeded">.
14cb0 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6f 75  .    /// This ou
14cc0 74 70 75 74 20 70 61 72 61 6d 65 74 65 72 20 77  tput parameter w
14cd0 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 6e 6f  ill be set to no
14ce0 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 72 65  n-zero if the re
14cf0 74 75 72 6e 65 64 20 6e 61 74 69 76 65 0d 0a 20  turned native.. 
14d00 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 20 66     /// library f
14d10 69 6c 65 20 6e 61 6d 65 20 73 68 6f 75 6c 64 20  ile name should 
14d20 62 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 6c  be dynamically l
14d30 6f 61 64 65 64 20 70 72 69 6f 72 20 74 6f 20 61  oaded prior to a
14d40 74 74 65 6d 70 74 69 6e 67 0d 0a 20 20 20 20 2f  ttempting..    /
14d50 2f 2f 20 74 68 65 20 63 72 65 61 74 69 6f 6e 20  // the creation 
14d60 6f 66 20 6e 61 74 69 76 65 20 64 69 73 70 6f 73  of native dispos
14d70 61 62 6c 65 20 65 78 74 65 6e 73 69 6f 6e 20 6d  able extension m
14d80 6f 64 75 6c 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f  odules...    ///
14d90 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
14da0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
14db0 20 20 2f 2f 2f 20 54 68 65 20 66 69 6c 65 20 6e    /// The file n
14dc0 61 6d 65 20 6f 66 20 74 68 65 20 6e 61 74 69 76  ame of the nativ
14dd0 65 20 6c 69 62 72 61 72 79 20 63 6f 6e 74 61 69  e library contai
14de0 6e 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20  ning the native 
14df0 22 76 74 73 68 69 6d 22 0d 0a 20 20 20 20 2f 2f  "vtshim"..    //
14e00 2f 20 65 78 74 65 6e 73 69 6f 6e 20 2d 4f 52 2d  / extension -OR-
14e10 20 6e 75 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e   null if it cann
14e20 6f 74 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64  ot be determined
14e30 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
14e40 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61  urns>..    priva
14e50 74 65 20 73 74 72 69 6e 67 20 47 65 74 53 68 69  te string GetShi
14e60 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61  mExtensionFileNa
14e70 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 72 65 66  me(..        ref
14e80 20 62 6f 6f 6c 20 69 73 4c 6f 61 64 4e 65 65 64   bool isLoadNeed
14e90 65 64 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20  ed /* out */..  
14ea0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
14eb0 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 68 69          if (_shi
14ec0 6d 49 73 4c 6f 61 64 4e 65 65 64 65 64 20 21 3d  mIsLoadNeeded !=
14ed0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
14ee0 20 20 20 20 69 73 4c 6f 61 64 4e 65 65 64 65 64      isLoadNeeded
14ef0 20 3d 20 28 62 6f 6f 6c 29 5f 73 68 69 6d 49 73   = (bool)_shimIs
14f00 4c 6f 61 64 4e 65 65 64 65 64 3b 0d 0a 20 20 20  LoadNeeded;..   
14f10 20 20 20 20 20 65 6c 73 65 0d 0a 23 69 66 20 53       else..#if S
14f20 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 7c  QLITE_STANDARD |
14f30 7c 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c  | USE_INTEROP_DL
14f40 4c 20 7c 7c 20 50 4c 41 54 46 4f 52 4d 5f 43 4f  L || PLATFORM_CO
14f50 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
14f60 20 20 20 20 20 20 20 20 20 20 20 20 69 73 4c 6f              isLo
14f70 61 64 4e 65 65 64 65 64 20 3d 20 48 65 6c 70 65  adNeeded = Helpe
14f80 72 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e 64 6f  rMethods.IsWindo
14f90 77 73 28 29 3b 20 2f 2a 20 43 4f 4d 50 41 54 20  ws(); /* COMPAT 
14fa0 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  */..#else..     
14fb0 20 20 20 20 20 20 20 69 73 4c 6f 61 64 4e 65 65         isLoadNee
14fc0 64 65 64 20 3d 20 66 61 6c 73 65 3b 20 2f 2a 20  ded = false; /* 
14fd0 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
14fe0 62 6c 79 20 2a 2f 0d 0a 23 65 6e 64 69 66 0d 0a  bly */..#endif..
14ff0 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
15000 20 66 69 6c 65 4e 61 6d 65 20 3d 20 5f 73 68 69   fileName = _shi
15010 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61  mExtensionFileNa
15020 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  me;....        i
15030 66 20 28 66 69 6c 65 4e 61 6d 65 20 21 3d 20 6e  f (fileName != n
15040 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
15050 20 20 72 65 74 75 72 6e 20 66 69 6c 65 4e 61 6d    return fileNam
15060 65 3b 0d 0a 0d 0a 23 69 66 20 28 53 51 4c 49 54  e;....#if (SQLIT
15070 45 5f 53 54 41 4e 44 41 52 44 20 7c 7c 20 55 53  E_STANDARD || US
15080 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 7c 7c  E_INTEROP_DLL ||
15090 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43   PLATFORM_COMPAC
150a0 54 46 52 41 4d 45 57 4f 52 4b 29 20 26 26 20 50  TFRAMEWORK) && P
150b0 52 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49  RELOAD_NATIVE_LI
150c0 42 52 41 52 59 0d 0a 20 20 20 20 20 20 20 20 72  BRARY..        r
150d0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
150e0 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 4e 61 74  veMethods.GetNat
150f0 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61  iveLibraryFileNa
15100 6d 65 4f 6e 6c 79 28 29 3b 20 2f 2a 20 43 4f 4d  meOnly(); /* COM
15110 50 41 54 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20  PAT */..#else.. 
15120 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
15130 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ll;..#endif..   
15140 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
15150 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
15160 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76   Calls the nativ
15170 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
15180 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  brary in order t
15190 6f 20 63 72 65 61 74 65 20 61 20 64 69 73 70 6f  o create a dispo
151a0 73 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d  sable..    /// m
151b0 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  odule containing
151c0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
151d0 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ion of a virtual
151e0 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f   table...    ///
151f0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
15200 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
15210 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20  ="module">..    
15220 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f  /// The module o
15230 62 6a 65 63 74 20 74 6f 20 62 65 20 75 73 65 64  bject to be used
15240 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 74   when creating t
15250 68 65 20 6e 61 74 69 76 65 20 64 69 73 70 6f 73  he native dispos
15260 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20  able module...  
15270 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
15280 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
15290 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20  ame="flags">..  
152a0 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20    /// The flags 
152b0 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74  for the associat
152c0 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
152d0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20  LiteConnection" 
152e0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
152f0 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ce...    /// </p
15300 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
15310 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
15320 64 20 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 53  d CreateModule(S
15330 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
15340 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  le, SQLiteConnec
15350 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29  tionFlags flags)
15360 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
15370 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
15380 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
15390 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
153a0 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
153b0 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a  n("module");....
153c0 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70          if (Help
153d0 65 72 4d 65 74 68 6f 64 73 2e 4e 6f 4c 6f 67 4d  erMethods.NoLogM
153e0 6f 64 75 6c 65 28 66 6c 61 67 73 29 29 0d 0a 20  odule(flags)).. 
153f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15400 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67        module.Log
15410 45 72 72 6f 72 73 20 3d 20 48 65 6c 70 65 72 4d  Errors = HelperM
15420 65 74 68 6f 64 73 2e 4c 6f 67 4d 6f 64 75 6c 65  ethods.LogModule
15430 45 72 72 6f 72 28 66 6c 61 67 73 29 3b 0d 0a 20  Error(flags);.. 
15440 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
15450 65 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 20  e.LogExceptions 
15460 3d 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  = HelperMethods.
15470 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74 69  LogModuleExcepti
15480 6f 6e 28 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20  on(flags);..    
15490 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
154a0 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
154b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
154c0 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
154d0 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65  Exception("conne
154e0 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76  ction has an inv
154f0 61 6c 69 64 20 68 61 6e 64 6c 65 22 29 3b 0d 0a  alid handle");..
15500 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 69  ..        bool i
15510 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 66 61  sLoadNeeded = fa
15520 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 73 74  lse;..        st
15530 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20  ring fileName = 
15540 47 65 74 53 68 69 6d 45 78 74 65 6e 73 69 6f 6e  GetShimExtension
15550 46 69 6c 65 4e 61 6d 65 28 72 65 66 20 69 73 4c  FileName(ref isL
15560 6f 61 64 4e 65 65 64 65 64 29 3b 0d 0a 0d 0a 20  oadNeeded);.... 
15570 20 20 20 20 20 20 20 69 66 20 28 69 73 4c 6f 61         if (isLoa
15580 64 4e 65 65 64 65 64 29 0d 0a 20 20 20 20 20 20  dNeeded)..      
15590 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
155a0 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d   if (fileName ==
155b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
155c0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
155d0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
155e0 6e 28 22 74 68 65 20 66 69 6c 65 20 6e 61 6d 65  n("the file name
155f0 20 66 6f 72 20 74 68 65 20 5c 22 76 74 73 68 69   for the \"vtshi
15600 6d 5c 22 20 65 78 74 65 6e 73 69 6f 6e 20 69 73  m\" extension is
15610 20 75 6e 6b 6e 6f 77 6e 22 29 3b 0d 0a 0d 0a 20   unknown");.... 
15620 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
15630 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 50 72 6f  shimExtensionPro
15640 63 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  cName == null)..
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
15670 45 78 63 65 70 74 69 6f 6e 28 22 74 68 65 20 65  Exception("the e
15680 6e 74 72 79 20 70 6f 69 6e 74 20 66 6f 72 20 74  ntry point for t
15690 68 65 20 5c 22 76 74 73 68 69 6d 5c 22 20 65 78  he \"vtshim\" ex
156a0 74 65 6e 73 69 6f 6e 20 69 73 20 75 6e 6b 6e 6f  tension is unkno
156b0 77 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  wn");....       
156c0 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78 74 65       SetLoadExte
156d0 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a 20 20  nsion(true);..  
156e0 20 20 20 20 20 20 20 20 20 20 4c 6f 61 64 45 78            LoadEx
156f0 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65  tension(fileName
15700 2c 20 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e  , _shimExtension
15710 50 72 6f 63 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  ProcName);..    
15720 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
15730 20 69 66 20 28 6d 6f 64 75 6c 65 2e 43 72 65 61   if (module.Crea
15740 74 65 44 69 73 70 6f 73 61 62 6c 65 4d 6f 64 75  teDisposableModu
15750 6c 65 28 5f 73 71 6c 29 29 0d 0a 20 20 20 20 20  le(_sql))..     
15760 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15770 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 3d    if (_modules =
15780 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15790 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65           _module
157a0 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
157b0 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74  ry<string, SQLit
157c0 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d 0a 20  eModule>();.... 
157d0 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75             _modu
157e0 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65 2e 4e  les.Add(module.N
157f0 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d 0a 0d  ame, module);...
15800 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
15810 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20  (_usePool)..    
15820 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15830 20 20 20 20 20 20 20 20 20 20 20 5f 75 73 65 50             _useP
15840 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ool = false;....
15850 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
15860 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
15870 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
15880 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
15890 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
158a0 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
158b0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
158c0 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
158d0 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
158e0 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
158f0 20 20 20 20 20 20 20 20 20 20 20 22 43 72 65 61             "Crea
15900 74 65 4d 6f 64 75 6c 65 20 28 50 6f 6f 6c 29 20  teModule (Pool) 
15910 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d  Disabled: {0}",.
15920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15930 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72       HandleToStr
15940 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66  ing()));..#endif
15950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15960 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
15970 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
15980 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15990 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
159a0 65 45 78 63 65 70 74 69 6f 6e 28 47 65 74 4c 61  eException(GetLa
159b0 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
159c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
159d0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
159e0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c  y>..    /// Call
159f0 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c  s the native SQL
15a00 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
15a10 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6c 65   in order to cle
15a20 61 6e 75 70 20 74 68 65 20 72 65 73 6f 75 72 63  anup the resourc
15a30 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f  es..    /// asso
15a40 63 69 61 74 65 64 20 77 69 74 68 20 61 20 6d 6f  ciated with a mo
15a50 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  dule containing 
15a60 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
15a70 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  on of a virtual 
15a80 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  table...    /// 
15a90 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
15aa0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
15ab0 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f  "module">..    /
15ac0 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62  // The module ob
15ad0 6a 65 63 74 20 70 72 65 76 69 6f 75 73 6c 79 20  ject previously 
15ae0 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 3c 73  passed to the <s
15af0 65 65 20 63 72 65 66 3d 22 43 72 65 61 74 65 4d  ee cref="CreateM
15b00 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20 20 2f  odule" />..    /
15b10 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  // method...    
15b20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
15b30 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
15b40 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20  e="flags">..    
15b50 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f  /// The flags fo
15b60 72 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  r the associated
15b70 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
15b80 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e  teConnection" />
15b90 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
15ba0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
15bb0 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
15bc0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
15bd0 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 28 53 51  DisposeModule(SQ
15be0 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
15bf0 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  e, SQLiteConnect
15c00 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d  ionFlags flags).
15c10 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
15c20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
15c30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
15c40 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
15c50 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
15c60 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d 0a 20  ("module");.... 
15c70 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69         module.Di
15c80 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 7d 0d  spose();..    }.
15c90 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69  .#endif....    i
15ca0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
15cb0 20 49 6e 74 50 74 72 20 41 67 67 72 65 67 61 74   IntPtr Aggregat
15cc0 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74 72 20  eContext(IntPtr 
15cd0 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d  context)..    {.
15ce0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
15cf0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
15d00 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  s.sqlite3_aggreg
15d10 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74  ate_context(cont
15d20 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20 7d 0d  ext, 1);..    }.
15d30 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56  ...#if INTEROP_V
15d40 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20  IRTUAL_TABLE..  
15d50 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
15d60 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
15d70 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
15d80 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
15d90 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72   order to declar
15da0 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  e a virtual tabl
15db0 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65  e..    /// in re
15dc0 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c  sponse to a call
15dd0 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63   into the <see c
15de0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
15df0 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
15e00 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72  " />..    /// or
15e10 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
15e20 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
15e30 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72  xConnect" /> vir
15e40 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f  tual table metho
15e50 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ds...    /// </s
15e60 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
15e70 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
15e80 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  dule">..    /// 
15e90 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  The virtual tabl
15ea0 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73  e module that is
15eb0 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62   to be responsib
15ec0 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75  le for the virtu
15ed0 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
15ee0 2f 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64  / being declared
15ef0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
15f00 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
15f10 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c  ram name="strSql
15f20 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
15f30 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
15f40 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
15f50 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67 20 74  ent describing t
15f60 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
15f70 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20   to..    /// be 
15f80 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
15f90 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
15fa0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
15fb0 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f  ="error">..    /
15fc0 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
15fd0 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
15fe0 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
15ff0 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20  are undefined.  
16000 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20  Upon failure,.. 
16010 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64     /// it should
16020 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72   contain an appr
16030 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65  opriate error me
16040 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ssage...    /// 
16050 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
16060 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
16070 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
16080 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
16090 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  de...    /// </r
160a0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
160b0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
160c0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44  QLiteErrorCode D
160d0 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54 61 62  eclareVirtualTab
160e0 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  le(..        SQL
160f0 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  iteModule module
16100 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
16110 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20 20 20 20  g strSql,..     
16120 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
16130 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ror..        )..
16140 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
16150 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29  f (_sql == null)
16160 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
16170 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
16180 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73   "connection has
16190 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
161a0 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  le";..          
161b0 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
161c0 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
161d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
161e0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 53 71        IntPtr pSq
161f0 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  l = IntPtr.Zero;
16200 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
16210 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
16220 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d 20 53          pSql = S
16230 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38  QLiteString.Utf8
16240 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
16250 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20  (strSql);....   
16260 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
16270 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
16280 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
16290 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65  .sqlite3_declare
162a0 5f 76 74 61 62 28 0d 0a 20 20 20 20 20 20 20 20  _vtab(..        
162b0 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 53          _sql, pS
162c0 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ql);....        
162d0 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51      if ((n == SQ
162e0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
162f0 29 20 26 26 20 28 6d 6f 64 75 6c 65 20 21 3d 20  ) && (module != 
16300 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
16310 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44          module.D
16320 65 63 6c 61 72 65 64 20 3d 20 74 72 75 65 3b 0d  eclared = true;.
16330 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
16340 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
16350 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f  rorCode.Ok) erro
16360 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f 72  r = GetLastError
16370 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
16380 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20     return n;..  
16390 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
163a0 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
163b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
163c0 20 69 66 20 28 70 53 71 6c 20 21 3d 20 49 6e 74   if (pSql != Int
163d0 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
163e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
163f0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
16400 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 53 71 6c  Memory.Free(pSql
16410 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
16420 20 20 20 20 70 53 71 6c 20 3d 20 49 6e 74 50 74      pSql = IntPt
16430 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
16440 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16450 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
16460 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
16470 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65     /// Calls the
16480 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63   native SQLite c
16490 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f  ore library in o
164a0 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20  rder to declare 
164b0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  a virtual table.
164c0 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f  .    /// functio
164d0 6e 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  n in response to
164e0 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65   a call into the
164f0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
16500 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
16510 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20  xCreate" />..   
16520 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72 65   /// or <see cre
16530 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
16540 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22  Module.xConnect"
16550 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c   /> virtual tabl
16560 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20  e methods...    
16570 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
16580 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
16590 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
165a0 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74 75     /// The virtu
165b0 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20  al table module 
165c0 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 72 65  that is to be re
165d0 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68  sponsible for th
165e0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  e virtual table.
165f0 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f  .    /// functio
16600 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64  n being declared
16610 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
16620 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
16630 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65  ram name="argume
16640 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 2f  ntCount">..    /
16650 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
16660 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
16670 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67  e function being
16680 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
16690 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
166a0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
166b0 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f  e="name">..    /
166c0 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
166d0 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e  he function bein
166e0 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20  g declared...   
166f0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
16700 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
16710 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20  me="error">..   
16720 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
16730 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  s, the contents 
16740 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  of this paramete
16750 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e  r are undefined.
16760 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d    Upon failure,.
16770 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75  .    /// it shou
16780 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70  ld contain an ap
16790 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20  propriate error 
167a0 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f  message...    //
167b0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
167c0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
167d0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
167e0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
167f0 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
16800 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
16810 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
16820 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
16830 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 46   DeclareVirtualF
16840 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
16850 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d    SQLiteModule m
16860 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  odule,..        
16870 69 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e  int argumentCoun
16880 74 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  t,..        stri
16890 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
168a0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
168b0 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  or..        ).. 
168c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
168d0 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
168e0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
168f0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
16900 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20  "connection has 
16910 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
16920 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
16930 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
16940 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a  rorCode.Error;..
16950 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16960 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e 61 6d       IntPtr pNam
16970 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  e = IntPtr.Zero;
16980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
16990 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
169a0 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20          pName = 
169b0 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
169c0 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
169d0 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  g(name);....    
169e0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
169f0 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
16a00 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
16a10 73 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64  sqlite3_overload
16a20 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  _function(..    
16a30 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
16a40 2c 20 70 4e 61 6d 65 2c 20 61 72 67 75 6d 65 6e  , pName, argumen
16a50 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  tCount);....    
16a60 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
16a70 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
16a80 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74  .Ok) error = Get
16a90 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a  LastError();....
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
16ab0 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rn n;..        }
16ac0 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
16ad0 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
16ae0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 4e            if (pN
16af0 61 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ame != IntPtr.Ze
16b00 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
16b10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16b20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79      SQLiteMemory
16b30 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d 0a 20  .Free(pName);.. 
16b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
16b50 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65  Name = IntPtr.Ze
16b60 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
16b70 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
16b80 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
16b90 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
16ba0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 42 75 69 6c 64  >..    /// Build
16bb0 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
16bc0 67 65 20 73 74 72 69 6e 67 20 66 72 61 67 6d 65  ge string fragme
16bd0 6e 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  nt containing th
16be0 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 65 66 69 6e  e..    /// defin
16bf0 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ed values of the
16c00 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
16c10 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 22  teStatusOpsEnum"
16c20 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 65 6e 75   />..    /// enu
16c30 6d 65 72 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  meration...    /
16c40 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
16c50 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
16c60 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 62 75  ..    /// The bu
16c70 69 6c 74 20 73 74 72 69 6e 67 20 66 72 61 67 6d  ilt string fragm
16c80 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent...    /// </
16c90 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
16ca0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
16cb0 69 6e 67 20 47 65 74 53 74 61 74 75 73 44 62 4f  ing GetStatusDbO
16cc0 70 73 4e 61 6d 65 73 28 29 0d 0a 20 20 20 20 7b  psNames()..    {
16cd0 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67  ..        String
16ce0 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72 20  Builder builder 
16cf0 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
16d00 64 65 72 28 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  der();....#if !P
16d10 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
16d20 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
16d30 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e    foreach (strin
16d40 67 20 6e 61 6d 65 20 69 6e 20 45 6e 75 6d 2e 47  g name in Enum.G
16d50 65 74 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  etNames(..      
16d60 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
16d70 28 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73  (SQLiteStatusOps
16d80 45 6e 75 6d 29 29 29 0d 0a 20 20 20 20 20 20 20  Enum)))..       
16d90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16da0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
16db0 6c 4f 72 45 6d 70 74 79 28 6e 61 6d 65 29 29 0d  lOrEmpty(name)).
16dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16dd0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
16de0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 75            if (bu
16df0 69 6c 64 65 72 2e 4c 65 6e 67 74 68 20 3e 20 30  ilder.Length > 0
16e00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16e10 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
16e20 64 28 22 2c 20 22 29 3b 0d 0a 0d 0a 20 20 20 20  d(", ");....    
16e30 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
16e40 41 70 70 65 6e 64 28 6e 61 6d 65 29 3b 0d 0a 20  Append(name);.. 
16e50 20 20 20 20 20 20 20 7d 0d 0a 23 65 6c 73 65 0d         }..#else.
16e60 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
16e70 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 55 70       // TODO: Up
16e80 64 61 74 65 20 74 68 69 73 20 6c 69 73 74 20 69  date this list i
16e90 66 20 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20  f the available 
16ea0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 0d 0a 20  values in the.. 
16eb0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
16ec0 22 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f  "SQLiteConfigDbO
16ed0 70 73 45 6e 75 6d 22 20 65 6e 75 6d 65 72 61 74  psEnum" enumerat
16ee0 69 6f 6e 20 63 68 61 6e 67 65 2e 0d 0a 20 20 20  ion change...   
16ef0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
16f00 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46   builder.AppendF
16f10 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
16f20 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
16f30 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
16f40 20 22 7b 30 7d 2c 20 7b 31 7d 2c 20 7b 32 7d 2c   "{0}, {1}, {2},
16f50 20 7b 33 7d 2c 20 7b 34 7d 2c 20 7b 35 7d 2c 20   {3}, {4}, {5}, 
16f60 7b 36 7d 2c 20 7b 37 7d 2c 20 7b 38 7d 2c 20 7b  {6}, {7}, {8}, {
16f70 39 7d 2c 20 7b 31 30 7d 2c 20 7b 31 31 7d 22 2c  9}, {10}, {11}",
16f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
16f90 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75  LiteStatusOpsEnu
16fa0 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  m.SQLITE_DBSTATU
16fb0 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 55 53 45 44  S_LOOKASIDE_USED
16fc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ,..            S
16fd0 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e  QLiteStatusOpsEn
16fe0 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41 54  um.SQLITE_DBSTAT
16ff0 55 53 5f 43 41 43 48 45 5f 55 53 45 44 2c 0d 0a  US_CACHE_USED,..
17000 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
17010 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 2e  teStatusOpsEnum.
17020 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
17030 53 43 48 45 4d 41 5f 55 53 45 44 2c 0d 0a 20 20  SCHEMA_USED,..  
17040 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
17050 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53 51  StatusOpsEnum.SQ
17060 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 53 54  LITE_DBSTATUS_ST
17070 4d 54 5f 55 53 45 44 2c 0d 0a 20 20 20 20 20 20  MT_USED,..      
17080 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
17090 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  usOpsEnum.SQLITE
170a0 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53  _DBSTATUS_LOOKAS
170b0 49 44 45 5f 48 49 54 2c 0d 0a 20 20 20 20 20 20  IDE_HIT,..      
170c0 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
170d0 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  usOpsEnum.SQLITE
170e0 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53  _DBSTATUS_LOOKAS
170f0 49 44 45 5f 4d 49 53 53 5f 53 49 5a 45 2c 0d 0a  IDE_MISS_SIZE,..
17100 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
17110 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 2e  teStatusOpsEnum.
17120 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
17130 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53 5f 46  LOOKASIDE_MISS_F
17140 55 4c 4c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ULL,..          
17150 20 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70    SQLiteStatusOp
17160 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53  sEnum.SQLITE_DBS
17170 54 41 54 55 53 5f 43 41 43 48 45 5f 48 49 54 2c  TATUS_CACHE_HIT,
17180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
17190 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75  LiteStatusOpsEnu
171a0 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  m.SQLITE_DBSTATU
171b0 53 5f 43 41 43 48 45 5f 4d 49 53 53 2c 0d 0a 20  S_CACHE_MISS,.. 
171c0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
171d0 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53  eStatusOpsEnum.S
171e0 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43  QLITE_DBSTATUS_C
171f0 41 43 48 45 5f 57 52 49 54 45 2c 0d 0a 20 20 20  ACHE_WRITE,..   
17200 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53           SQLiteS
17210 74 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c  tatusOpsEnum.SQL
17220 49 54 45 5f 44 42 53 54 41 54 55 53 5f 44 45 46  ITE_DBSTATUS_DEF
17230 45 52 52 45 44 5f 46 4b 53 2c 0d 0a 20 20 20 20  ERRED_FKS,..    
17240 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
17250 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  atusOpsEnum.SQLI
17260 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48  TE_DBSTATUS_CACH
17270 45 5f 55 53 45 44 5f 53 48 41 52 45 44 29 3b 0d  E_USED_SHARED);.
17280 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
17290 20 20 20 72 65 74 75 72 6e 20 62 75 69 6c 64 65     return builde
172a0 72 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  r.ToString();.. 
172b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
172c0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
172d0 2f 2f 20 42 75 69 6c 64 73 20 61 6e 20 65 72 72  // Builds an err
172e0 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
172f0 67 20 66 72 61 67 6d 65 6e 74 20 63 6f 6e 74 61  g fragment conta
17300 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 2f  ining the..    /
17310 2f 2f 20 64 65 66 69 6e 65 64 20 76 61 6c 75 65  // defined value
17320 73 20 6f 66 20 74 68 65 20 3c 73 65 65 20 63 72  s of the <see cr
17330 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 66 69 67  ef="SQLiteConfig
17340 44 62 4f 70 73 45 6e 75 6d 22 20 2f 3e 0d 0a 20  DbOpsEnum" />.. 
17350 20 20 20 2f 2f 2f 20 65 6e 75 6d 65 72 61 74 69     /// enumerati
17360 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
17370 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
17380 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
17390 2f 2f 2f 20 54 68 65 20 62 75 69 6c 74 20 73 74  /// The built st
173a0 72 69 6e 67 20 66 72 61 67 6d 65 6e 74 2e 0d 0a  ring fragment...
173b0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
173c0 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  s>..    private 
173d0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
173e0 74 43 6f 6e 66 69 67 44 62 4f 70 73 4e 61 6d 65  tConfigDbOpsName
173f0 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  s()..    {..    
17400 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
17410 72 20 62 75 69 6c 64 65 72 20 3d 20 6e 65 77 20  r builder = new 
17420 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
17430 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
17440 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
17450 52 4b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65  RK..        fore
17460 61 63 68 20 28 73 74 72 69 6e 67 20 6e 61 6d 65  ach (string name
17470 20 69 6e 20 45 6e 75 6d 2e 47 65 74 4e 61 6d 65   in Enum.GetName
17480 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
17490 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
174a0 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
174b0 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  )))..        {..
174c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
174d0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
174e0 6d 70 74 79 28 6e 61 6d 65 29 29 0d 0a 20 20 20  mpty(name))..   
174f0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17500 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
17510 20 20 20 20 20 20 69 66 20 28 62 75 69 6c 64 65        if (builde
17520 72 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20  r.Length > 0).. 
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
17540 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 2c  uilder.Append(",
17550 20 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   ");....        
17560 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65      builder.Appe
17570 6e 64 28 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  nd(name);..     
17580 20 20 20 7d 0d 0a 23 65 6c 73 65 0d 0a 20 20 20     }..#else..   
17590 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
175a0 20 2f 2f 20 54 4f 44 4f 3a 20 55 70 64 61 74 65   // TODO: Update
175b0 20 74 68 69 73 20 6c 69 73 74 20 69 66 20 74 68   this list if th
175c0 65 20 61 76 61 69 6c 61 62 6c 65 20 76 61 6c 75  e available valu
175d0 65 73 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  es in the..     
175e0 20 20 20 2f 2f 20 20 20 20 20 20 20 22 53 51 4c     //       "SQL
175f0 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e  iteConfigDbOpsEn
17600 75 6d 22 20 65 6e 75 6d 65 72 61 74 69 6f 6e 20  um" enumeration 
17610 63 68 61 6e 67 65 2e 0d 0a 20 20 20 20 20 20 20  change...       
17620 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 62 75 69   //..        bui
17630 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61  lder.AppendForma
17640 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
17650 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d  variantCulture,.
17660 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30  .            "{0
17670 7d 2c 20 7b 31 7d 2c 20 7b 32 7d 2c 20 7b 33 7d  }, {1}, {2}, {3}
17680 2c 20 7b 34 7d 2c 20 7b 35 7d 2c 20 7b 36 7d 2c  , {4}, {5}, {6},
17690 20 7b 37 7d 2c 20 7b 38 7d 2c 20 7b 39 7d 22 2c   {7}, {8}, {9}",
176a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
176b0 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
176c0 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
176d0 46 49 47 5f 4e 4f 4e 45 2c 0d 0a 20 20 20 20 20  FIG_NONE,..     
176e0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
176f0 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
17700 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4d 41 49  ITE_DBCONFIG_MAI
17710 4e 44 42 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20  NDBNAME,..      
17720 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
17730 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  igDbOpsEnum.SQLI
17740 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4c 4f 4f 4b  TE_DBCONFIG_LOOK
17750 41 53 49 44 45 2c 0d 0a 20 20 20 20 20 20 20 20  ASIDE,..        
17760 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67      SQLiteConfig
17770 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  DbOpsEnum.SQLITE
17780 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45  _DBCONFIG_ENABLE
17790 5f 46 4b 45 59 2c 0d 0a 20 20 20 20 20 20 20 20  _FKEY,..        
177a0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67      SQLiteConfig
177b0 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  DbOpsEnum.SQLITE
177c0 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45  _DBCONFIG_ENABLE
177d0 5f 54 52 49 47 47 45 52 2c 0d 0a 20 20 20 20 20  _TRIGGER,..     
177e0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
177f0 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
17800 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41  ITE_DBCONFIG_ENA
17810 42 4c 45 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a  BLE_FTS3_TOKENIZ
17820 45 52 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ER,..           
17830 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f   SQLiteConfigDbO
17840 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
17850 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 4c 4f  CONFIG_ENABLE_LO
17860 41 44 5f 45 58 54 45 4e 53 49 4f 4e 2c 0d 0a 20  AD_EXTENSION,.. 
17870 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
17880 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
17890 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47  .SQLITE_DBCONFIG
178a0 5f 4e 4f 5f 43 4b 50 54 5f 4f 4e 5f 43 4c 4f 53  _NO_CKPT_ON_CLOS
178b0 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  E,..            
178c0 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70  SQLiteConfigDbOp
178d0 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43  sEnum.SQLITE_DBC
178e0 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 51 50 53  ONFIG_ENABLE_QPS
178f0 47 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  G,..            
17900 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70  SQLiteConfigDbOp
17910 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43  sEnum.SQLITE_DBC
17920 4f 4e 46 49 47 5f 54 52 49 47 47 45 52 5f 45 51  ONFIG_TRIGGER_EQ
17930 50 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  P);..#endif.... 
17940 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 75         return bu
17950 69 6c 64 65 72 2e 54 6f 53 74 72 69 6e 67 28 29  ilder.ToString()
17960 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
17970 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
17980 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
17990 68 65 20 63 75 72 72 65 6e 74 20 61 6e 64 2f 6f  he current and/o
179a0 72 20 68 69 67 68 77 61 74 65 72 20 76 61 6c 75  r highwater valu
179b0 65 73 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  es for the speci
179c0 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  fied..    /// da
179d0 74 61 62 61 73 65 20 73 74 61 74 75 73 20 70 61  tabase status pa
179e0 72 61 6d 65 74 65 72 2e 0d 0a 20 20 20 20 2f 2f  rameter...    //
179f0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
17a00 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
17a10 65 3d 22 6f 70 74 69 6f 6e 22 3e 0d 0a 20 20 20  e="option">..   
17a20 20 2f 2f 2f 20 54 68 65 20 64 61 74 61 62 61 73   /// The databas
17a30 65 20 73 74 61 74 75 73 20 70 61 72 61 6d 65 74  e status paramet
17a40 65 72 20 74 6f 20 71 75 65 72 79 2e 0d 0a 20 20  er to query...  
17a50 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
17a60 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
17a70 61 6d 65 3d 22 72 65 73 65 74 22 3e 0d 0a 20 20  ame="reset">..  
17a80 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74    /// Non-zero t
17a90 6f 20 72 65 73 65 74 20 74 68 65 20 68 69 67 68  o reset the high
17aa0 77 61 74 65 72 20 76 61 6c 75 65 20 74 6f 20 74  water value to t
17ab0 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
17ac0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
17ad0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
17ae0 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72 72 65 6e  ram name="curren
17af0 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20  t">..    /// If 
17b00 61 70 70 6c 69 63 61 62 6c 65 2c 20 72 65 63 65  applicable, rece
17b10 69 76 65 73 20 74 68 65 20 63 75 72 72 65 6e 74  ives the current
17b20 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f   value...    ///
17b30 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
17b40 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
17b50 68 69 67 68 77 61 74 65 72 22 3e 0d 0a 20 20 20  highwater">..   
17b60 20 2f 2f 2f 20 49 66 20 61 70 70 6c 69 63 61 62   /// If applicab
17b70 6c 65 2c 20 72 65 63 65 69 76 65 73 20 74 68 65  le, receives the
17b80 20 68 69 67 68 77 61 74 65 72 20 76 61 6c 75 65   highwater value
17b90 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
17ba0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
17bb0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
17bc0 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
17bd0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
17be0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
17bf0 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
17c00 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
17c10 45 72 72 6f 72 43 6f 64 65 20 47 65 74 53 74 61  ErrorCode GetSta
17c20 74 75 73 50 61 72 61 6d 65 74 65 72 28 0d 0a 20  tusParameter(.. 
17c30 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
17c40 74 75 73 4f 70 73 45 6e 75 6d 20 6f 70 74 69 6f  tusOpsEnum optio
17c50 6e 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  n,..        bool
17c60 20 72 65 73 65 74 2c 0d 0a 20 20 20 20 20 20 20   reset,..       
17c70 20 72 65 66 20 69 6e 74 20 63 75 72 72 65 6e 74   ref int current
17c80 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 69  ,..        ref i
17c90 6e 74 20 68 69 67 68 77 61 74 65 72 0d 0a 20 20  nt highwater..  
17ca0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
17cb0 20 20 20 20 20 20 20 20 69 66 20 28 21 45 6e 75          if (!Enu
17cc0 6d 2e 49 73 44 65 66 69 6e 65 64 28 74 79 70 65  m.IsDefined(type
17cd0 6f 66 28 53 51 4c 69 74 65 53 74 61 74 75 73 4f  of(SQLiteStatusO
17ce0 70 73 45 6e 75 6d 29 2c 20 6f 70 74 69 6f 6e 29  psEnum), option)
17cf0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
17d00 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
17d10 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
17d20 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ion(HelperMethod
17d30 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
17d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d50 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
17d60 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75                "u
17d80 6e 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 61 74  nrecognized stat
17d90 75 73 20 6f 70 74 69 6f 6e 2c 20 6d 75 73 74 20  us option, must 
17da0 62 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  be: {0}",..     
17db0 20 20 20 20 20 20 20 20 20 20 20 47 65 74 53 74             GetSt
17dc0 61 74 75 73 44 62 4f 70 73 4e 61 6d 65 73 28 29  atusDbOpsNames()
17dd0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
17de0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
17df0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
17e00 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f  hods.sqlite3_db_
17e10 73 74 61 74 75 73 28 0d 0a 20 20 20 20 20 20 20  status(..       
17e20 20 20 20 20 20 5f 73 71 6c 2c 20 6f 70 74 69 6f       _sql, optio
17e30 6e 2c 20 72 65 66 20 63 75 72 72 65 6e 74 2c 20  n, ref current, 
17e40 72 65 66 20 68 69 67 68 77 61 74 65 72 2c 20 72  ref highwater, r
17e50 65 73 65 74 20 3f 20 31 20 3a 20 30 29 3b 0d 0a  eset ? 1 : 0);..
17e60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
17e70 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
17e80 2f 2f 2f 20 43 68 61 6e 67 65 20 61 20 63 6f 6e  /// Change a con
17e90 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
17ea0 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  n value for the 
17eb0 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f  database...    /
17ec0 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  // connection...
17ed0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
17ee0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
17ef0 61 6d 20 6e 61 6d 65 3d 22 6f 70 74 69 6f 6e 22  am name="option"
17f00 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 64  >..    /// The d
17f10 61 74 61 62 61 73 65 20 63 6f 6e 66 69 67 75 72  atabase configur
17f20 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 20 74 6f 20  ation option to 
17f30 63 68 61 6e 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f  change...    ///
17f40 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
17f50 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
17f60 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  value">..    ///
17f70 20 54 68 65 20 6e 65 77 20 76 61 6c 75 65 20 66   The new value f
17f80 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64  or the specified
17f90 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
17fa0 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ption...    /// 
17fb0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
17fc0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
17fd0 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
17fe0 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
17ff0 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  de...    /// </r
18000 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
18010 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
18020 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
18030 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 4f  etConfigurationO
18040 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
18050 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70  SQLiteConfigDbOp
18060 73 45 6e 75 6d 20 6f 70 74 69 6f 6e 2c 0d 0a 20  sEnum option,.. 
18070 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
18080 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  lue..        )..
18090 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
180a0 66 20 28 21 45 6e 75 6d 2e 49 73 44 65 66 69 6e  f (!Enum.IsDefin
180b0 65 64 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65  ed(typeof(SQLite
180c0 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 29  ConfigDbOpsEnum)
180d0 2c 20 6f 70 74 69 6f 6e 29 29 0d 0a 20 20 20 20  , option))..    
180e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
180f0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
18100 69 74 65 45 78 63 65 70 74 69 6f 6e 28 48 65 6c  iteException(Hel
18110 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
18120 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
18130 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
18140 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
18150 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
18160 20 20 20 20 20 20 20 22 75 6e 72 65 63 6f 67 6e         "unrecogn
18170 69 7a 65 64 20 63 6f 6e 66 69 67 75 72 61 74 69  ized configurati
18180 6f 6e 20 6f 70 74 69 6f 6e 2c 20 6d 75 73 74 20  on option, must 
18190 62 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  be: {0}",..     
181a0 20 20 20 20 20 20 20 20 20 20 20 47 65 74 43 6f             GetCo
181b0 6e 66 69 67 44 62 4f 70 73 4e 61 6d 65 73 28 29  nfigDbOpsNames()
181c0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
181d0 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68  ..        switch
181e0 20 28 6f 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20   (option)..     
181f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18200 20 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e    case SQLiteCon
18210 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
18220 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4e 4f 4e  ITE_DBCONFIG_NON
18230 45 3a 20 2f 2f 20 6e 69 6c 0d 0a 20 20 20 20 20  E: // nil..     
18240 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
18270 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
18280 45 3a 20 44 6f 20 6e 6f 74 68 69 6e 67 2c 20 72  E: Do nothing, r
18290 65 74 75 72 6e 20 73 75 63 63 65 73 73 2e 0d 0a  eturn success...
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
182c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
182d0 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
182e0 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20  de.Ok;..        
182f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
18300 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
18310 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
18320 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  m.SQLITE_DBCONFI
18330 47 5f 4d 41 49 4e 44 42 4e 41 4d 45 3a 20 2f 2f  G_MAINDBNAME: //
18340 20 63 68 61 72 2a 0d 0a 20 20 20 20 20 20 20 20   char*..        
18350 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18370 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
18380 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18390 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
183a0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
183b0 6c 45 78 63 65 70 74 69 6f 6e 28 22 76 61 6c 75  lException("valu
183c0 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
183d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
183e0 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e  !(value is strin
183f0 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
18400 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18420 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
18430 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 48 65  LiteException(He
18440 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
18450 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
18460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18470 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
18480 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
18490 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184b0 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76  "configuration v
184c0 61 6c 75 65 20 74 79 70 65 20 6d 69 73 6d 61 74  alue type mismat
184d0 63 68 2c 20 6d 75 73 74 20 62 65 20 6f 66 20 74  ch, must be of t
184e0 79 70 65 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ype {0}",..     
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18500 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 73 74         typeof(st
18510 72 69 6e 67 29 29 29 3b 0d 0a 20 20 20 20 20 20  ring)));..      
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18530 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18540 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
18550 6f 72 43 6f 64 65 20 72 63 20 3d 20 53 51 4c 69  orCode rc = SQLi
18560 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
18570 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
18580 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
18590 44 62 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e  DbName = IntPtr.
185a0 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
185c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
185d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
185e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185f0 20 70 44 62 4e 61 6d 65 20 3d 20 53 51 4c 69 74   pDbName = SQLit
18600 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50  eString.Utf8IntP
18610 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20  trFromString(.. 
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18630 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
18640 6e 67 29 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20  ng)value);....  
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18660 20 20 20 20 20 20 69 66 20 28 70 44 62 4e 61 6d        if (pDbNam
18670 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e == IntPtr.Zero
18680 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18690 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186b0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
186c0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
186d0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186f0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
18700 72 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 0d 0a 20 20  rCode.NoMem,..  
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
18730 61 6e 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 20 64  annot allocate d
18740 61 74 61 62 61 73 65 20 6e 61 6d 65 22 29 3b 0d  atabase name");.
18750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18760 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
18770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18780 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
18790 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
187a0 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67  qlite3_db_config
187b0 5f 63 68 61 72 70 74 72 28 0d 0a 20 20 20 20 20  _charptr(..     
187c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187d0 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 6f 70 74         _sql, opt
187e0 69 6f 6e 2c 20 70 44 62 4e 61 6d 65 29 3b 0d 0a  ion, pDbName);..
187f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18800 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
18810 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
18820 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
18830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18840 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 46 72 65 65 44 62 4e 61 6d 65 28 74 72 75 65 29  FreeDbName(true)
18870 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18890 20 64 62 4e 61 6d 65 20 3d 20 70 44 62 4e 61 6d   dbName = pDbNam
188a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188c0 70 44 62 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72  pDbName = IntPtr
188d0 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18900 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
18920 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
18930 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 20 20 20 20 20 20 69 66 20 28 28 72 63 20 21 3d        if ((rc !=
18960 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
18970 2e 4f 6b 29 20 26 26 0d 0a 20 20 20 20 20 20 20  .Ok) &&..       
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18990 20 20 20 20 20 28 70 44 62 4e 61 6d 65 20 21 3d       (pDbName !=
189a0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a   IntPtr.Zero))..
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
189f0 6f 72 79 2e 46 72 65 65 28 70 44 62 4e 61 6d 65  ory.Free(pDbName
18a00 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 70 44 62 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72  pDbName = IntPtr
18a30 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18a60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a80 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
18a90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
18aa0 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
18ab0 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70  SQLiteConfigDbOp
18ac0 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43  sEnum.SQLITE_DBC
18ad0 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45 3a  ONFIG_LOOKASIDE:
18ae0 20 2f 2f 20 76 6f 69 64 2a 20 69 6e 74 20 69 6e   // void* int in
18af0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
18b00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18b10 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
18b20 5b 5d 20 61 72 72 61 79 20 3d 20 76 61 6c 75 65  [] array = value
18b30 20 61 73 20 6f 62 6a 65 63 74 5b 5d 3b 0d 0a 0d   as object[];...
18b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b50 20 20 20 20 20 69 66 20 28 61 72 72 61 79 20 3d       if (array =
18b60 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b90 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
18ba0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
18bb0 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  n(HelperMethods.
18bc0 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18be0 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
18bf0 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
18c00 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
18c30 6f 6e 20 76 61 6c 75 65 20 74 79 70 65 20 6d 69  on value type mi
18c40 73 6d 61 74 63 68 2c 20 6d 75 73 74 20 62 65 20  smatch, must be 
18c50 6f 66 20 74 79 70 65 20 7b 30 7d 22 2c 0d 0a 20  of type {0}",.. 
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c70 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
18c80 66 28 6f 62 6a 65 63 74 5b 5d 29 29 29 3b 0d 0a  f(object[])));..
18c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ca0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18cc0 28 21 28 61 72 72 61 79 5b 30 5d 20 69 73 20 49  (!(array[0] is I
18cd0 6e 74 50 74 72 29 29 0d 0a 20 20 20 20 20 20 20  ntPtr))..       
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d00 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
18d10 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
18d20 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  n(HelperMethods.
18d30 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
18d60 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
18d70 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
18da0 6f 6e 20 65 6c 65 6d 65 6e 74 20 7a 65 72 6f 20  on element zero 
18db0 28 30 29 20 74 79 70 65 20 6d 69 73 6d 61 74 63  (0) type mismatc
18dc0 68 2c 20 6d 75 73 74 20 62 65 20 6f 66 20 74 79  h, must be of ty
18dd0 70 65 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  pe {0}",..      
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18df0 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e 74        typeof(Int
18e00 50 74 72 29 29 29 3b 0d 0a 20 20 20 20 20 20 20  Ptr)));..       
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e30 20 20 20 20 20 20 69 66 20 28 21 28 61 72 72 61        if (!(arra
18e40 79 5b 31 5d 20 69 73 20 69 6e 74 29 29 0d 0a 20  y[1] is int)).. 
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18e80 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
18e90 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65  ception(HelperMe
18ea0 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
18eb0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
18ee0 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f00 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
18f10 67 75 72 61 74 69 6f 6e 20 65 6c 65 6d 65 6e 74  guration element
18f20 20 6f 6e 65 20 28 31 29 20 74 79 70 65 20 6d 69   one (1) type mi
18f30 73 6d 61 74 63 68 2c 20 6d 75 73 74 20 62 65 20  smatch, must be 
18f40 6f 66 20 74 79 70 65 20 7b 30 7d 22 2c 0d 0a 20  of type {0}",.. 
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
18f70 66 28 69 6e 74 29 29 29 3b 0d 0a 20 20 20 20 20  f(int)));..     
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18f90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18fa0 20 20 20 20 20 20 20 20 69 66 20 28 21 28 61 72          if (!(ar
18fb0 72 61 79 5b 32 5d 20 69 73 20 69 6e 74 29 29 0d  ray[2] is int)).
18fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18fd0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
19000 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72  Exception(Helper
19010 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
19020 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19040 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
19050 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
19080 66 69 67 75 72 61 74 69 6f 6e 20 65 6c 65 6d 65  figuration eleme
19090 6e 74 20 74 77 6f 20 28 32 29 20 74 79 70 65 20  nt two (2) type 
190a0 6d 69 73 6d 61 74 63 68 2c 20 6d 75 73 74 20 62  mismatch, must b
190b0 65 20 6f 66 20 74 79 70 65 20 7b 30 7d 22 2c 0d  e of type {0}",.
190c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
190e0 65 6f 66 28 69 6e 74 29 29 29 3b 0d 0a 20 20 20  eof(int)));..   
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19110 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
19120 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
19130 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f  hods.sqlite3_db_
19140 63 6f 6e 66 69 67 5f 69 6e 74 70 74 72 5f 74 77  config_intptr_tw
19150 6f 5f 69 6e 74 73 28 0d 0a 20 20 20 20 20 20 20  o_ints(..       
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19170 20 5f 73 71 6c 2c 20 6f 70 74 69 6f 6e 2c 20 28   _sql, option, (
19180 49 6e 74 50 74 72 29 61 72 72 61 79 5b 30 5d 2c  IntPtr)array[0],
19190 20 28 69 6e 74 29 61 72 72 61 79 5b 31 5d 2c 20   (int)array[1], 
191a0 28 69 6e 74 29 61 72 72 61 79 5b 32 5d 29 3b 0d  (int)array[2]);.
191b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
191c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
191d0 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e 66 69  case SQLiteConfi
191e0 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  gDbOpsEnum.SQLIT
191f0 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c  E_DBCONFIG_ENABL
19200 45 5f 46 4b 45 59 3a 20 2f 2f 20 69 6e 74 20 69  E_FKEY: // int i
19210 6e 74 2a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt*..           
19220 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e 66   case SQLiteConf
19230 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  igDbOpsEnum.SQLI
19240 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42  TE_DBCONFIG_ENAB
19250 4c 45 5f 54 52 49 47 47 45 52 3a 20 2f 2f 20 69  LE_TRIGGER: // i
19260 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20  nt int*..       
19270 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
19280 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e  ConfigDbOpsEnum.
19290 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
192a0 45 4e 41 42 4c 45 5f 46 54 53 33 5f 54 4f 4b 45  ENABLE_FTS3_TOKE
192b0 4e 49 5a 45 52 3a 20 2f 2f 20 69 6e 74 20 69 6e  NIZER: // int in
192c0 74 2a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*..            
192d0 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e 66 69  case SQLiteConfi
192e0 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  gDbOpsEnum.SQLIT
192f0 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c  E_DBCONFIG_ENABL
19300 45 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  E_LOAD_EXTENSION
19310 3a 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20  : // int int*.. 
19320 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
19330 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70  SQLiteConfigDbOp
19340 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43  sEnum.SQLITE_DBC
19350 4f 4e 46 49 47 5f 4e 4f 5f 43 4b 50 54 5f 4f 4e  ONFIG_NO_CKPT_ON
19360 5f 43 4c 4f 53 45 3a 20 2f 2f 20 69 6e 74 20 69  _CLOSE: // int i
19370 6e 74 2a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt*..           
19380 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e 66   case SQLiteConf
19390 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  igDbOpsEnum.SQLI
193a0 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42  TE_DBCONFIG_ENAB
193b0 4c 45 5f 51 50 53 47 3a 20 2f 2f 20 69 6e 74 20  LE_QPSG: // int 
193c0 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20 20 20 20  int*..          
193d0 20 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e    case SQLiteCon
193e0 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
193f0 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 54 52 49  ITE_DBCONFIG_TRI
19400 47 47 45 52 5f 45 51 50 3a 20 2f 2f 20 69 6e 74  GGER_EQP: // int
19410 20 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20 20 20   int*..         
19420 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f     case SQLiteCo
19430 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51  nfigDbOpsEnum.SQ
19440 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 52 45  LITE_DBCONFIG_RE
19450 53 45 54 5f 44 41 54 41 42 41 53 45 3a 20 2f 2f  SET_DATABASE: //
19460 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20 20   int int*..     
19470 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19490 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69 73    if (!(value is
194a0 20 62 6f 6f 6c 29 29 0d 0a 20 20 20 20 20 20 20   bool))..       
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
194e0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
194f0 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  n(HelperMethods.
19500 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19520 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
19530 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
19540 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
19570 6f 6e 20 76 61 6c 75 65 20 74 79 70 65 20 6d 69  on value type mi
19580 73 6d 61 74 63 68 2c 20 6d 75 73 74 20 62 65 20  smatch, must be 
19590 6f 66 20 74 79 70 65 20 7b 30 7d 22 2c 0d 0a 20  of type {0}",.. 
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
195c0 66 28 62 6f 6f 6c 29 29 29 3b 0d 0a 20 20 20 20  f(bool)));..    
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
195f0 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73           int res
19600 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 4e 4f 54 20  ult = 0; /* NOT 
19610 55 53 45 44 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  USED */....     
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19630 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
19640 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
19650 33 5f 64 62 5f 63 6f 6e 66 69 67 5f 69 6e 74 5f  3_db_config_int_
19660 72 65 66 69 6e 74 28 0d 0a 20 20 20 20 20 20 20  refint(..       
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 5f 73 71 6c 2c 20 6f 70 74 69 6f 6e 2c 20 28   _sql, option, (
19690 28 62 6f 6f 6c 29 76 61 6c 75 65 20 3f 20 31 20  (bool)value ? 1 
196a0 3a 20 30 29 2c 20 72 65 66 20 72 65 73 75 6c 74  : 0), ref result
196b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
196c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
196d0 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20     default:..   
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19700 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
19710 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 48 65  LiteException(He
19720 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
19730 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
19740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19750 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
19760 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19780 20 20 20 20 20 20 20 20 22 75 6e 73 75 70 70 6f          "unsuppo
19790 72 74 65 64 20 63 6f 6e 66 69 67 75 72 61 74 69  rted configurati
197a0 6f 6e 20 6f 70 74 69 6f 6e 20 7b 30 7d 22 2c 20  on option {0}", 
197b0 6f 70 74 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20  option));..     
197c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
197d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
197e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
197f0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61  ry>..    /// Ena
19800 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 73  bles or disables
19810 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69   extension loadi
19820 6e 67 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20  ng by SQLite... 
19830 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
19840 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
19850 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e  m name="bOnOff">
19860 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74  ..    /// True t
19870 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67  o enable loading
19880 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20   of extensions, 
19890 66 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65  false to disable
198a0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
198b0 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
198c0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
198d0 53 65 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  SetLoadExtension
198e0 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20  (bool bOnOff).. 
198f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
19900 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b  LiteErrorCode n;
19910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
19920 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d  SQLiteVersionNum
19930 62 65 72 20 3e 3d 20 33 30 31 33 30 30 30 29 0d  ber >= 3013000).
19940 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
19950 20 20 20 20 20 20 20 20 6e 20 3d 20 53 65 74 43          n = SetC
19960 6f 6e 66 69 67 75 72 61 74 69 6f 6e 4f 70 74 69  onfigurationOpti
19970 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
19980 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
19990 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  gDbOpsEnum.SQLIT
199a0 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c  E_DBCONFIG_ENABL
199b0 45 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  E_LOAD_EXTENSION
199c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
199d0 20 20 20 62 4f 6e 4f 66 66 29 3b 0d 0a 20 20 20     bOnOff);..   
199e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
199f0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
19a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
19a10 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
19a20 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 6e 61  hods.sqlite3_ena
19a30 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
19a40 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
19a50 20 20 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f       _sql, (bOnO
19a60 66 66 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a  ff ? -1 : 0));..
19a70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19a80 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
19a90 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
19aa0 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
19ab0 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
19ac0 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
19ad0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
19ae0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
19af0 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53 51 4c   /// Loads a SQL
19b00 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69  ite extension li
19b10 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65 20 6e  brary from the n
19b20 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20  amed file...    
19b30 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
19b40 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
19b50 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e 0d  ame="fileName">.
19b60 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d  .    /// The nam
19b70 65 20 6f 66 20 74 68 65 20 64 79 6e 61 6d 69 63  e of the dynamic
19b80 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20 66 69   link library fi
19b90 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
19ba0 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20  e extension...  
19bb0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
19bc0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
19bd0 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65 22 3e 0d  ame="procName">.
19be0 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d  .    /// The nam
19bf0 65 20 6f 66 20 74 68 65 20 65 78 70 6f 72 74 65  e of the exporte
19c00 64 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64 20  d function used 
19c10 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68  to initialize th
19c20 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20  e extension...  
19c30 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20 74    /// If null, t
19c40 68 65 20 64 65 66 61 75 6c 74 20 22 73 71 6c 69  he default "sqli
19c50 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e  te3_extension_in
19c60 69 74 22 20 77 69 6c 6c 20 62 65 20 75 73 65 64  it" will be used
19c70 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
19c80 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
19c90 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
19ca0 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 73 74  LoadExtension(st
19cb0 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 20 73  ring fileName, s
19cc0 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65 29 0d  tring procName).
19cd0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
19ce0 69 66 20 28 66 69 6c 65 4e 61 6d 65 20 3d 3d 20  if (fileName == 
19cf0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
19d00 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
19d10 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
19d20 6f 6e 28 22 66 69 6c 65 4e 61 6d 65 22 29 3b 0d  on("fileName");.
19d30 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
19d40 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74  r pError = IntPt
19d50 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
19d60 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
19d70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
19d80 79 74 65 5b 5d 20 75 74 66 38 46 69 6c 65 4e 61  yte[] utf8FileNa
19d90 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64 69 6e  me = UTF8Encodin
19da0 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65 73 28  g.UTF8.GetBytes(
19db0 66 69 6c 65 4e 61 6d 65 20 2b 20 27 5c 30 27 29  fileName + '\0')
19dc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ;..            b
19dd0 79 74 65 5b 5d 20 75 74 66 38 50 72 6f 63 4e 61  yte[] utf8ProcNa
19de0 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  me = null;....  
19df0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 72            if (pr
19e00 6f 63 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d  ocName != null).
19e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19e20 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20   utf8ProcName = 
19e30 55 54 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46  UTF8Encoding.UTF
19e40 38 2e 47 65 74 42 79 74 65 73 28 70 72 6f 63 4e  8.GetBytes(procN
19e50 61 6d 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 0d 0a  ame + '\0');....
19e60 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
19e70 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
19e80 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
19e90 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 61 64  ods.sqlite3_load
19ea0 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20  _extension(..   
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
19ec0 6c 2c 20 75 74 66 38 46 69 6c 65 4e 61 6d 65 2c  l, utf8FileName,
19ed0 20 75 74 66 38 50 72 6f 63 4e 61 6d 65 2c 20 72   utf8ProcName, r
19ee0 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  ef pError);.... 
19ef0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
19f00 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
19f10 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
19f20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
19f30 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
19f40 6f 6e 28 6e 2c 20 55 54 46 38 54 6f 53 74 72 69  on(n, UTF8ToStri
19f50 6e 67 28 70 45 72 72 6f 72 2c 20 2d 31 29 29 3b  ng(pError, -1));
19f60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
19f70 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
19f80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19f90 20 20 20 20 20 69 66 20 28 70 45 72 72 6f 72 20       if (pError 
19fa0 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
19fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
19fe0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 66 72 65 65  ods.sqlite3_free
19ff0 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  (pError);..     
1a000 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f             pErro
1a010 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
1a020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1a030 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1a040 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61  }....    /// Ena
1a050 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64  bles or disabled
1a060 20 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74   extended result
1a070 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65 64 20   codes returned 
1a080 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 69  by SQLite..    i
1a090 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1a0a0 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e 64 65   void SetExtende
1a0b0 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f  dResultCodes(boo
1a0c0 6c 20 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b  l bOnOff)..    {
1a0d0 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
1a0e0 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
1a0f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1a100 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
1a110 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 0d 0a  _result_codes(..
1a120 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
1a130 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30  (bOnOff ? -1 : 0
1a140 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ));....      if 
1a150 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
1a160 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
1a170 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
1a180 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
1a190 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
1a1a0 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74 68 65      /// Gets the
1a1b0 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65 72 72   last SQLite err
1a1c0 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74  or code..    int
1a1d0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
1a1e0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52  QLiteErrorCode R
1a1f0 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20  esultCode()..   
1a200 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
1a210 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1a220 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 72 72  hods.sqlite3_err
1a230 63 6f 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20  code(_sql);..   
1a240 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73   }..    /// Gets
1a250 20 74 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65   the last SQLite
1a260 20 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20   extended error 
1a270 63 6f 64 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e  code..    intern
1a280 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
1a290 74 65 45 72 72 6f 72 43 6f 64 65 20 45 78 74 65  teErrorCode Exte
1a2a0 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29  ndedResultCode()
1a2b0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
1a2c0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
1a2d0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1a2e0 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f  3_extended_errco
1a2f0 64 65 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d  de(_sql);..    }
1a300 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20  ....    /// Add 
1a310 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69  a log message vi
1a320 61 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c  a the SQLite sql
1a330 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61  ite3_log interfa
1a340 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ce...    interna
1a350 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
1a360 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74  LogMessage(SQLit
1a370 65 45 72 72 6f 72 43 6f 64 65 20 69 45 72 72 43  eErrorCode iErrC
1a380 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73  ode, string zMes
1a390 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sage)..    {..  
1a3a0 20 20 20 20 53 74 61 74 69 63 4c 6f 67 4d 65 73      StaticLogMes
1a3b0 73 61 67 65 28 69 45 72 72 43 6f 64 65 2c 20 7a  sage(iErrCode, z
1a3c0 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 7d  Message);..    }
1a3d0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20  ....    /// Add 
1a3e0 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69  a log message vi
1a3f0 61 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c  a the SQLite sql
1a400 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61  ite3_log interfa
1a410 63 65 2e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ce...    interna
1a420 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20 53 74  l static void St
1a430 61 74 69 63 4c 6f 67 4d 65 73 73 61 67 65 28 53  aticLogMessage(S
1a440 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 69  QLiteErrorCode i
1a450 45 72 72 43 6f 64 65 2c 20 73 74 72 69 6e 67 20  ErrCode, string 
1a460 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20 20 20 7b  zMessage)..    {
1a470 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
1a480 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1a490 74 65 33 5f 6c 6f 67 28 69 45 72 72 43 6f 64 65  te3_log(iErrCode
1a4a0 2c 20 54 6f 55 54 46 38 28 7a 4d 65 73 73 61 67  , ToUTF8(zMessag
1a4b0 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23  e));..    }....#
1a4c0 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43  if INTEROP_CODEC
1a4d0 20 7c 7c 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c   || INTEROP_INCL
1a4e0 55 44 45 5f 53 45 45 0d 0a 20 20 20 20 69 6e 74  UDE_SEE..    int
1a4f0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
1a500 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72 64 28  oid SetPassword(
1a510 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42  byte[] passwordB
1a520 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ytes)..    {..  
1a530 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1a540 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
1a550 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1a560 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c 20 70 61  te3_key(_sql, pa
1a570 73 73 77 6f 72 64 42 79 74 65 73 2c 20 70 61 73  sswordBytes, pas
1a580 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74  swordBytes.Lengt
1a590 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  h);..      if (n
1a5a0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
1a5b0 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
1a5c0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
1a5d0 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
1a5e0 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  r());....      i
1a5f0 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20  f (_usePool)..  
1a600 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f      {..        _
1a610 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b  usePool = false;
1a620 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
1a630 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
1a640 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
1a650 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
1a660 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  Line(HelperMetho
1a670 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
1a680 0d 0a 20 20 20 20 20 20 20 20 20 20 43 75 6c 74  ..          Cult
1a690 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
1a6a0 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
1a6b0 20 20 20 22 53 65 74 50 61 73 73 77 6f 72 64 20     "SetPassword 
1a6c0 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65 64 3a  (Pool) Disabled:
1a6d0 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
1a6e0 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
1a6f0 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
1a700 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1a710 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1a720 65 72 72 69 64 65 20 76 6f 69 64 20 43 68 61 6e  erride void Chan
1a730 67 65 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b  gePassword(byte[
1a740 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74  ] newPasswordByt
1a750 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  es)..    {..    
1a760 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1a770 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
1a780 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1a790 33 5f 72 65 6b 65 79 28 5f 73 71 6c 2c 20 6e 65  3_rekey(_sql, ne
1a7a0 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20  wPasswordBytes, 
1a7b0 28 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65  (newPasswordByte
1a7c0 73 20 3d 3d 20 6e 75 6c 6c 29 20 3f 20 30 20 3a  s == null) ? 0 :
1a7d0 20 6e 65 77 50 61 73 73 77 6f 72 64 42 79 74 65   newPasswordByte
1a7e0 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20  s.Length);..    
1a7f0 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
1a800 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
1a810 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
1a820 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
1a830 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a  astError());....
1a840 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f        if (_usePo
1a850 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ol)..      {..  
1a860 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d        _usePool =
1a870 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21   false;....#if !
1a880 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
1a890 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
1a8a0 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63  ON..        Trac
1a8b0 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70  e.WriteLine(Help
1a8c0 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
1a8d0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1a8e0 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
1a8f0 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
1a900 20 20 20 20 20 20 20 20 20 20 22 43 68 61 6e 67            "Chang
1a910 65 50 61 73 73 77 6f 72 64 20 28 50 6f 6f 6c 29  ePassword (Pool)
1a920 20 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c   Disabled: {0}",
1a930 0d 0a 20 20 20 20 20 20 20 20 20 20 48 61 6e 64  ..          Hand
1a940 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  leToString()));.
1a950 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d  .#endif..      }
1a960 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
1a970 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1a980 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
1a990 74 50 72 6f 67 72 65 73 73 48 6f 6f 6b 28 69 6e  tProgressHook(in
1a9a0 74 20 6e 4f 70 73 2c 20 53 51 4c 69 74 65 50 72  t nOps, SQLitePr
1a9b0 6f 67 72 65 73 73 43 61 6c 6c 62 61 63 6b 20 66  ogressCallback f
1a9c0 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  unc)..    {..   
1a9d0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1a9e0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1a9f0 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65  _progress_handle
1aa00 72 28 5f 73 71 6c 2c 20 6e 4f 70 73 2c 20 66 75  r(_sql, nOps, fu
1aa10 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
1aa20 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
1aa30 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1aa40 65 20 76 6f 69 64 20 53 65 74 41 75 74 68 6f 72  e void SetAuthor
1aa50 69 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65 41  izerHook(SQLiteA
1aa60 75 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61 63  uthorizerCallbac
1aa70 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
1aa80 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
1aa90 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1aaa0 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72  3_set_authorizer
1aab0 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
1aac0 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
1aad0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1aae0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
1aaf0 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 53 51  SetUpdateHook(SQ
1ab00 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c 62 61  LiteUpdateCallba
1ab10 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
1ab20 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
1ab30 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1ab40 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 5f  e3_update_hook(_
1ab50 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
1ab60 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
1ab70 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1ab80 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
1ab90 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69  tCommitHook(SQLi
1aba0 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  teCommitCallback
1abb0 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
1abc0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1abd0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1abe0 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 5f 73 71  _commit_hook(_sq
1abf0 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  l, func, IntPtr.
1ac00 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
1ac10 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1ac20 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 54  erride void SetT
1ac30 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c  raceCallback(SQL
1ac40 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  iteTraceCallback
1ac50 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20   func)..    {.. 
1ac60 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1ac70 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1ac80 5f 74 72 61 63 65 28 5f 73 71 6c 2c 20 66 75 6e  _trace(_sql, fun
1ac90 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
1aca0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1acb0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1acc0 20 76 6f 69 64 20 53 65 74 54 72 61 63 65 43 61   void SetTraceCa
1acd0 6c 6c 62 61 63 6b 32 28 53 51 4c 69 74 65 54 72  llback2(SQLiteTr
1ace0 61 63 65 46 6c 61 67 73 20 6d 61 73 6b 2c 20 53  aceFlags mask, S
1acf0 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61  QLiteTraceCallba
1ad00 63 6b 32 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ck2 func)..    {
1ad10 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
1ad20 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1ad30 6c 69 74 65 33 5f 74 72 61 63 65 5f 76 32 28 5f  lite3_trace_v2(_
1ad40 73 71 6c 2c 20 6d 61 73 6b 2c 20 66 75 6e 63 2c  sql, mask, func,
1ad50 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
1ad60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1ad70 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
1ad80 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48  oid SetRollbackH
1ad90 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61  ook(SQLiteRollba
1ada0 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ckCallback func)
1adb0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
1adc0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1add0 64 73 2e 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62  ds.sqlite3_rollb
1ade0 61 63 6b 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66  ack_hook(_sql, f
1adf0 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
1ae00 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
1ae10 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1ae20 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74      /// Allows t
1ae30 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20 61 20  he setting of a 
1ae40 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
1ae50 20 69 6e 76 6f 6b 65 64 20 62 79 20 53 51 4c 69   invoked by SQLi
1ae60 74 65 20 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f  te when a..    /
1ae70 2f 2f 20 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63  // log event occ
1ae80 75 72 73 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63  urs.  Only one c
1ae90 61 6c 6c 62 61 63 6b 20 6d 61 79 20 62 65 20 73  allback may be s
1aea0 65 74 2e 20 20 49 66 20 4e 55 4c 4c 20 69 73 20  et.  If NULL is 
1aeb0 70 61 73 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f  passed,..    ///
1aec0 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c   the logging cal
1aed0 6c 62 61 63 6b 20 69 73 20 75 6e 72 65 67 69 73  lback is unregis
1aee0 74 65 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tered...    /// 
1aef0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1af00 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1af10 22 66 75 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62  "func">The callb
1af20 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  ack function to 
1af30 69 6e 76 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d  invoke.</param>.
1af40 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
1af50 73 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73 75  s>Returns a resu
1af60 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73  lt code</returns
1af70 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1af80 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
1af90 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f 67 43  rrorCode SetLogC
1afa0 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f  allback(SQLiteLo
1afb0 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  gCallback func).
1afc0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1afd0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1afe0 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
1aff0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1b000 5f 63 6f 6e 66 69 67 5f 6c 6f 67 28 0d 0a 20 20  _config_log(..  
1b010 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1b020 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51  ConfigOpsEnum.SQ
1b030 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c  LITE_CONFIG_LOG,
1b040 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65   func, IntPtr.Ze
1b050 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ro);....        
1b060 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
1b070 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
1b080 20 20 20 20 20 20 20 20 20 20 20 5f 73 65 74 4c             _setL
1b090 6f 67 43 61 6c 6c 62 61 63 6b 20 3d 20 28 66 75  ogCallback = (fu
1b0a0 6e 63 20 21 3d 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a  nc != null);....
1b0b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
1b0c0 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
1b0d0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1b0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b130 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
1b140 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
1b150 70 70 65 6e 64 73 20 61 6e 20 65 72 72 6f 72 20  ppends an error 
1b160 6d 65 73 73 61 67 65 20 61 6e 64 20 61 6e 20 61  message and an a
1b170 70 70 72 6f 70 72 69 61 74 65 20 6c 69 6e 65 2d  ppropriate line-
1b180 65 6e 64 69 6e 67 20 74 6f 20 61 20 3c 73 65 65  ending to a <see
1b190 20 63 72 65 66 3d 22 53 74 72 69 6e 67 42 75 69   cref="StringBui
1b1a0 6c 64 65 72 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f  lder" />..    //
1b1b0 2f 20 69 6e 73 74 61 6e 63 65 2e 20 20 54 68 69  / instance.  Thi
1b1c0 73 20 69 73 20 75 73 65 66 75 6c 20 62 65 63 61  s is useful beca
1b1d0 75 73 65 20 74 68 65 20 2e 4e 45 54 20 43 6f 6d  use the .NET Com
1b1e0 70 61 63 74 20 46 72 61 6d 65 77 6f 72 6b 20 68  pact Framework h
1b1f0 61 73 20 61 20 73 6c 69 67 68 74 6c 79 20 64 69  as a slightly di
1b200 66 66 65 72 65 6e 74 20 73 65 74 0d 0a 20 20 20  fferent set..   
1b210 20 2f 2f 2f 20 6f 66 20 73 75 70 70 6f 72 74 65   /// of supporte
1b220 64 20 6d 65 74 68 6f 64 73 20 66 6f 72 20 74 68  d methods for th
1b230 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72  e <see cref="Str
1b240 69 6e 67 42 75 69 6c 64 65 72 22 20 2f 3e 20 63  ingBuilder" /> c
1b250 6c 61 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  lass...    /// <
1b260 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
1b270 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1b280 62 75 69 6c 64 65 72 22 3e 0d 0a 20 20 20 20 2f  builder">..    /
1b290 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
1b2a0 3d 22 53 74 72 69 6e 67 42 75 69 6c 64 65 72 22  ="StringBuilder"
1b2b0 20 2f 3e 20 69 6e 73 74 61 6e 63 65 20 74 6f 20   /> instance to 
1b2c0 61 70 70 65 6e 64 20 74 6f 2e 0d 0a 20 20 20 20  append to...    
1b2d0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1b2e0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1b2f0 65 3d 22 6d 65 73 73 61 67 65 22 3e 0d 0a 20 20  e="message">..  
1b300 20 20 2f 2f 2f 20 54 68 65 20 6d 65 73 73 61 67    /// The messag
1b310 65 20 74 6f 20 61 70 70 65 6e 64 2e 20 20 49 74  e to append.  It
1b320 20 77 69 6c 6c 20 62 65 20 66 6f 6c 6c 6f 77 65   will be followe
1b330 64 20 62 79 20 61 6e 20 61 70 70 72 6f 70 72 69  d by an appropri
1b340 61 74 65 20 6c 69 6e 65 2d 65 6e 64 69 6e 67 2e  ate line-ending.
1b350 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1b360 6d 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  m>..    private 
1b370 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 70 65  static void Appe
1b380 6e 64 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20  ndError(..      
1b390 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
1b3a0 62 75 69 6c 64 65 72 2c 0d 0a 20 20 20 20 20 20  builder,..      
1b3b0 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
1b3c0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
1b3d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
1b3e0 62 75 69 6c 64 65 72 20 3d 3d 20 6e 75 6c 6c 29  builder == null)
1b3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1b400 74 75 72 6e 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  turn;....#if !PL
1b410 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
1b420 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
1b430 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 4c   builder.AppendL
1b440 69 6e 65 28 6d 65 73 73 61 67 65 29 3b 0d 0a 23  ine(message);..#
1b450 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 62 75  else..        bu
1b460 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 6d 65 73  ilder.Append(mes
1b470 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  sage);..        
1b480 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22  builder.Append("
1b490 5c 72 5c 6e 22 29 3b 0d 0a 23 65 6e 64 69 66 0d  \r\n");..#endif.
1b4a0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
1b4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1b510 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1b520 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
1b530 20 6d 65 74 68 6f 64 20 61 74 74 65 6d 70 74 73   method attempts
1b540 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 53 51   to cause the SQ
1b550 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72  Lite native libr
1b560 61 72 79 20 74 6f 20 69 6e 76 61 6c 69 64 61 74  ary to invalidat
1b570 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 73 20 66  e..    /// its f
1b580 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 73  unction pointers
1b590 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
1b5a0 68 69 73 20 69 6e 73 74 61 6e 63 65 2e 20 20 54  his instance.  T
1b5b0 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
1b5c0 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 70 72 65  ..    /// to pre
1b5d0 76 65 6e 74 20 63 61 6c 6c 73 20 66 72 6f 6d 20  vent calls from 
1b5e0 6e 61 74 69 76 65 20 63 6f 64 65 20 69 6e 74 6f  native code into
1b5f0 20 64 65 6c 65 67 61 74 65 73 20 74 68 61 74 20   delegates that 
1b600 6d 61 79 20 68 61 76 65 20 62 65 65 6e 0d 0a 20  may have been.. 
1b610 20 20 20 2f 2f 2f 20 67 61 72 62 61 67 65 20 63     /// garbage c
1b620 6f 6c 6c 65 63 74 65 64 2e 20 20 4e 6f 72 6d 61  ollected.  Norma
1b630 6c 6c 79 2c 20 74 68 65 73 65 20 74 79 70 65 73  lly, these types
1b640 20 6f 66 20 69 73 73 75 65 73 20 63 61 6e 20 6f   of issues can o
1b650 6e 6c 79 20 61 72 69 73 65 20 66 6f 72 0d 0a 20  nly arise for.. 
1b660 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f     /// connectio
1b670 6e 73 20 74 68 61 74 20 61 72 65 20 61 64 64 65  ns that are adde
1b680 64 20 74 6f 20 74 68 65 20 70 6f 6f 6c 3b 20 68  d to the pool; h
1b690 6f 77 76 65 72 2c 20 69 74 20 69 73 20 67 6f 6f  owver, it is goo
1b6a0 64 20 70 72 61 63 74 69 63 65 20 74 6f 0d 0a 20  d practice to.. 
1b6b0 20 20 20 2f 2f 2f 20 75 6e 63 6f 6e 64 69 74 69     /// unconditi
1b6c0 6f 6e 61 6c 6c 79 20 69 6e 76 61 6c 69 64 61 74  onally invalidat
1b6d0 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  e function point
1b6e0 65 72 73 20 74 68 61 74 20 6d 61 79 20 72 65 66  ers that may ref
1b6f0 65 72 20 74 6f 20 6f 62 6a 65 63 74 73 0d 0a 20  er to objects.. 
1b700 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20 64 69 73     /// being dis
1b710 70 6f 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  posed...    /// 
1b720 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1b730 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1b740 22 69 6e 63 6c 75 64 65 47 6c 6f 62 61 6c 22 3e  "includeGlobal">
1b750 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
1b760 72 6f 20 74 6f 20 61 6c 73 6f 20 69 6e 76 61 6c  ro to also inval
1b770 69 64 61 74 65 20 67 6c 6f 62 61 6c 20 66 75 6e  idate global fun
1b780 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 73 20 28  ction pointers (
1b790 69 2e 65 2e 20 74 68 6f 73 65 20 74 68 61 74 0d  i.e. those that.
1b7a0 0a 20 20 20 20 2f 2f 2f 20 61 72 65 20 6e 6f 74  .    /// are not
1b7b0 20 64 69 72 65 63 74 6c 79 20 61 73 73 6f 63 69   directly associ
1b7c0 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 63  ated with this c
1b7d0 6f 6e 6e 65 63 74 69 6f 6e 20 6f 6e 20 74 68 65  onnection on the
1b7e0 20 6e 61 74 69 76 65 20 73 69 64 65 29 2e 0d 0a   native side)...
1b7f0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1b800 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1b810 20 6e 61 6d 65 3d 22 63 61 6e 54 68 72 6f 77 22   name="canThrow"
1b820 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  >..    /// Non-z
1b830 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68  ero if this meth
1b840 6f 64 20 69 73 20 62 65 69 6e 67 20 65 78 65 63  od is being exec
1b850 75 74 65 64 20 77 69 74 68 69 6e 20 61 20 63 6f  uted within a co
1b860 6e 74 65 78 74 20 77 68 65 72 65 20 69 74 20 63  ntext where it c
1b870 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 72 6f  an..    /// thro
1b880 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69  w an exception i
1b890 6e 20 74 68 65 20 65 76 65 6e 74 20 6f 66 20 66  n the event of f
1b8a0 61 69 6c 75 72 65 3b 20 6f 74 68 65 72 77 69 73  ailure; otherwis
1b8b0 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f  e, zero...    //
1b8c0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1b8d0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1b8e0 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
1b8f0 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 77  if this method w
1b900 61 73 20 73 75 63 63 65 73 73 66 75 6c 3b 20 6f  as successful; o
1b910 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d  therwise, zero..
1b920 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
1b930 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
1b940 20 62 6f 6f 6c 20 55 6e 68 6f 6f 6b 4e 61 74 69   bool UnhookNati
1b950 76 65 43 61 6c 6c 62 61 63 6b 73 28 0d 0a 20 20  veCallbacks(..  
1b960 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e 63 6c 75        bool inclu
1b970 64 65 47 6c 6f 62 61 6c 2c 0d 0a 20 20 20 20 20  deGlobal,..     
1b980 20 20 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77     bool canThrow
1b990 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
1b9a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
1b9b0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1b9c0 20 49 6e 69 74 69 61 6c 6c 79 2c 20 74 68 69 73   Initially, this
1b9d0 20 6d 65 74 68 6f 64 20 61 73 73 75 6d 65 73 20   method assumes 
1b9e0 73 75 63 63 65 73 73 2e 20 20 54 68 65 6e 2c 20  success.  Then, 
1b9f0 69 66 20 61 6e 79 20 61 74 74 65 6d 70 74 0d 0a  if any attempt..
1ba00 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1ba10 20 74 6f 20 69 6e 76 61 6c 69 64 61 74 65 20 61   to invalidate a
1ba20 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
1ba30 72 20 66 61 69 6c 73 2c 20 74 68 65 20 6f 76 65  r fails, the ove
1ba40 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 0d 0a  rall result is..
1ba50 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1ba60 20 73 65 74 20 74 6f 20 66 61 69 6c 75 72 65 2e   set to failure.
1ba70 20 20 48 6f 77 65 76 65 72 2c 20 74 68 69 73 20    However, this 
1ba80 77 69 6c 6c 20 6e 6f 74 20 70 72 65 76 65 6e 74  will not prevent
1ba90 20 66 75 72 74 68 65 72 0d 0a 20 20 20 20 20 20   further..      
1baa0 20 20 2f 2f 20 20 20 20 20 20 20 61 74 74 65 6d    //       attem
1bab0 70 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20  pts, if any, to 
1bac0 69 6e 76 61 6c 69 64 61 74 65 20 73 75 62 73 65  invalidate subse
1bad0 71 75 65 6e 74 20 66 75 6e 63 74 69 6f 6e 20 70  quent function p
1bae0 6f 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20 20 20  ointers...      
1baf0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f    //..        bo
1bb00 6f 6c 20 72 65 73 75 6c 74 20 3d 20 74 72 75 65  ol result = true
1bb10 3b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ;..        SQLit
1bb20 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
1bb30 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
1bb40 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 53 74 72  Ok;..        Str
1bb50 69 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64  ingBuilder build
1bb60 65 72 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  er = new StringB
1bb70 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20  uilder();....   
1bb80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1bb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bbe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1bbf0 69 6f 6e 20 52 6f 6c 6c 62 61 63 6b 20 48 6f 6f  ion Rollback Hoo
1bc00 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f  k (Per-Connectio
1bc10 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  n)..        try.
1bc20 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1bc30 20 20 20 20 20 20 20 20 53 65 74 52 6f 6c 6c 62          SetRollb
1bc40 61 63 6b 48 6f 6f 6b 28 6e 75 6c 6c 29 3b 20 2f  ackHook(null); /
1bc50 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
1bc60 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f      }..#if !NET_
1bc70 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
1bc80 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
1bc90 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
1bca0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c  xception e)..#el
1bcb0 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  se..        catc
1bcc0 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23  h (Exception)..#
1bcd0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b  endif..        {
1bce0 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
1bcf0 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
1bd00 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
1bd10 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
1bd20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1bd30 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1bd40 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
1bd50 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
1bd60 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
1bd80 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
1bd90 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
1bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 61               "Fa
1bdb0 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 72 6f  iled to unset ro
1bdc0 6c 6c 62 61 63 6b 20 68 6f 6f 6b 3a 20 7b 30 7d  llback hook: {0}
1bdd0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1bde0 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20          e)); /* 
1bdf0 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
1be00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1be10 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
1be20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1be30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
1be40 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
1be50 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
1be60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1be70 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c  AppendError(buil
1be80 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  der, "failed to 
1be90 75 6e 73 65 74 20 72 6f 6c 6c 62 61 63 6b 20 68  unset rollback h
1bea0 6f 6f 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ook");..        
1beb0 20 20 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45      rc = SQLiteE
1bec0 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d  rrorCode.Error;.
1bed0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1bee0 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a  esult = false;..
1bef0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1bf00 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1bf10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1bf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1bf80 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20 43 61  #region Trace Ca
1bf90 6c 6c 62 61 63 6b 20 28 50 65 72 2d 43 6f 6e 6e  llback (Per-Conn
1bfa0 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20  ection)..       
1bfb0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1bfc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
1bfd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
1bfe0 4e 4f 54 45 3a 20 57 68 65 6e 20 75 73 69 6e 67  NOTE: When using
1bff0 20 76 65 72 73 69 6f 6e 20 33 2e 31 34 20 28 6f   version 3.14 (o
1c000 72 20 6c 61 74 65 72 29 20 6f 66 20 74 68 65 20  r later) of the 
1c010 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..   
1c020 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1c030 20 20 6c 69 62 72 61 72 79 2c 20 75 73 65 20 74    library, use t
1c040 68 65 20 6e 65 77 65 72 20 73 71 6c 69 74 65 33  he newer sqlite3
1c050 5f 74 72 61 63 65 5f 76 32 28 29 20 41 50 49 20  _trace_v2() API 
1c060 69 6e 20 6f 72 64 65 72 0d 0a 20 20 20 20 20 20  in order..      
1c070 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
1c080 6f 20 75 6e 68 6f 6f 6b 20 74 68 65 20 74 72 61  o unhook the tra
1c090 63 65 20 63 61 6c 6c 62 61 63 6b 2c 20 6a 75 73  ce callback, jus
1c0a0 74 20 69 6e 20 63 61 73 65 20 74 68 65 20 6f 6c  t in case the ol
1c0b0 64 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  der..           
1c0c0 20 2f 2f 20 20 20 20 20 20 20 41 50 49 20 69 73   //       API is
1c0d0 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 28   not available (
1c0e0 65 2e 67 2e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  e.g. SQLITE_OMIT
1c0f0 5f 44 45 50 52 45 43 41 54 45 44 29 2e 0d 0a 20  _DEPRECATED)... 
1c100 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1c110 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 55             if (U
1c120 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1c130 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62 76 65  ds.sqlite3_libve
1c140 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 20 3e  rsion_number() >
1c150 3d 20 33 30 31 34 30 30 30 29 0d 0a 20 20 20 20  = 3014000)..    
1c160 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54              SetT
1c170 72 61 63 65 43 61 6c 6c 62 61 63 6b 32 28 53 51  raceCallback2(SQ
1c180 4c 69 74 65 54 72 61 63 65 46 6c 61 67 73 2e 53  LiteTraceFlags.S
1c190 51 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 45  QLITE_TRACE_NONE
1c1a0 2c 20 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f  , null); /* thro
1c1b0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
1c1c0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1c1d0 20 20 20 20 20 20 20 20 53 65 74 54 72 61 63 65          SetTrace
1c1e0 43 61 6c 6c 62 61 63 6b 28 6e 75 6c 6c 29 3b 20  Callback(null); 
1c1f0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
1c200 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54       }..#if !NET
1c210 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
1c220 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
1c230 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28  .        catch (
1c240 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65  Exception e)..#e
1c250 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 63 61 74  lse..        cat
1c260 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a  ch (Exception)..
1c270 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
1c280 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  {..#if !NET_COMP
1c290 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
1c2a0 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
1c2b0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
1c2c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1c2e0 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70  e.WriteLine(Help
1c2f0 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
1c300 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
1c320 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
1c330 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
1c340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
1c350 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 74  ailed to unset t
1c360 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 3a 20 7b  race callback: {
1c370 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
1c380 20 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f            e)); /
1c390 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
1c3a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1c3b0 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
1c3c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1c3e0 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
1c3f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64           }..#end
1c400 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
1c410 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75    AppendError(bu
1c420 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74  ilder, "failed t
1c430 6f 20 75 6e 73 65 74 20 74 72 61 63 65 20 63 61  o unset trace ca
1c440 6c 6c 62 61 63 6b 22 29 3b 0d 0a 20 20 20 20 20  llback");..     
1c450 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69         rc = SQLi
1c460 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
1c470 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  r;....          
1c480 20 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65    result = false
1c490 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1c4a0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1c4b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1c4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c510 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1c520 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 69     #region Commi
1c530 74 20 48 6f 6f 6b 20 28 50 65 72 2d 43 6f 6e 6e  t Hook (Per-Conn
1c540 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20  ection)..       
1c550 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
1c560 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74  .            Set
1c570 43 6f 6d 6d 69 74 48 6f 6f 6b 28 6e 75 6c 6c 29  CommitHook(null)
1c580 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
1c590 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e         }..#if !N
1c5a0 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
1c5b0 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
1c5c0 4e 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  N..        catch
1c5d0 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
1c5e0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 63  #else..        c
1c5f0 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29  atch (Exception)
1c600 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
1c610 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
1c620 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
1c630 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
1c640 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
1c650 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1c670 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
1c680 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
1c690 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1c6b0 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
1c6c0 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
1c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6e0 22 46 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74  "Failed to unset
1c6f0 20 63 6f 6d 6d 69 74 20 68 6f 6f 6b 3a 20 7b 30   commit hook: {0
1c700 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1c710 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a           e)); /*
1c720 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
1c730 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1c740 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
1c750 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
1c770 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
1c780 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
1c790 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
1c7a0 20 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69   AppendError(bui
1c7b0 6c 64 65 72 2c 20 22 66 61 69 6c 65 64 20 74 6f  lder, "failed to
1c7c0 20 75 6e 73 65 74 20 63 6f 6d 6d 69 74 20 68 6f   unset commit ho
1c7d0 6f 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ok");..         
1c7e0 20 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72     rc = SQLiteEr
1c7f0 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a  rorCode.Error;..
1c800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1c810 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  sult = false;.. 
1c820 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1c830 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1c840 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1c850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1c8b0 72 65 67 69 6f 6e 20 55 70 64 61 74 65 20 48 6f  region Update Ho
1c8c0 6f 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74 69  ok (Per-Connecti
1c8d0 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 72 79  on)..        try
1c8e0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1c8f0 20 20 20 20 20 20 20 20 20 53 65 74 55 70 64 61           SetUpda
1c900 74 65 48 6f 6f 6b 28 6e 75 6c 6c 29 3b 20 2f 2a  teHook(null); /*
1c910 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
1c920 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43     }..#if !NET_C
1c930 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
1c940 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
1c950 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
1c960 63 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c 73  ception e)..#els
1c970 65 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  e..        catch
1c980 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65   (Exception)..#e
1c990 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ndif..        {.
1c9a0 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
1c9b0 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
1c9c0 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
1c9d0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
1c9e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c9f0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
1ca00 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72  WriteLine(Helper
1ca10 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
1ca20 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1ca30 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
1ca40 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
1ca50 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 22 46 61 69              "Fai
1ca70 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 75 70 64  led to unset upd
1ca80 61 74 65 20 68 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d  ate hook: {0}",.
1ca90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1caa0 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72       e)); /* thr
1cab0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
1cac0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1cad0 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
1cae0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1caf0 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
1cb00 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
1cb10 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
1cb20 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70  .            App
1cb30 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64 65 72  endError(builder
1cb40 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 75 6e 73  , "failed to uns
1cb50 65 74 20 75 70 64 61 74 65 20 68 6f 6f 6b 22 29  et update hook")
1cb60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
1cb70 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  c = SQLiteErrorC
1cb80 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20  ode.Error;....  
1cb90 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1cba0 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
1cbb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
1cbc0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1cbd0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1cbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1cc30 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1cc40 6f 6e 20 41 75 74 68 6f 72 69 7a 65 72 20 48 6f  on Authorizer Ho
1cc50 6f 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63 74 69  ok (Per-Connecti
1cc60 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 72 79  on)..        try
1cc70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1cc80 20 20 20 20 20 20 20 20 20 53 65 74 41 75 74 68           SetAuth
1cc90 6f 72 69 7a 65 72 48 6f 6f 6b 28 6e 75 6c 6c 29  orizerHook(null)
1cca0 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
1ccb0 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e         }..#if !N
1ccc0 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
1ccd0 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
1cce0 4e 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  N..        catch
1ccf0 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
1cd00 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 63  #else..        c
1cd10 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29  atch (Exception)
1cd20 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
1cd30 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
1cd40 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
1cd50 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
1cd60 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
1cd70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1cd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1cd90 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
1cda0 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
1cdb0 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1cdd0 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
1cde0 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce00 22 46 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74  "Failed to unset
1ce10 20 61 75 74 68 6f 72 69 7a 65 72 20 68 6f 6f 6b   authorizer hook
1ce20 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 29 29               e))
1ce40 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
1ce50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1ce60 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
1ce70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce90 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
1ceb0 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
1cec0 20 20 20 20 20 41 70 70 65 6e 64 45 72 72 6f 72       AppendError
1ced0 28 62 75 69 6c 64 65 72 2c 20 22 66 61 69 6c 65  (builder, "faile
1cee0 64 20 74 6f 20 75 6e 73 65 74 20 61 75 74 68 6f  d to unset autho
1cef0 72 69 7a 65 72 20 68 6f 6f 6b 22 29 3b 0d 0a 20  rizer hook");.. 
1cf00 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
1cf10 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
1cf20 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20  Error;....      
1cf30 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66        result = f
1cf40 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alse;..        }
1cf50 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1cf60 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1cf70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1cfd0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
1cfe0 72 6f 67 72 65 73 73 20 48 6f 6f 6b 20 28 50 65  rogress Hook (Pe
1cff0 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20  r-Connection).. 
1d000 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
1d010 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d020 20 20 20 53 65 74 50 72 6f 67 72 65 73 73 48 6f     SetProgressHo
1d030 6f 6b 28 30 2c 20 6e 75 6c 6c 29 3b 20 2f 2a 20  ok(0, null); /* 
1d040 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
1d050 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    }..#if !NET_CO
1d060 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
1d070 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
1d080 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
1d090 65 70 74 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65  eption e)..#else
1d0a0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
1d0b0 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23 65 6e  (Exception)..#en
1d0c0 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  dif..        {..
1d0d0 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
1d0e0 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
1d0f0 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
1d100 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1d110 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d120 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
1d130 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
1d140 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
1d150 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1d160 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
1d170 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
1d180 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
1d190 20 20 20 20 20 20 20 20 20 20 20 22 46 61 69 6c             "Fail
1d1a0 65 64 20 74 6f 20 75 6e 73 65 74 20 70 72 6f 67  ed to unset prog
1d1b0 72 65 73 73 20 68 6f 6f 6b 3a 20 7b 30 7d 22 2c  ress hook: {0}",
1d1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d1d0 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68        e)); /* th
1d1e0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
1d1f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1d200 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
1d210 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d220 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
1d230 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
1d240 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
1d250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 70  ..            Ap
1d260 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64 65  pendError(builde
1d270 72 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 75 6e  r, "failed to un
1d280 73 65 74 20 70 72 6f 67 72 65 73 73 20 68 6f 6f  set progress hoo
1d290 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
1d2a0 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72    rc = SQLiteErr
1d2b0 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d  orCode.Error;...
1d2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73  .            res
1d2d0 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ult = false;..  
1d2e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1d2f0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1d300 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1d310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d360 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
1d370 65 67 69 6f 6e 20 4c 6f 67 20 43 61 6c 6c 62 61  egion Log Callba
1d380 63 6b 20 28 47 6c 6f 62 61 6c 29 0d 0a 20 20 20  ck (Global)..   
1d390 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1d3a0 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 68 61 76   // NOTE: We hav
1d3b0 65 20 74 6f 20 62 65 20 63 61 72 65 66 75 6c 20  e to be careful 
1d3c0 68 65 72 65 20 62 65 63 61 75 73 65 20 74 68 65  here because the
1d3d0 20 6c 6f 67 20 63 61 6c 6c 62 61 63 6b 0d 0a 20   log callback.. 
1d3e0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1d3f0 69 73 20 6e 6f 74 20 70 65 72 2d 63 6f 6e 6e 65  is not per-conne
1d400 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 6e 61 74  ction on the nat
1d410 69 76 65 20 73 69 64 65 2e 20 20 49 74 20 73 68  ive side.  It sh
1d420 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ould..        //
1d430 20 20 20 20 20 20 20 6f 6e 6c 79 20 62 65 20 75         only be u
1d440 6e 73 65 74 20 62 79 20 74 68 69 73 20 6d 65 74  nset by this met
1d450 68 6f 64 20 69 66 20 74 68 69 73 20 69 6e 73 74  hod if this inst
1d460 61 6e 63 65 20 77 61 73 0d 0a 20 20 20 20 20 20  ance was..      
1d470 20 20 2f 2f 20 20 20 20 20 20 20 72 65 73 70 6f    //       respo
1d480 6e 73 69 62 6c 65 20 66 6f 72 20 73 65 74 74 69  nsible for setti
1d490 6e 67 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  ng it...        
1d4a0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  //..        if (
1d4b0 69 6e 63 6c 75 64 65 47 6c 6f 62 61 6c 20 26 26  includeGlobal &&
1d4c0 20 5f 73 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b   _setLogCallback
1d4d0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1d4e0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
1d4f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1d510 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
1d520 32 20 3d 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61  2 = SetLogCallba
1d530 63 6b 28 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72  ck(null); /* thr
1d540 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  ow */....       
1d550 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63 32           if (rc2
1d560 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
1d570 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
1d580 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5a0 41 70 70 65 6e 64 45 72 72 6f 72 28 62 75 69 6c  AppendError(buil
1d5b0 64 65 72 2c 20 22 63 6f 75 6c 64 20 6e 6f 74 20  der, "could not 
1d5c0 75 6e 73 65 74 20 6c 6f 67 20 63 61 6c 6c 62 61  unset log callba
1d5d0 63 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ck");..         
1d5e0 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
1d5f0 72 63 32 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rc2;....        
1d600 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1d610 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  lt = false;..   
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1d630 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
1d640 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
1d650 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
1d660 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
1d670 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
1d680 74 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a  tion e)..#else..
1d690 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1d6a0 68 20 28 45 78 63 65 70 74 69 6f 6e 29 0d 0a 23  h (Exception)..#
1d6b0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
1d6c0 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43     {..#if !NET_C
1d6d0 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
1d6e0 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d700 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1d710 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d720 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1d730 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
1d740 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
1d750 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d770 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
1d780 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7a0 20 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20       "Failed to 
1d7b0 75 6e 73 65 74 20 6c 6f 67 20 63 61 6c 6c 62 61  unset log callba
1d7c0 63 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ck: {0}",..     
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7e0 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77     e)); /* throw
1d7f0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1d800 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d810 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1d830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d840 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
1d850 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
1d860 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
1d870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d880 20 20 20 41 70 70 65 6e 64 45 72 72 6f 72 28 62     AppendError(b
1d890 75 69 6c 64 65 72 2c 20 22 66 61 69 6c 65 64 20  uilder, "failed 
1d8a0 74 6f 20 75 6e 73 65 74 20 6c 6f 67 20 63 61 6c  to unset log cal
1d8b0 6c 62 61 63 6b 22 29 3b 0d 0a 20 20 20 20 20 20  lback");..      
1d8c0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
1d8d0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
1d8e0 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rror;....       
1d8f0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
1d900 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
1d910 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1d920 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
1d930 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1d940 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d9a0 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65  .        if (!re
1d9b0 73 75 6c 74 20 26 26 20 63 61 6e 54 68 72 6f 77  sult && canThrow
1d9c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
1d9d0 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
1d9e0 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 62 75 69  xception(rc, bui
1d9f0 6c 64 65 72 2e 54 6f 53 74 72 69 6e 67 28 29 29  lder.ToString())
1da00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
1da10 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
1da20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
1da30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1da90 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1daa0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
1dab0 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20  hod attempts to 
1dac0 66 72 65 65 20 74 68 65 20 63 61 63 68 65 64 20  free the cached 
1dad0 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 75 73  database name us
1dae0 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20  ed with the..   
1daf0 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
1db00 53 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  SetConfiguration
1db10 4f 70 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f  Option" /> metho
1db20 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
1db30 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1db40 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6e  <param name="can
1db50 54 68 72 6f 77 22 3e 0d 0a 20 20 20 20 2f 2f 2f  Throw">..    ///
1db60 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69   Non-zero if thi
1db70 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e  s method is bein
1db80 67 20 65 78 65 63 75 74 65 64 20 77 69 74 68 69  g executed withi
1db90 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72  n a context wher
1dba0 65 20 69 74 20 63 61 6e 0d 0a 20 20 20 20 2f 2f  e it can..    //
1dbb0 2f 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  / throw an excep
1dbc0 74 69 6f 6e 20 69 6e 20 74 68 65 20 65 76 65 6e  tion in the even
1dbd0 74 20 6f 66 20 66 61 69 6c 75 72 65 3b 20 6f 74  t of failure; ot
1dbe0 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a  herwise, zero...
1dbf0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1dc00 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
1dc10 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  ns>..    /// Non
1dc20 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6d 65  -zero if this me
1dc30 74 68 6f 64 20 77 61 73 20 73 75 63 63 65 73 73  thod was success
1dc40 66 75 6c 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ful; otherwise, 
1dc50 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  zero...    /// <
1dc60 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
1dc70 72 69 76 61 74 65 20 62 6f 6f 6c 20 46 72 65 65  rivate bool Free
1dc80 44 62 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  DbName(..       
1dc90 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 0d 0a   bool canThrow..
1dca0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
1dcb0 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
1dcc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1dcd0 20 20 20 20 20 20 69 66 20 28 64 62 4e 61 6d 65        if (dbName
1dce0 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
1dcf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1dd00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dd10 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72   SQLiteMemory.Fr
1dd20 65 65 28 64 62 4e 61 6d 65 29 3b 0d 0a 20 20 20  ee(dbName);..   
1dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 4e               dbN
1dd40 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ame = IntPtr.Zer
1dd50 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
1dd60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1dd70 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
1dd80 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e         }..#if !N
1dd90 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
1dda0 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
1ddb0 4e 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  N..        catch
1ddc0 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
1ddd0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 63  #else..        c
1dde0 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 29  atch (Exception)
1ddf0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
1de00 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
1de10 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
1de20 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
1de30 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
1de40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1de50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1de60 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
1de70 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
1de80 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
1de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1dea0 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
1deb0 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ded0 22 46 61 69 6c 65 64 20 74 6f 20 66 72 65 65 20  "Failed to free 
1dee0 64 61 74 61 62 61 73 65 20 6e 61 6d 65 3a 20 7b  database name: {
1def0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
1df00 20 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f            e)); /
1df10 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
1df20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1df30 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
1df40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1df50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1df60 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
1df70 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64           }..#end
1df80 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
1df90 20 20 69 66 20 28 63 61 6e 54 68 72 6f 77 29 0d    if (canThrow).
1dfa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dfb0 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20 20   throw;..       
1dfc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
1dfd0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1dfe0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
1dff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e040 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e050 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1e060 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20      /// Creates 
1e070 61 20 6e 65 77 20 53 51 4c 69 74 65 20 62 61 63  a new SQLite bac
1e080 6b 75 70 20 6f 62 6a 65 63 74 20 62 61 73 65 64  kup object based
1e090 20 6f 6e 20 74 68 65 20 70 72 6f 76 69 64 65 64   on the provided
1e0a0 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20   destination..  
1e0b0 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 63    /// database c
1e0c0 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
1e0d0 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
1e0e0 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 74 68  connection is th
1e0f0 65 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 61  e one..    /// a
1e100 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1e110 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 65  his object.  The
1e120 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74   source and dest
1e130 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
1e140 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63  ..    /// connec
1e150 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20  tions cannot be 
1e160 74 68 65 20 73 61 6d 65 2e 0d 0a 20 20 20 20 2f  the same...    /
1e170 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1e180 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1e190 6d 65 3d 22 64 65 73 74 43 6e 6e 22 3e 54 68 65  me="destCnn">The
1e1a0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
1e1b0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1e1c0 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
1e1d0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1e1e0 64 65 73 74 4e 61 6d 65 22 3e 54 68 65 20 64 65  destName">The de
1e1f0 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
1e200 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e  se name.</param>
1e210 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1e220 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d   name="sourceNam
1e230 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61  e">The source da
1e240 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61  tabase name.</pa
1e250 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
1e260 65 74 75 72 6e 73 3e 54 68 65 20 6e 65 77 6c 79  eturns>The newly
1e270 20 63 72 65 61 74 65 64 20 62 61 63 6b 75 70 20   created backup 
1e280 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73  object.</returns
1e290 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
1e2a0 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 42  override SQLiteB
1e2b0 61 63 6b 75 70 20 49 6e 69 74 69 61 6c 69 7a 65  ackup Initialize
1e2c0 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
1e2d0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
1e2e0 6e 20 64 65 73 74 43 6e 6e 2c 0d 0a 20 20 20 20  n destCnn,..    
1e2f0 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 74 4e      string destN
1e300 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ame,..        st
1e310 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 0d  ring sourceName.
1e320 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
1e330 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  {..        if (d
1e340 65 73 74 43 6e 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  estCnn == null).
1e350 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
1e360 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
1e370 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 64 65  ullException("de
1e380 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  stCnn");....    
1e390 20 20 20 20 69 66 20 28 64 65 73 74 4e 61 6d 65      if (destName
1e3a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1e3b0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1e3c0 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
1e3d0 65 70 74 69 6f 6e 28 22 64 65 73 74 4e 61 6d 65  eption("destName
1e3e0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
1e3f0 66 20 28 73 6f 75 72 63 65 4e 61 6d 65 20 3d 3d  f (sourceName ==
1e400 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1e410 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
1e420 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
1e430 69 6f 6e 28 22 73 6f 75 72 63 65 4e 61 6d 65 22  ion("sourceName"
1e440 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
1e450 4c 69 74 65 33 20 64 65 73 74 53 71 6c 69 74 65  Lite3 destSqlite
1e460 33 20 3d 20 64 65 73 74 43 6e 6e 2e 5f 73 71 6c  3 = destCnn._sql
1e470 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a   as SQLite3;....
1e480 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
1e490 53 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c 29  Sqlite3 == null)
1e4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
1e4b0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
1e4c0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73              "Des
1e4e0 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  tination connect
1e4f0 69 6f 6e 20 68 61 73 20 6e 6f 20 77 72 61 70 70  ion has no wrapp
1e500 65 72 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  er.",..         
1e510 20 20 20 20 20 20 20 22 64 65 73 74 43 6e 6e 22         "destCnn"
1e520 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
1e530 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
1e540 6e 64 6c 65 20 64 65 73 74 48 61 6e 64 6c 65 20  ndle destHandle 
1e550 3d 20 64 65 73 74 53 71 6c 69 74 65 33 2e 5f 73  = destSqlite3._s
1e560 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ql;....        i
1e570 66 20 28 64 65 73 74 48 61 6e 64 6c 65 20 3d 3d  f (destHandle ==
1e580 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1e590 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
1e5a0 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
1e5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e5c0 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e 20 63    "Destination c
1e5d0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
1e5e0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
1e5f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1e600 20 20 20 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d      "destCnn");.
1e610 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
1e620 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
1e630 65 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d  e sourceHandle =
1e640 20 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   _sql;....      
1e650 20 20 69 66 20 28 73 6f 75 72 63 65 48 61 6e 64    if (sourceHand
1e660 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
1e670 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1e680 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
1e690 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e6b0 53 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74 69 6f  Source connectio
1e6c0 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
1e6d0 20 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20   handle.");.... 
1e6e0 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 44         byte[] zD
1e6f0 65 73 74 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38  estName = ToUTF8
1e700 28 64 65 73 74 4e 61 6d 65 29 3b 0d 0a 20 20 20  (destName);..   
1e710 20 20 20 20 20 62 79 74 65 5b 5d 20 7a 53 6f 75       byte[] zSou
1e720 72 63 65 4e 61 6d 65 20 3d 20 54 6f 55 54 46 38  rceName = ToUTF8
1e730 28 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d  (sourceName);...
1e740 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42  .        SQLiteB
1e750 61 63 6b 75 70 48 61 6e 64 6c 65 20 62 61 63 6b  ackupHandle back
1e760 75 70 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b  upHandle = null;
1e770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
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 2f 2f 20 64 6f 20 6e 6f          // do no
1e7a0 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
1e7b0 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
1e7c0 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
1e7d0 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
1e7e0 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
1e7f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e800 20 20 49 6e 74 50 74 72 20 62 61 63 6b 75 70 20    IntPtr backup 
1e810 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
1e820 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
1e830 63 6b 75 70 5f 69 6e 69 74 28 0d 0a 20 20 20 20  ckup_init(..    
1e840 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 74              dest
1e850 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d  Handle, zDestNam
1e860 65 2c 20 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c  e, sourceHandle,
1e870 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a   zSourceName);..
1e880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1e890 20 28 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50   (backup == IntP
1e8a0 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1e8b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e8c0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
1e8d0 72 72 6f 72 43 6f 64 65 20 72 65 73 75 6c 74 43  rrorCode resultC
1e8e0 6f 64 65 20 3d 20 52 65 73 75 6c 74 43 6f 64 65  ode = ResultCode
1e8f0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1e900 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
1e910 74 43 6f 64 65 20 21 3d 20 53 51 4c 69 74 65 45  tCode != SQLiteE
1e920 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e940 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
1e950 74 65 45 78 63 65 70 74 69 6f 6e 28 72 65 73 75  teException(resu
1e960 6c 74 43 6f 64 65 2c 20 47 65 74 4c 61 73 74 45  ltCode, GetLastE
1e970 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
1e980 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9a0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
1e9b0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 66  LiteException("f
1e9c0 61 69 6c 65 64 20 74 6f 20 69 6e 69 74 69 61 6c  ailed to initial
1e9d0 69 7a 65 20 62 61 63 6b 75 70 22 29 3b 0d 0a 20  ize backup");.. 
1e9e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b              back
1ea00 75 70 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53  upHandle = new S
1ea10 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e 64 6c  QLiteBackupHandl
1ea20 65 28 64 65 73 74 48 61 6e 64 6c 65 2c 20 62 61  e(destHandle, ba
1ea30 63 6b 75 70 29 3b 0d 0a 20 20 20 20 20 20 20 20  ckup);..        
1ea40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
1ea50 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e  iteConnection.On
1ea60 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65  Changed(null, ne
1ea70 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  w ConnectionEven
1ea80 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
1ea90 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
1eaa0 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65  tionEventType.Ne
1eab0 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c  wCriticalHandle,
1eac0 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
1ead0 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20      null, null, 
1eae0 6e 75 6c 6c 2c 20 62 61 63 6b 75 70 48 61 6e 64  null, backupHand
1eaf0 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62  le, null, new ob
1eb00 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ject[] {..      
1eb10 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
1eb20 69 74 65 33 29 2c 20 64 65 73 74 43 6e 6e 2c 20  ite3), destCnn, 
1eb30 64 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63 65  destName, source
1eb40 4e 61 6d 65 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20  Name }));....   
1eb50 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
1eb60 53 51 4c 69 74 65 42 61 63 6b 75 70 28 0d 0a 20  SQLiteBackup(.. 
1eb70 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2c             this,
1eb80 20 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 64   backupHandle, d
1eb90 65 73 74 48 61 6e 64 6c 65 2c 20 7a 44 65 73 74  estHandle, zDest
1eba0 4e 61 6d 65 2c 20 73 6f 75 72 63 65 48 61 6e 64  Name, sourceHand
1ebb0 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
1ebc0 20 7a 53 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a   zSourceName);..
1ebd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1ebe0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1ebf0 2f 2f 2f 20 43 6f 70 69 65 73 20 75 70 20 74 6f  /// Copies up to
1ec00 20 4e 20 70 61 67 65 73 20 66 72 6f 6d 20 74 68   N pages from th
1ec10 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
1ec20 65 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61  e to the destina
1ec30 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  tion..    /// da
1ec40 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
1ec50 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  d with the speci
1ec60 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65  fied backup obje
1ec70 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ct...    /// </s
1ec80 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1ec90 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
1eca0 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
1ecb0 20 6f 62 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c   object to use.<
1ecc0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1ecd0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50   <param name="nP
1ece0 61 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  age">..    /// T
1ecf0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
1ed00 65 73 20 74 6f 20 63 6f 70 79 2c 20 6e 65 67 61  es to copy, nega
1ed10 74 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c  tive to copy all
1ed20 20 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73   remaining pages
1ed30 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
1ed40 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
1ed50 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22  ram name="retry"
1ed60 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74  >..    /// Set t
1ed70 6f 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70  o true if the op
1ed80 65 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  eration needs to
1ed90 20 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20   be retried due 
1eda0 74 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  to database..   
1edb0 20 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73   /// locking iss
1edc0 75 65 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ues; otherwise, 
1edd0 73 65 74 20 74 6f 20 66 61 6c 73 65 2e 0d 0a 20  set to false... 
1ede0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1edf0 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
1ee00 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75 65  s>..    /// True
1ee10 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6d 6f   if there are mo
1ee20 72 65 20 70 61 67 65 73 20 74 6f 20 62 65 20 63  re pages to be c
1ee30 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74 68  opied, false oth
1ee40 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f  erwise...    ///
1ee50 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1ee60 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1ee70 64 65 20 62 6f 6f 6c 20 53 74 65 70 42 61 63 6b  de bool StepBack
1ee80 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
1ee90 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
1eea0 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  ,..        int n
1eeb0 50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 72  Page,..        r
1eec0 65 66 20 62 6f 6f 6c 20 72 65 74 72 79 0d 0a 20  ef bool retry.. 
1eed0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
1eee0 0a 20 20 20 20 20 20 20 20 72 65 74 72 79 20 3d  .        retry =
1eef0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
1ef00 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
1ef10 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1ef20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
1ef30 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
1ef40 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
1ef50 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1ef60 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
1ef70 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
1ef80 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
1ef90 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
1efa0 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
1efb0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1efc0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
1efd0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1eff0 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
1f000 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
1f010 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
1f020 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
1f030 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
1f040 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
1f050 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
1f060 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1f070 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
1f080 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
1f090 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
1f0a0 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
1f0b0 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
1f0c0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
1f0d0 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20  ointer.");....  
1f0e0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1f0f0 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
1f100 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1f110 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65  lite3_backup_ste
1f120 70 28 68 61 6e 64 6c 65 50 74 72 2c 20 6e 50 61  p(handlePtr, nPa
1f130 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 61  ge);..        ba
1f140 63 6b 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74  ckup._stepResult
1f150 20 3d 20 6e 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53   = n; /* NOTE: S
1f160 61 76 65 20 66 6f 72 20 75 73 65 20 62 79 20 46  ave for use by F
1f170 69 6e 69 73 68 42 61 63 6b 75 70 2e 20 2a 2f 0d  inishBackup. */.
1f180 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ...        if (n
1f190 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
1f1a0 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
1f1b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f1c0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1f1d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1f1e0 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
1f1f0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42  QLiteErrorCode.B
1f200 75 73 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  usy)..        {.
1f210 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1f220 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ry = true;..    
1f230 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1f240 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1f250 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66  .        else if
1f260 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
1f270 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 29 0d 0a  orCode.Locked)..
1f280 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f290 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74         retry = t
1f2a0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1f2b0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
1f2c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f2d0 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
1f2e0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1f2f0 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20 20 20 20  .Done)..        
1f300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
1f310 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1f320 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1f330 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b   else..        {
1f340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
1f350 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
1f360 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
1f370 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
1f380 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1f390 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1f3a0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
1f3b0 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
1f3c0 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e  f pages remainin
1f3d0 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 20 66  g to be copied f
1f3e0 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65 0d 0a  rom the source..
1f3f0 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
1f400 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74   to the destinat
1f410 69 6f 6e 20 64 61 74 61 62 61 73 65 20 61 73 73  ion database ass
1f420 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1f430 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20   specified..    
1f440 2f 2f 2f 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  /// backup objec
1f450 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
1f460 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1f470 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
1f480 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
1f490 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b 2e  object to check.
1f4a0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1f4b0 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 6e  / <returns>The n
1f4c0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72  umber of pages r
1f4d0 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63  emaining to be c
1f4e0 6f 70 69 65 64 2e 3c 2f 72 65 74 75 72 6e 73 3e  opied.</returns>
1f4f0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1f500 76 65 72 72 69 64 65 20 69 6e 74 20 52 65 6d 61  verride int Rema
1f510 69 6e 69 6e 67 42 61 63 6b 75 70 28 0d 0a 20 20  iningBackup(..  
1f520 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
1f530 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20  up backup..     
1f540 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
1f550 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
1f560 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1f570 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1f580 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
1f590 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
1f5a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
1f5b0 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
1f5c0 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
1f5d0 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
1f5e0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
1f5f0 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
1f600 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1f610 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
1f620 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
1f630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f640 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
1f650 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
1f660 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
1f670 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
1f680 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
1f690 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
1f6a0 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
1f6b0 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1f6c0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1f6d0 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
1f6e0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
1f700 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
1f710 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
1f720 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
1f730 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
1f740 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1f750 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ds.sqlite3_backu
1f760 70 5f 72 65 6d 61 69 6e 69 6e 67 28 68 61 6e 64  p_remaining(hand
1f770 6c 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  lePtr);..    }..
1f780 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1f790 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
1f7a0 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  urns the total n
1f7b0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
1f7c0 6e 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74  n the source dat
1f7d0 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
1f7e0 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74  ..    /// with t
1f7f0 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63  he specified bac
1f800 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
1f810 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1f820 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1f830 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
1f840 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
1f850 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d  to check.</param
1f860 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
1f870 72 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75  rns>The total nu
1f880 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
1f890 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
1f8a0 62 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  base.</returns>.
1f8b0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1f8c0 65 72 72 69 64 65 20 69 6e 74 20 50 61 67 65 43  erride int PageC
1f8d0 6f 75 6e 74 42 61 63 6b 75 70 28 0d 0a 20 20 20  ountBackup(..   
1f8e0 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
1f8f0 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
1f900 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
1f910 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
1f920 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1f930 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
1f940 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
1f950 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
1f960 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
1f970 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
1f980 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
1f990 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
1f9a0 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
1f9b0 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
1f9c0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1f9d0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
1f9e0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
1f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa00 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
1fa10 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
1fa20 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
1fa30 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
1fa40 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
1fa50 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
1fa60 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
1fa70 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1fa80 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
1fa90 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
1faa0 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
1fab0 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
1fac0 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
1fad0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
1fae0 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 20  pointer.");.... 
1faf0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
1fb00 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1fb10 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  s.sqlite3_backup
1fb20 5f 70 61 67 65 63 6f 75 6e 74 28 68 61 6e 64 6c  _pagecount(handl
1fb30 65 50 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ePtr);..    }...
1fb40 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1fb50 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74  y>..    /// Dest
1fb60 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20  roys the backup 
1fb70 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20  object, rolling 
1fb80 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20  back any backup 
1fb90 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a  that may be in..
1fba0 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e      /// progess.
1fbb0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1fbc0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
1fbd0 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
1fbe0 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
1fbf0 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e  ject to destroy.
1fc00 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
1fc10 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1fc20 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75  void FinishBacku
1fc30 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  p(..        SQLi
1fc40 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70 0d  teBackup backup.
1fc50 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
1fc60 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  {..        if (b
1fc70 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1fc90 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
1fca0 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
1fcb0 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
1fcc0 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
1fcd0 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
1fce0 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
1fcf0 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
1fd00 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
1fd10 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1fd20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
1fd30 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
1fd40 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
1fd50 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
1fd60 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
1fd70 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
1fd80 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
1fd90 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
1fda0 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
1fdb0 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
1fdc0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1fde0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
1fdf0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
1fe00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fe10 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
1fe20 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
1fe30 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
1fe40 29 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54  );....#if !SQLIT
1fe50 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
1fe60 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1fe70 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
1fe80 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1fe90 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
1fea0 68 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  h_interop(handle
1feb0 50 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  Ptr);..#else..  
1fec0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1fed0 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
1fee0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1fef0 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
1ff00 69 73 68 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  ish(handlePtr);.
1ff10 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
1ff20 20 68 61 6e 64 6c 65 2e 53 65 74 48 61 6e 64 6c   handle.SetHandl
1ff30 65 41 73 49 6e 76 61 6c 69 64 28 29 3b 0d 0a 0d  eAsInvalid();...
1ff40 0a 23 69 66 20 43 4f 55 4e 54 5f 48 41 4e 44 4c  .#if COUNT_HANDL
1ff50 45 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  E..        if ((
1ff60 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
1ff70 43 6f 64 65 2e 4f 6b 29 20 7c 7c 20 28 6e 20 3d  Code.Ok) || (n =
1ff80 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65  = backup._stepRe
1ff90 73 75 6c 74 29 29 20 68 61 6e 64 6c 65 2e 57 61  sult)) handle.Wa
1ffa0 73 52 65 6c 65 61 73 65 64 4f 6b 28 29 3b 0d 0a  sReleasedOk();..
1ffb0 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
1ffc0 20 20 69 66 20 28 28 6e 20 21 3d 20 53 51 4c 69    if ((n != SQLi
1ffd0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
1ffe0 26 26 20 28 6e 20 21 3d 20 62 61 63 6b 75 70 2e  && (n != backup.
1fff0 5f 73 74 65 70 52 65 73 75 6c 74 29 29 0d 0a 20  _stepResult)).. 
20000 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
20010 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
20020 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
20030 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
20040 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
20050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
200b0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
200c0 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
200d0 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
200e0 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
200f0 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
20100 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
20110 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
20120 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
20130 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
20140 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
20150 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69  / A boolean indi
20160 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
20170 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65  r not the SQLite
20180 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
20190 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20  s been..    /// 
201a0 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
201b0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
201c0 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
201d0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
201e0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
201f0 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a  bool IsInitializ
20200 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
20210 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74       return Stat
20220 69 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28  icIsInitialized(
20230 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
20240 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
20250 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
20260 65 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  es if the SQLite
20270 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
20280 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  s been initializ
20290 65 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ed for the..    
202a0 2f 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63  /// current proc
202b0 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
202c0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
202d0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
202e0 20 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69   /// A boolean i
202f0 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
20300 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c  r or not the SQL
20310 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
20320 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f   has been..    /
20330 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  // initialized f
20340 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  or the current p
20350 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f  rocess...    ///
20360 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
20370 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
20380 20 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e   bool StaticIsIn
20390 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20  itialized()..   
203a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a   {..        //..
203b0 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49          // BUGFI
203c0 58 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73  X: Prevent races
203d0 20 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65   with other thre
203e0 61 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74  ads for this ent
203f0 69 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a  ire block, due..
20400 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
20410 20 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69     to the try/fi
20420 6e 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e  nally semantics.
20430 20 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32    See ticket [72
20440 39 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20  905c9a77]...    
20450 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
20460 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
20470 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
20480 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
20490 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
204a0 20 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20   Save the state 
204b0 6f 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63  of the logging c
204c0 6c 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65  lass and then re
204d0 73 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20  store it..      
204e0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
204f0 66 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65  fter we are done
20500 20 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e   to avoid loggin
20510 67 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65  g too many false
20520 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20   errors...      
20530 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
20540 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64        bool saved
20550 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65  Enabled = SQLite
20560 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20  Log.Enabled;..  
20570 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
20580 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61  Log.Enabled = fa
20590 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
205a0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
205b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
205c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
205d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
205e0 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64  OTE: This method
205f0 20 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61   [ab]uses the fa
20600 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77  ct that SQLite w
20610 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20  ill always..    
20620 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
20630 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
20640 54 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79  TE_ERROR for any
20650 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75   unknown configu
20660 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20  ration option.. 
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20680 2f 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a  /       *unless*
20690 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
206a0 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20  ary has already 
206b0 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
206c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
206d0 20 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74     //       In t
206e0 68 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c  hat case it will
206f0 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53   always return S
20700 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20  QLITE_MISUSE... 
20710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20720 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
20730 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
20740 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
20750 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
20760 74 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28  te3_config_none(
20770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20780 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
20790 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  igOpsEnum.SQLITE
207a0 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a  _CONFIG_NONE);..
207b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
207c0 20 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20    return (rc == 
207d0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
207e0 4d 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20  Misuse);..      
207f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
20800 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
20810 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20820 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
20830 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d  iteLog.Enabled =
20840 20 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a   savedEnabled;..
20850 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
20860 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
20870 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
20880 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 65  ary>..    /// He
20890 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f  lper function to
208a0 20 72 65 74 72 69 65 76 65 20 61 20 63 6f 6c 75   retrieve a colu
208b0 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f 6d 20  mn of data from 
208c0 61 6e 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  an active statem
208d0 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent...    /// </
208e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
208f0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
20900 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65  tmt">The stateme
20910 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28 29 27  nt being step()'
20920 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72 61 6d  d through</param
20930 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
20940 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54  m name="flags">T
20950 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61  he flags associa
20960 74 65 64 20 77 69 74 68 20 74 68 65 20 63 6f 6e  ted with the con
20970 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e  nection.</param>
20980 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
20990 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 54 68   name="index">Th
209a0 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 74  e column index t
209b0 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
209c0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
209d0 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68  am name="typ">Th
209e0 65 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 63  e type of data c
209f0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
20a00 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e 69 6e  column.  If Unin
20a10 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69 73 20  itialized, this 
20a20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 65  function will re
20a30 74 72 69 65 76 65 20 74 68 65 20 64 61 74 61 74  trieve the datat
20a40 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ype information.
20a50 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
20a60 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
20a70 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 74  ns the data in t
20a80 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72  he column</retur
20a90 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
20aa0 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  l override objec
20ab0 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69 74  t GetValue(SQLit
20ac0 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
20ad0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
20ae0 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
20af0 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65 54  t index, SQLiteT
20b00 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d  ype typ)..    {.
20b10 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
20b20 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e 41 66  ity aff = typ.Af
20b30 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20 20 69  finity;..      i
20b40 66 20 28 61 66 66 20 3d 3d 20 54 79 70 65 41 66  f (aff == TypeAf
20b50 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 20 72 65 74  finity.Null) ret
20b60 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65  urn DBNull.Value
20b70 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 20 74 20  ;..      Type t 
20b80 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
20b90 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 21 3d   if (typ.Type !=
20ba0 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0d   DbType.Object).
20bb0 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
20bc0 20 20 74 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76    t = SQLiteConv
20bd0 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65 54 6f  ert.SQLiteTypeTo
20be0 54 79 70 65 28 74 79 70 29 3b 0d 0a 20 20 20 20  Type(typ);..    
20bf0 20 20 20 20 61 66 66 20 3d 20 54 79 70 65 54 6f      aff = TypeTo
20c00 41 66 66 69 6e 69 74 79 28 74 2c 20 66 6c 61 67  Affinity(t, flag
20c10 73 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  s);..      }....
20c20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
20c30 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
20c40 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c 41  ionFlags.GetAllA
20c50 73 54 65 78 74 29 20 3d 3d 20 53 51 4c 69 74 65  sText) == SQLite
20c60 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
20c70 47 65 74 41 6c 6c 41 73 54 65 78 74 29 0d 0a 20  GetAllAsText).. 
20c80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
20c90 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
20ca0 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 73  dex);....      s
20cb0 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20 20  witch (aff)..   
20cc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61     {..        ca
20cd0 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
20ce0 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20  Blob:..         
20cf0 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d   if (typ.Type ==
20d00 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26 20   DbType.Guid && 
20d10 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d 20  typ.Affinity == 
20d20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78  TypeAffinity.Tex
20d30 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
20d40 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28  return new Guid(
20d50 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
20d60 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dex));....      
20d70 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74      int n = (int
20d80 29 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20  )GetBytes(stmt, 
20d90 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c 20  index, 0, null, 
20da0 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20 20  0, 0);..        
20db0 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65 77    byte[] b = new
20dc0 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20 20   byte[n];..     
20dd0 20 20 20 20 20 47 65 74 42 79 74 65 73 28 73 74       GetBytes(st
20de0 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62 2c  mt, index, 0, b,
20df0 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20   0, n);....     
20e00 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79 70       if (typ.Typ
20e10 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64  e == DbType.Guid
20e20 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20 20   && n == 16)..  
20e30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20e40 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a 0d   new Guid(b);...
20e50 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
20e60 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  n b;..        ca
20e70 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
20e80 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20 20  DateTime:..     
20e90 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 44       return GetD
20ea0 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69 6e  ateTime(stmt, in
20eb0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 63  dex);..        c
20ec0 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
20ed0 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20  .Double:..      
20ee0 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75 6c      if (t == nul
20ef0 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f 75  l) return GetDou
20f00 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ble(stmt, index)
20f10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ;..          ret
20f20 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e  urn Convert.Chan
20f30 67 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c 65  geType(GetDouble
20f40 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 74  (stmt, index), t
20f50 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
20f60 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
20f70 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20  ity.Int64:..    
20f80 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e        if (t == n
20f90 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 49  ull) return GetI
20fa0 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
20fb0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
20fc0 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 42 6f   (t == typeof(Bo
20fd0 6f 6c 65 61 6e 29 29 20 72 65 74 75 72 6e 20 47  olean)) return G
20fe0 65 74 42 6f 6f 6c 65 61 6e 28 73 74 6d 74 2c 20  etBoolean(stmt, 
20ff0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
21000 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
21010 6f 66 28 53 42 79 74 65 29 29 20 72 65 74 75 72  of(SByte)) retur
21020 6e 20 47 65 74 53 42 79 74 65 28 73 74 6d 74 2c  n GetSByte(stmt,
21030 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
21040 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
21050 65 6f 66 28 42 79 74 65 29 29 20 72 65 74 75 72  eof(Byte)) retur
21060 6e 20 47 65 74 42 79 74 65 28 73 74 6d 74 2c 20  n GetByte(stmt, 
21070 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
21080 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65     if (t == type
21090 6f 66 28 49 6e 74 31 36 29 29 20 72 65 74 75 72  of(Int16)) retur
210a0 6e 20 47 65 74 49 6e 74 31 36 28 73 74 6d 74 2c  n GetInt16(stmt,
210b0 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
210c0 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70      if (t == typ
210d0 65 6f 66 28 55 49 6e 74 31 36 29 29 20 72 65 74  eof(UInt16)) ret
210e0 75 72 6e 20 47 65 74 55 49 6e 74 31 36 28 73 74  urn GetUInt16(st
210f0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
21100 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20         if (t == 
21110 74 79 70 65 6f 66 28 49 6e 74 33 32 29 29 20 72  typeof(Int32)) r
21120 65 74 75 72 6e 20 47 65 74 49 6e 74 33 32 28 73  eturn GetInt32(s
21130 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
21140 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
21150 20 74 79 70 65 6f 66 28 55 49 6e 74 33 32 29 29   typeof(UInt32))
21160 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e 74 33   return GetUInt3
21170 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  2(stmt, index);.
21180 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
21190 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74 36 34   == typeof(Int64
211a0 29 29 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74  )) return GetInt
211b0 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  64(stmt, index);
211c0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
211d0 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74  t == typeof(UInt
211e0 36 34 29 29 20 72 65 74 75 72 6e 20 47 65 74 55  64)) return GetU
211f0 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65  Int64(stmt, inde
21200 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72  x);..          r
21210 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68  eturn Convert.Ch
21220 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e 74 36  angeType(GetInt6
21230 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  4(stmt, index), 
21240 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  t, null);..     
21250 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20     default:..   
21260 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
21270 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65  tText(stmt, inde
21280 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  x);..      }..  
21290 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
212a0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
212b0 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54 61 62   GetCursorForTab
212c0 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  le(SQLiteStateme
212d0 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64 62 2c  nt stmt, int db,
212e0 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29 0d 0a   int rootPage)..
212f0 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
21300 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
21310 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
21320 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
21330 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73  lite3_table_curs
21340 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  or_interop(stmt.
21350 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 64 62  _sqlite_stmt, db
21360 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 23 65  , rootPage);..#e
21370 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
21380 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  n -1;..#endif.. 
21390 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
213a0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
213b0 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72 43 75  ng GetRowIdForCu
213c0 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61 74 65  rsor(SQLiteState
213d0 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 63  ment stmt, int c
213e0 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 23  ursor)..    {..#
213f0 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
21400 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e 67 20  ARD..      long 
21410 72 6f 77 69 64 20 3d 20 30 3b 0d 0a 20 20 20 20  rowid = 0;..    
21420 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
21430 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
21440 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
21450 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f  e3_cursor_rowid_
21460 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
21470 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75 72 73 6f  lite_stmt, curso
21480 72 2c 20 72 65 66 20 72 6f 77 69 64 29 3b 0d 0a  r, ref rowid);..
21490 20 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20        if (rc == 
214a0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
214b0 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f 77 69 64  Ok) return rowid
214c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
214d0 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  n 0;..#else..   
214e0 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 23 65     return 0;..#e
214f0 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
21500 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
21510 72 69 64 65 20 76 6f 69 64 20 47 65 74 49 6e 64  ride void GetInd
21520 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64  exColumnExtended
21530 49 6e 66 6f 28 73 74 72 69 6e 67 20 64 61 74 61  Info(string data
21540 62 61 73 65 2c 20 73 74 72 69 6e 67 20 69 6e 64  base, string ind
21550 65 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d  ex, string colum
21560 6e 2c 20 72 65 66 20 69 6e 74 20 73 6f 72 74 4d  n, ref int sortM
21570 6f 64 65 2c 20 72 65 66 20 69 6e 74 20 6f 6e 45  ode, ref int onE
21580 72 72 6f 72 2c 20 72 65 66 20 73 74 72 69 6e 67  rror, ref string
21590 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   collationSequen
215a0 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ce)..    {..#if 
215b0 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
215c0 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 63  ..      IntPtr c
215d0 6f 6c 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  oll = IntPtr.Zer
215e0 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 63 6f  o;..      int co
215f0 6c 6c 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  lllen = 0;..    
21600 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
21610 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  e rc;....      r
21620 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
21630 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
21640 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66  index_column_inf
21650 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20  o_interop(_sql, 
21660 54 6f 55 54 46 38 28 64 61 74 61 62 61 73 65 29  ToUTF8(database)
21670 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78 29 2c  , ToUTF8(index),
21680 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c   ToUTF8(column),
21690 20 72 65 66 20 73 6f 72 74 4d 6f 64 65 2c 20 72   ref sortMode, r
216a0 65 66 20 6f 6e 45 72 72 6f 72 2c 20 72 65 66 20  ef onError, ref 
216b0 63 6f 6c 6c 2c 20 72 65 66 20 63 6f 6c 6c 6c 65  coll, ref collle
216c0 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 72  n);..      if (r
216d0 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c != SQLiteError
216e0 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
216f0 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
21700 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d  on(rc, null);...
21710 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e  .      collation
21720 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46 38 54  Sequence = UTF8T
21730 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20 63 6f  oString(coll, co
21740 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  lllen);..#else..
21750 20 20 20 20 20 20 73 6f 72 74 4d 6f 64 65 20 3d        sortMode =
21760 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45 72 72   0;..      onErr
21770 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20 63  or = 2;..      c
21780 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
21790 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a 23 65   = "BINARY";..#e
217a0 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
217b0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
217c0 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
217d0 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72 6f 6c  Code FileControl
217e0 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d 65 2c  (string zDbName,
217f0 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74 72 20   int op, IntPtr 
21800 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  pArg)..    {..  
21810 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
21820 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
21830 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
21840 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62 4e 61  rol(_sql, (zDbNa
21850 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f  me != null) ? To
21860 55 54 46 38 28 7a 44 62 4e 61 6d 65 29 20 3a 20  UTF8(zDbName) : 
21870 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67 29 3b  null, op, pArg);
21880 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d  ..    }..  }..}.
21890 0a                                               .