System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 8839fe3943b0fb362134809f47bf429e63a08cae:


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 31 31 2e 30  ion = "1.0.111.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 48 65 6c  dFunctions = Hel
25a0: 70 65 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c  perMethods.HasFl
25b0: 61 67 73 28 5f 66 6c 61 67 73 2c 20 53 51 4c 69  ags(_flags, SQLi
25c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
25d0: 73 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e  s.UnbindFunction
25e0: 73 4f 6e 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20  sOnClose);....  
25f0: 20 20 20 20 72 65 74 72 79 3a 0d 0a 0d 0a 20 20      retry:....  
2600: 20 20 20 20 20 20 20 20 69 66 20 28 5f 75 73 65          if (_use
2610: 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  Pool)..         
2620: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2630: 20 20 69 66 20 28 53 51 4c 69 74 65 42 61 73 65    if (SQLiteBase
2640: 2e 52 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e  .ResetConnection
2650: 28 5f 73 71 6c 2c 20 5f 73 71 6c 2c 20 21 64 69  (_sql, _sql, !di
2660: 73 70 6f 73 69 6e 67 29 20 26 26 0d 0a 20 20 20  sposing) &&..   
2670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
2680: 6e 68 6f 6f 6b 4e 61 74 69 76 65 43 61 6c 6c 62  nhookNativeCallb
2690: 61 63 6b 73 28 74 72 75 65 2c 20 21 64 69 73 70  acks(true, !disp
26a0: 6f 73 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20  osing))..       
26b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26d0: 75 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29  unbindFunctions)
26e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2710: 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e  (SQLiteFunction.
2720: 55 6e 62 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f  UnbindAllFunctio
2730: 6e 73 28 74 68 69 73 2c 20 5f 66 6c 61 67 73 2c  ns(this, _flags,
2740: 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20   false))..      
2750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2760: 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  {..#if !NET_COMP
2770: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
2780: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
2790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a0: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
27b0: 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68  eLine(HelperMeth
27c0: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
27d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
2800: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2820: 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 62              "Unb
2830: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 28 50 6f  indFunctions (Po
2840: 6f 6c 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d  ol) Success: {0}
2850: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2870: 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
2880: 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
28b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
28c0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
28d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
28e0: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
28f0: 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
2900: 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2920: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
2930: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
2940: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2960: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
2970: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
2980: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 20 20 20 22 55 6e 62 69 6e 64 46 75 6e        "UnbindFun
29b0: 63 74 69 6f 6e 73 20 28 50 6f 6f 6c 29 20 46 61  ctions (Pool) Fa
29c0: 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ilure: {0}",..  
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64              Hand
29f0: 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  leToString()));.
2a00: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a30: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54      }....#if INT
2a40: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
2a50: 4c 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  LE..            
2a60: 20 20 20 20 20 20 44 69 73 70 6f 73 65 4d 6f 64        DisposeMod
2a70: 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  ules();..#endif.
2a80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a90: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
2aa0: 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66  ctionPool.Add(_f
2ab0: 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f  ileName, _sql, _
2ac0: 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d  poolVersion);...
2ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ae0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
2af0: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
2b00: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
2b10: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
2b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b30: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
2b40: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6c  tionEventType.Cl
2b50: 6f 73 65 64 54 6f 50 6f 6f 6c 2c 20 6e 75 6c 6c  osedToPool, null
2b60: 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
2b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
2b80: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c  ull, null, _sql,
2b90: 20 5f 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 20   _fileName, new 
2ba0: 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20  object[] {..    
2bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc0: 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33    typeof(SQLite3
2bd0: 29 2c 20 21 64 69 73 70 6f 73 69 6e 67 2c 20 5f  ), !disposing, _
2be0: 66 69 6c 65 4e 61 6d 65 2c 20 5f 70 6f 6f 6c 56  fileName, _poolV
2bf0: 65 72 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a 23  ersion }));....#
2c00: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
2c10: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
2c20: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
2c30: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
2c40: 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72  WriteLine(Helper
2c50: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
2c60: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
2c80: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
2c90: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
2ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb0: 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53 75  "Close (Pool) Su
2cc0: 63 63 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ccess: {0}",..  
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce0: 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69      HandleToStri
2cf0: 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
2d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
2d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d20: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2d30: 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f      {..#if !NET_
2d40: 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
2d50: 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
2d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d70: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
2d80: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
2d90: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
2da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db0: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
2dc0: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
2dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2de0: 20 20 20 20 20 20 20 20 22 43 6c 6f 73 65 20 28          "Close (
2df0: 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b  Pool) Failure: {
2e00: 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64              Hand
2e20: 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  leToString()));.
2e30: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
2e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e60: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
2e70: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 6e 6e   connection cann
2e80: 6f 74 20 62 65 20 61 64 64 65 64 20 74 6f 20 74  ot be added to t
2e90: 68 65 20 70 6f 6f 6c 3b 0d 0a 20 20 20 20 20 20  he pool;..      
2ea0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2eb0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore, 
2ec0: 6a 75 73 74 20 75 73 65 20 74 68 65 20 6e 6f 72  just use the nor
2ed0: 6d 61 6c 20 64 69 73 70 6f 73 61 6c 0d 0a 20 20  mal disposal..  
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef0: 2f 2f 20 20 20 20 20 20 20 70 72 6f 63 65 64 75  //       procedu
2f00: 72 65 20 6f 6e 20 69 74 2e 0d 0a 20 20 20 20 20  re on it...     
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f30: 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61     _usePool = fa
2f40: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2f50: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 72 65 74          goto ret
2f60: 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
2f70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2f80: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
2f90: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  e..          {..
2fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2fb0: 20 49 47 4e 4f 52 45 44 20 2a 2f 0d 0a 20 20 20   IGNORED */..   
2fc0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 68 6f 6f             Unhoo
2fd0: 6b 4e 61 74 69 76 65 43 61 6c 6c 62 61 63 6b 73  kNativeCallbacks
2fe0: 28 64 69 73 70 6f 73 69 6e 67 2c 20 21 64 69 73  (disposing, !dis
2ff0: 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  posing);....    
3000: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 6e            if (un
3010: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a  bindFunctions)..
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3040: 20 20 20 69 66 20 28 53 51 4c 69 74 65 46 75 6e     if (SQLiteFun
3050: 63 74 69 6f 6e 2e 55 6e 62 69 6e 64 41 6c 6c 46  ction.UnbindAllF
3060: 75 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 5f  unctions(this, _
3070: 66 6c 61 67 73 2c 20 66 61 6c 73 65 29 29 0d 0a  flags, false))..
3080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3090: 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
30a0: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
30b0: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d0: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
30e0: 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
30f0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
3100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3110: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
3120: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
3130: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
3140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3150: 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f    "UnbindFunctio
3160: 6e 73 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22  ns Success: {0}"
3170: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3180: 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e               Han
3190: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
31a0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
31e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20           {..#if 
31f0: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
3200: 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
3210: 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ION..           
3220: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
3230: 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
3240: 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
3250: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
3260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3270: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
3280: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
3290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a0: 20 20 20 20 20 20 20 20 20 22 55 6e 62 69 6e 64           "Unbind
32b0: 46 75 6e 63 74 69 6f 6e 73 20 46 61 69 6c 75 72  Functions Failur
32c0: 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {0}",..      
32d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e0: 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69      HandleToStri
32f0: 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
3300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3310: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3320: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
3330: 20 20 20 20 20 20 20 5f 73 71 6c 2e 44 69 73 70         _sql.Disp
3340: 6f 73 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ose();....      
3350: 20 20 20 20 20 20 20 20 46 72 65 65 44 62 4e 61          FreeDbNa
3360: 6d 65 28 21 64 69 73 70 6f 73 69 6e 67 29 3b 0d  me(!disposing);.
3370: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
3380: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
3390: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ull;..      }.. 
33a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
33b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23  ///////////....#
3410: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
3420: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
3430: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 70 72 6f 74  ECTION..    prot
3440: 65 63 74 65 64 20 73 74 72 69 6e 67 20 48 61 6e  ected string Han
3450: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20  dleToString().. 
3460: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
3470: 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
3480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
3490: 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d  urn "<null>";...
34a0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
34b0: 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 3b  _sql.ToString();
34c0: 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
34d0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
34e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3530: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
3540: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3550: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
3560: 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   number of times
3570: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
3580: 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f  Cancel" /> metho
3590: 64 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  d has been..    
35a0: 2f 2f 2f 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20  /// called...   
35b0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
35c0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
35d0: 20 47 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28   GetCancelCount(
35e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
35f0: 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f    return Interlo
3600: 63 6b 65 64 2e 43 6f 6d 70 61 72 65 45 78 63 68  cked.CompareExch
3610: 61 6e 67 65 28 72 65 66 20 5f 63 61 6e 63 65 6c  ange(ref _cancel
3620: 43 6f 75 6e 74 2c 20 30 2c 20 30 29 3b 0d 0a 20  Count, 0, 0);.. 
3630: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
36a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
36b0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d  ..    /// This m
36c0: 65 74 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 73  ethod determines
36d0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
36e0: 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  a <see cref="SQL
36f0: 69 74 65 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e  iteException" />
3700: 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 61  ..    /// with a
3710: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 6f 66 20   return code of 
3720: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3730: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
3740: 72 75 70 74 22 20 2f 3e 20 73 68 6f 75 6c 64 0d  rupt" /> should.
3750: 0a 20 20 20 20 2f 2f 2f 20 62 65 20 74 68 72 6f  .    /// be thro
3760: 77 6e 20 61 66 74 65 72 20 6d 61 6b 69 6e 67 20  wn after making 
3770: 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  a call into the 
3780: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
3790: 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ary...    /// </
37a0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
37b0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
37c0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
37d0: 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51   a <see cref="SQ
37e0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 22 20 2f  LiteException" /
37f0: 3e 20 74 6f 20 62 65 20 74 68 72 6f 77 6e 2e 20  > to be thrown. 
3800: 20 54 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20   This method..  
3810: 20 20 2f 2f 2f 20 77 69 6c 6c 20 6f 6e 6c 79 20    /// will only 
3820: 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  return non-zero 
3830: 69 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  if the <see cref
3840: 3d 22 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74  ="Cancel" /> met
3850: 68 6f 64 20 77 61 73 20 63 61 6c 6c 65 64 0d 0a  hod was called..
3860: 20 20 20 20 2f 2f 2f 20 6f 6e 65 20 6f 72 20 6d      /// one or m
3870: 6f 72 65 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ore times during
3880: 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65   a call into the
3890: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
38a0: 72 61 72 79 20 28 65 2e 67 2e 20 77 68 65 6e 0d  rary (e.g. when.
38b0: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c  .    /// the sql
38c0: 69 74 65 33 5f 70 72 65 70 61 72 65 2a 28 29 20  ite3_prepare*() 
38d0: 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  or sqlite3_step(
38e0: 29 20 41 50 49 73 20 61 72 65 20 75 73 65 64 29  ) APIs are used)
38f0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
3900: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61  urns>..    priva
3910: 74 65 20 62 6f 6f 6c 20 53 68 6f 75 6c 64 54 68  te bool ShouldTh
3920: 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 0d 0a  rowForCancel()..
3930: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
3940: 65 74 75 72 6e 20 47 65 74 43 61 6e 63 65 6c 43  eturn GetCancelC
3950: 6f 75 6e 74 28 29 20 3e 20 30 3b 0d 0a 20 20 20  ount() > 0;..   
3960: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
3970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
39d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
39e0: 20 20 20 20 2f 2f 2f 20 52 65 73 65 74 73 20 74      /// Resets t
39f0: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
3a00: 3c 73 65 65 20 63 72 65 66 3d 22 5f 63 61 6e 63  <see cref="_canc
3a10: 65 6c 43 6f 75 6e 74 22 20 2f 3e 20 66 69 65 6c  elCount" /> fiel
3a20: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
3a30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
3a40: 61 74 65 20 69 6e 74 20 52 65 73 65 74 43 61 6e  ate int ResetCan
3a50: 63 65 6c 43 6f 75 6e 74 28 29 0d 0a 20 20 20 20  celCount()..    
3a60: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
3a70: 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 43 6f  n Interlocked.Co
3a80: 6d 70 61 72 65 45 78 63 68 61 6e 67 65 28 72 65  mpareExchange(re
3a90: 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 2c 20  f _cancelCount, 
3aa0: 30 2c 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29  0, _cancelCount)
3ab0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
3ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3b20: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
3b30: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74  ary>..    /// At
3b40: 74 65 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72  tempts to interr
3b50: 75 70 74 20 74 68 65 20 71 75 65 72 79 20 63 75  upt the query cu
3b60: 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
3b70: 67 20 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61  g on the associa
3b80: 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74  ted..    /// nat
3b90: 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ive database con
3ba0: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
3bb0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3bc0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3bd0: 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28  ide void Cancel(
3be0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3bf0: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
3c00: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
3c10: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ing...      }.. 
3c20: 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
3c30: 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
3c40: 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
3c50: 20 2a 2f 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   */..      {..  
3c60: 20 20 20 20 20 20 49 6e 74 65 72 6c 6f 63 6b 65        Interlocke
3c70: 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20  d.Increment(ref 
3c80: 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a  _cancelCount);..
3c90: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
3ca0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3cb0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 5f 73  te3_interrupt(_s
3cc0: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ql);..      }.. 
3cd0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
3ce0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
3cf0: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  // This function
3d00: 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65   binds a user-de
3d10: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74  fined function t
3d20: 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  o the connection
3d30: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
3d40: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
3d50: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
3d60: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d  tionAttribute">.
3d70: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  .    /// The <se
3d80: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
3d90: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
3da0: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
3db0: 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ce containing.. 
3dc0: 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64     /// the metad
3dd0: 61 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ata for the func
3de0: 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64  tion to be bound
3df0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
3e00: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
3e10: 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69  ram name="functi
3e20: 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  on">..    /// Th
3e30: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
3e40: 69 74 65 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f  iteFunction"/> o
3e50: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74  bject instance t
3e60: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
3e70: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  he..    /// func
3e80: 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64  tion to be bound
3e90: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
3ea0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
3eb0: 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
3ec0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
3ed0: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
3ee0: 77 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20  with the parent 
3ef0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
3f00: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  t...    /// </pa
3f10: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
3f20: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
3f30: 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a   BindFunction(..
3f40: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
3f50: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
3f60: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
3f70: 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e,..        SQLi
3f80: 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74  teFunction funct
3f90: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  ion,..        SQ
3fa0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3fb0: 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20  ags flags..     
3fc0: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
3fd0: 20 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f       if (functio
3fe0: 6e 41 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75  nAttribute == nu
3ff0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4000: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
4010: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
4020: 28 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  ("functionAttrib
4030: 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ute");....      
4040: 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 20 3d    if (function =
4050: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4060: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
4070: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
4080: 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 22 29  tion("function")
4090: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
40a0: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64  iteFunction.Bind
40b0: 46 75 6e 63 74 69 6f 6e 28 74 68 69 73 2c 20 66  Function(this, f
40c0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
40d0: 2c 20 66 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67  , function, flag
40e0: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  s);....        i
40f0: 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d  f (_functions ==
4100: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4110: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d      _functions =
4120: 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
4130: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
4140: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
4150: 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20  unction>();.... 
4160: 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e         _function
4170: 73 5b 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  s[functionAttrib
4180: 75 74 65 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 3b  ute] = function;
4190: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
41a0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
41b0: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
41c0: 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73 65 72  ion binds a user
41d0: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
41e0: 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74  n to the connect
41f0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
4200: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
4210: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
4220: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
4230: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
4240: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
4250: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
4260: 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  te"/> object ins
4270: 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67  tance containing
4280: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65  ..    /// the me
4290: 74 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66  tadata for the f
42a0: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 75 6e  unction to be un
42b0: 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bound...    /// 
42c0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
42d0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
42e0: 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
42f0: 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
4300: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61  ated with the pa
4310: 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  rent connection 
4320: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
4330: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
4340: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d  // <returns>Non-
4350: 7a 65 72 6f 20 69 66 20 74 68 65 20 66 75 6e 63  zero if the func
4360: 74 69 6f 6e 20 77 61 73 20 75 6e 62 6f 75 6e 64  tion was unbound
4370: 20 61 6e 64 20 72 65 6d 6f 76 65 64 2e 3c 2f 72   and removed.</r
4380: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
4390: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
43a0: 6f 6f 6c 20 55 6e 62 69 6e 64 46 75 6e 63 74 69  ool UnbindFuncti
43b0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  on(..        SQL
43c0: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
43d0: 62 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74  bute functionAtt
43e0: 72 69 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20  ribute,..       
43f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4400: 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20  nFlags flags..  
4410: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
4420: 20 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63          if (func
4430: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 3d 3d  tionAttribute ==
4440: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4450: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
4460: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
4470: 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 41 74 74  ion("functionAtt
4480: 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20  ribute");....   
4490: 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69       if (_functi
44a0: 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
44b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
44c0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
44d0: 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f     SQLiteFunctio
44e0: 6e 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a 0d 0a 20  n function;.... 
44f0: 20 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63         if (_func
4500: 74 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  tions.TryGetValu
4510: 65 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  e(functionAttrib
4520: 75 74 65 2c 20 6f 75 74 20 66 75 6e 63 74 69 6f  ute, out functio
4530: 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n))..        {..
4540: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4550: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55  SQLiteFunction.U
4560: 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  nbindFunction(..
4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4580: 20 20 20 20 74 68 69 73 2c 20 66 75 6e 63 74 69      this, functi
4590: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e  onAttribute, fun
45a0: 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29 20 26 26  ction, flags) &&
45b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
45c0: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 52 65 6d    _functions.Rem
45d0: 6f 76 65 28 66 75 6e 63 74 69 6f 6e 41 74 74 72  ove(functionAttr
45e0: 69 62 75 74 65 29 29 0d 0a 20 20 20 20 20 20 20  ibute))..       
45f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4600: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
4610: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
4620: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
4630: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4640: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a   false;..    }..
4650: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4660: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 56  verride string V
4670: 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20  ersion..    {.. 
4680: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
4690: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
46a0: 6e 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b  n SQLiteVersion;
46b0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
46c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
46d0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 65   override int Ve
46e0: 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20  rsionNumber..   
46f0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
4700: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4710: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72  return SQLiteVer
4720: 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20  sionNumber;..   
4730: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4740: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
4750: 69 63 20 73 74 72 69 6e 67 20 44 65 66 69 6e 65  ic string Define
4760: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b  Constants..    {
4770: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
4780: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4790: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
47a0: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
47b0: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29   StringBuilder()
47c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ;..            I
47d0: 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73  List<string> lis
47e0: 74 20 3d 20 53 51 4c 69 74 65 44 65 66 69 6e 65  t = SQLiteDefine
47f0: 43 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e  Constants.Option
4800: 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  List;....       
4810: 20 20 20 20 20 69 66 20 28 6c 69 73 74 20 21 3d       if (list !=
4820: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4830: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4840: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
4850: 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69  string element i
4860: 6e 20 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20  n list)..       
4870: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4890: 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e  if (element == n
48a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
48b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
48c0: 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
48e0: 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68  f (result.Length
48f0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4910: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
4920: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4930: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
4940: 2e 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29  .Append(element)
4950: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4960: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4970: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4980: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
4990: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
49a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
49b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
49c0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c  tatic string SQL
49d0: 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  iteVersion..    
49e0: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
49f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
4a00: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
4a10: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
4a20: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
4a30: 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29  ibversion(), -1)
4a40: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
4a50: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4a60: 6c 20 73 74 61 74 69 63 20 69 6e 74 20 53 51 4c  l static int SQL
4a70: 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72  iteVersionNumber
4a80: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
4a90: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
4aa0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
4ab0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4ac0: 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
4ad0: 6f 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20  on_number();..  
4ae0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4af0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4b00: 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74  tic string SQLit
4b10: 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b  eSourceId..    {
4b20: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
4b30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
4b40: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
4b50: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
4b60: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f  thods.sqlite3_so
4b70: 75 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a  urceid(), -1);..
4b80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
4b90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
4ba0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c  tatic string SQL
4bb0: 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  iteCompileOption
4bc0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
4bd0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
4be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74  ..            St
4bf0: 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75  ringBuilder resu
4c00: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  lt = new StringB
4c10: 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20  uilder();..     
4c20: 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
4c30: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
4c40: 20 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65     IntPtr zValue
4c50: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4c60: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
4c70: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
4c80: 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20  (index++);....  
4c90: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
4ca0: 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74  (zValue != IntPt
4cb0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
4cc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4cd0: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
4ce0: 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  lt.Length > 0)..
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d00: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
4d10: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
4d20: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
4d30: 74 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53  t.Append(UTF8ToS
4d40: 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31  tring(zValue, -1
4d50: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
4d60: 20 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e       zValue = Un
4d70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4d80: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c  s.sqlite3_compil
4d90: 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65  eoption_get(inde
4da0: 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  x++);..         
4db0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4dc0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
4dd0: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
4de0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
4df0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4e00: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e  static string In
4e10: 74 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20  teropVersion..  
4e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
4e30: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
4e40: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
4e50: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  D..            r
4e60: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
4e70: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
4e80: 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 6c  ethods.interop_l
4e90: 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29  ibversion(), -1)
4ea0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
4eb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
4ec0: 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l;..#endif..    
4ed0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4ee0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4ef0: 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72  tic string Inter
4f00: 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20  opSourceId..    
4f10: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
4f20: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
4f30: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
4f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4f50: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
4f60: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
4f70: 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 73 6f 75  hods.interop_sou
4f80: 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 23  rceid(), -1);..#
4f90: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
4fa0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
4fb0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
4fc0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
4fd0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
4fe0: 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 43 6f  string InteropCo
4ff0: 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20  mpileOptions..  
5000: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
5010: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
5020: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
5030: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  D..            S
5040: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
5050: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
5060: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20  Builder();..    
5070: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
5080: 78 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  x = 0;..        
5090: 20 20 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75      IntPtr zValu
50a0: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
50b0: 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f  Methods.interop_
50c0: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
50d0: 74 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20  t(index++);.... 
50e0: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
50f0: 20 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50   (zValue != IntP
5100: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
5110: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5120: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
5130: 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  ult.Length > 0).
5140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5150: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
5160: 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20  nd(' ');....    
5170: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
5180: 6c 74 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f  lt.Append(UTF8To
5190: 53 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d  String(zValue, -
51a0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  1));..          
51b0: 20 20 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55        zValue = U
51c0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
51d0: 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69  ds.interop_compi
51e0: 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64  leoption_get(ind
51f0: 65 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20  ex++);..        
5200: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5210: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
5220: 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  lt.ToString();..
5230: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
5240: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
5250: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
5260: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
5270: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5280: 64 65 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d  de bool AutoComm
5290: 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  it..    {..     
52a0: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
52b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 73         return Is
52c0: 41 75 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c  Autocommit(_sql,
52d0: 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d   _sql);..      }
52e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
52f0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
5300: 20 62 6f 6f 6c 20 49 73 52 65 61 64 4f 6e 6c 79   bool IsReadOnly
5310: 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  (..        strin
5320: 67 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  g name..        
5330: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5340: 20 20 49 6e 74 50 74 72 20 70 44 62 4e 61 6d 65    IntPtr pDbName
5350: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
5360: 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
5370: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5380: 20 20 20 20 20 20 20 69 66 20 28 6e 61 6d 65 20         if (name 
5390: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
53a0: 20 20 20 20 20 20 20 20 20 20 70 44 62 4e 61 6d            pDbNam
53b0: 65 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  e = SQLiteString
53c0: 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53  .Utf8IntPtrFromS
53d0: 74 72 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a  tring(name);....
53e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
53f0: 72 65 73 75 6c 74 20 3d 20 55 6e 73 61 66 65 4e  result = UnsafeN
5400: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5410: 69 74 65 33 5f 64 62 5f 72 65 61 64 6f 6e 6c 79  ite3_db_readonly
5420: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5430: 20 20 20 5f 73 71 6c 2c 20 70 44 62 4e 61 6d 65     _sql, pDbName
5440: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5450: 20 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20    if (result == 
5460: 2d 31 29 20 2f 2a 20 64 61 74 61 62 61 73 65 20  -1) /* database 
5470: 6e 6f 74 20 66 6f 75 6e 64 20 2a 2f 0d 0a 20 20  not found */..  
5480: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5490: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
54a0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
54b0: 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74  eption(HelperMet
54c0: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
54d0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
54e0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
54f0: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
5500: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
5510: 20 20 20 20 20 20 20 20 20 22 64 61 74 61 62 61           "databa
5520: 73 65 20 5c 22 7b 30 7d 5c 22 20 6e 6f 74 20 66  se \"{0}\" not f
5530: 6f 75 6e 64 22 2c 20 6e 61 6d 65 29 29 3b 0d 0a  ound", name));..
5540: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5560: 75 72 6e 20 72 65 73 75 6c 74 20 3d 3d 20 30 20  urn result == 0 
5570: 3f 20 66 61 6c 73 65 20 3a 20 74 72 75 65 3b 0d  ? false : true;.
5580: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5590: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
55a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
55b0: 20 20 20 20 69 66 20 28 70 44 62 4e 61 6d 65 20      if (pDbName 
55c0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
55d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55f0: 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
5600: 65 28 70 44 62 4e 61 6d 65 29 3b 0d 0a 20 20 20  e(pDbName);..   
5610: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 62               pDb
5620: 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65  Name = IntPtr.Ze
5630: 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
5640: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
5650: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
5660: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
5670: 6e 67 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77  ng LastInsertRow
5680: 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  Id..    {..     
5690: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23   get..      {..#
56a0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
56b0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
56c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
56d0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
56e0: 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  s.sqlite3_last_i
56f0: 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f 73 71 6c  nsert_rowid(_sql
5700: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
5710: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
5720: 20 20 20 20 6c 6f 6e 67 20 72 6f 77 49 64 20 3d      long rowId =
5730: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73   0;..        Uns
5740: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5750: 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e  .sqlite3_last_in
5760: 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72  sert_rowid_inter
5770: 6f 70 28 5f 73 71 6c 2c 20 72 65 66 20 72 6f 77  op(_sql, ref row
5780: 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  Id);..        re
5790: 74 75 72 6e 20 72 6f 77 49 64 3b 0d 0a 23 65 6c  turn rowId;..#el
57a0: 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  se..        thro
57b0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
57c0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
57d0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
57e0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
57f0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5800: 65 20 69 6e 74 20 43 68 61 6e 67 65 73 0d 0a 20  e int Changes.. 
5810: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
5820: 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  .      {..#if !S
5830: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
5840: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
5850: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5860: 64 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  ds.sqlite3_chang
5870: 65 73 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 29  es_interop(_sql)
5880: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
5890: 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
58a0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
58b0: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 5f 73 71  ite3_changes(_sq
58c0: 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  l);..#endif..   
58d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
58e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
58f0: 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79  ride long Memory
5900: 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Used..    {..   
5910: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
5920: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5930: 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65   return StaticMe
5940: 6d 6f 72 79 55 73 65 64 3b 0d 0a 20 20 20 20 20  moryUsed;..     
5950: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
5960: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
5970: 69 63 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d 65  ic long StaticMe
5980: 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d  moryUsed..    {.
5990: 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20  .        get..  
59a0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
59b0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
59c0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
59d0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
59e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
59f0: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
5a00: 73 65 64 28 29 3b 0d 0a 23 65 6c 69 66 20 21 53  sed();..#elif !S
5a10: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
5a20: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
5a30: 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20   bytes = 0;..   
5a40: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
5a50: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5a60: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64  ite3_memory_used
5a70: 5f 69 6e 74 65 72 6f 70 28 72 65 66 20 62 79 74  _interop(ref byt
5a80: 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  es);..          
5a90: 20 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b 0d    return bytes;.
5aa0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
5ab0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
5ac0: 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
5ad0: 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
5ae0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5af0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
5b00: 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
5b10: 20 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72   MemoryHighwater
5b20: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5b30: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
5b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5b50: 75 72 6e 20 53 74 61 74 69 63 4d 65 6d 6f 72 79  urn StaticMemory
5b60: 48 69 67 68 77 61 74 65 72 3b 0d 0a 20 20 20 20  Highwater;..    
5b70: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
5b80: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
5b90: 74 69 63 20 6c 6f 6e 67 20 53 74 61 74 69 63 4d  tic long StaticM
5ba0: 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 0d 0a  emoryHighwater..
5bb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
5bc0: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  et..        {..#
5bd0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
5be0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
5bf0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5c00: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
5c10: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65  thods.sqlite3_me
5c20: 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 28 30  mory_highwater(0
5c30: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
5c40: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
5c50: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 62 79 74          long byt
5c60: 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  es = 0;..       
5c70: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
5c80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5c90: 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
5ca0: 72 5f 69 6e 74 65 72 6f 70 28 30 2c 20 72 65 66  r_interop(0, ref
5cb0: 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20   bytes);..      
5cc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
5cd0: 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  es;..#else..    
5ce0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
5cf0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
5d00: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
5d10: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
5d20: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
5d30: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5d40: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e   /// Returns non
5d50: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 75 6e 64  -zero if the und
5d60: 65 72 6c 79 69 6e 67 20 6e 61 74 69 76 65 20 63  erlying native c
5d70: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
5d80: 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20 20 20 2f   is owned..    /
5d90: 2f 2f 20 62 79 20 74 68 69 73 20 69 6e 73 74 61  // by this insta
5da0: 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nce...    /// </
5db0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
5dc0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5dd0: 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d 0a  bool OwnHandle..
5de0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
5df0: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
5e00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
5e10: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
5e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
5e30: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
5e40: 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e  ception("no conn
5e50: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76  ection handle av
5e60: 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d 0a 20 20  ailable");....  
5e70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5e80: 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 3b   _sql.OwnHandle;
5e90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5ea0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
5eb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
5ec0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6c 6f 67   Returns the log
5ed0: 69 63 61 6c 20 6c 69 73 74 20 6f 66 20 66 75 6e  ical list of fun
5ee0: 63 74 69 6f 6e 73 20 61 73 73 6f 63 69 61 74 65  ctions associate
5ef0: 64 20 77 69 74 68 20 74 68 69 73 20 63 6f 6e 6e  d with this conn
5f00: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
5f10: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5f20: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5f30: 64 65 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53  de IDictionary<S
5f40: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
5f50: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
5f60: 6e 63 74 69 6f 6e 3e 20 46 75 6e 63 74 69 6f 6e  nction> Function
5f70: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
5f80: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
5f90: 66 75 6e 63 74 69 6f 6e 73 3b 20 7d 0d 0a 20 20  functions; }..  
5fa0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
5fb0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
5fc0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74  iteErrorCode Set
5fd0: 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62 6f 6f  MemoryStatus(boo
5fe0: 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  l value)..    {.
5ff0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6000: 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53  StaticSetMemoryS
6010: 74 61 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20  tatus(value);.. 
6020: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
6030: 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
6040: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74  teErrorCode Stat
6050: 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75  icSetMemoryStatu
6060: 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20  s(bool value).. 
6070: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
6080: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
6090: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
60a0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
60b0: 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20 20 20 20  onfig_int(..    
60c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
60d0: 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  nfigOpsEnum.SQLI
60e0: 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41  TE_CONFIG_MEMSTA
60f0: 54 55 53 2c 20 76 61 6c 75 65 20 3f 20 31 20 3a  TUS, value ? 1 :
6100: 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   0);....        
6110: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
6120: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6130: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
6140: 41 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65  Attempts to free
6150: 20 61 73 20 6d 75 63 68 20 68 65 61 70 20 6d 65   as much heap me
6160: 6d 6f 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65  mory as possible
6170: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
6180: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
6190: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
61a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
61b0: 72 6e 73 3e 41 20 73 74 61 6e 64 61 72 64 20 53  rns>A standard S
61c0: 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
61d0: 65 20 28 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72  e (i.e. zero for
61e0: 20 73 75 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e   success and non
61f0: 2d 7a 65 72 6f 20 66 6f 72 20 66 61 69 6c 75 72  -zero for failur
6200: 65 29 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  e).</returns>.. 
6210: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
6220: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
6230: 43 6f 64 65 20 52 65 6c 65 61 73 65 4d 65 6d 6f  Code ReleaseMemo
6240: 72 79 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ry()..    {..   
6250: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
6260: 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
6270: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
6280: 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65  lite3_db_release
6290: 5f 6d 65 6d 6f 72 79 28 5f 73 71 6c 29 3b 0d 0a  _memory(_sql);..
62a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
62b0: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
62c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
62d0: 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73      /// Attempts
62e0: 20 74 6f 20 66 72 65 65 20 4e 20 62 79 74 65 73   to free N bytes
62f0: 20 6f 66 20 68 65 61 70 20 6d 65 6d 6f 72 79 20   of heap memory 
6300: 62 79 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  by deallocating 
6310: 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65  non-essential me
6320: 6d 6f 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c  mory..    /// al
6330: 6c 6f 63 61 74 69 6f 6e 73 20 68 65 6c 64 20 62  locations held b
6340: 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6c  y the database l
6350: 69 62 72 61 72 79 2e 20 4d 65 6d 6f 72 79 20 75  ibrary. Memory u
6360: 73 65 64 20 74 6f 20 63 61 63 68 65 20 64 61 74  sed to cache dat
6370: 61 62 61 73 65 20 70 61 67 65 73 0d 0a 20 20 20  abase pages..   
6380: 20 2f 2f 2f 20 74 6f 20 69 6d 70 72 6f 76 65 20   /// to improve 
6390: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 73 20 61  performance is a
63a0: 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 6e 6f 6e  n example of non
63b0: 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65 6d 6f 72  -essential memor
63c0: 79 2e 20 20 54 68 69 73 20 69 73 20 61 20 6e 6f  y.  This is a no
63d0: 2d 6f 70 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 74  -op..    /// ret
63e0: 75 72 6e 69 6e 67 20 7a 65 72 6f 20 69 66 20 74  urning zero if t
63f0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
6400: 69 62 72 61 72 79 20 77 61 73 20 6e 6f 74 20 63  ibrary was not c
6410: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65  ompiled with the
6420: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0d 0a 20   compile-time.. 
6430: 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 20 53 51     /// option SQ
6440: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f  LITE_ENABLE_MEMO
6450: 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2e 20 20  RY_MANAGEMENT.  
6460: 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20 61 74 74 65  Optionally, atte
6470: 6d 70 74 73 20 74 6f 20 72 65 73 65 74 20 61 6e  mpts to reset an
6480: 64 2f 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f  d/or..    /// co
6490: 6d 70 61 63 74 20 74 68 65 20 57 69 6e 33 32 20  mpact the Win32 
64a0: 6e 61 74 69 76 65 20 68 65 61 70 2c 20 69 66 20  native heap, if 
64b0: 61 70 70 6c 69 63 61 62 6c 65 2e 0d 0a 20 20 20  applicable...   
64c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
64d0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
64e0: 6e 61 6d 65 3d 22 6e 42 79 74 65 73 22 3e 0d 0a  name="nBytes">..
64f0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 71 75      /// The requ
6500: 65 73 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  ested number of 
6510: 62 79 74 65 73 20 74 6f 20 66 72 65 65 2e 0d 0a  bytes to free...
6520: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
6530: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
6540: 20 6e 61 6d 65 3d 22 72 65 73 65 74 22 3e 0d 0a   name="reset">..
6550: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
6560: 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20 68 65   to attempt a he
6570: 61 70 20 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f  ap reset...    /
6580: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
6590: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
65a0: 3d 22 63 6f 6d 70 61 63 74 22 3e 0d 0a 20 20 20  ="compact">..   
65b0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f   /// Non-zero to
65c0: 20 61 74 74 65 6d 70 74 20 68 65 61 70 20 63 6f   attempt heap co
65d0: 6d 70 61 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  mpaction...    /
65e0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
65f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
6600: 3d 22 6e 46 72 65 65 22 3e 0d 0a 20 20 20 20 2f  ="nFree">..    /
6610: 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
6620: 20 62 79 74 65 73 20 61 63 74 75 61 6c 6c 79 20   bytes actually 
6630: 66 72 65 65 64 2e 20 20 54 68 69 73 20 76 61 6c  freed.  This val
6640: 75 65 20 6d 61 79 20 62 65 20 7a 65 72 6f 2e 0d  ue may be zero..
6650: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
6660: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
6670: 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74 4f 6b 22  m name="resetOk"
6680: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
6690: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 6e 6f  value will be no
66a0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 68 65  n-zero if the he
66b0: 61 70 20 72 65 73 65 74 20 77 61 73 20 73 75 63  ap reset was suc
66c0: 63 65 73 73 66 75 6c 2e 0d 0a 20 20 20 20 2f 2f  cessful...    //
66d0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
66e0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
66f0: 22 6e 4c 61 72 67 65 73 74 22 3e 0d 0a 20 20 20  "nLargest">..   
6700: 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65 20 6f 66   /// The size of
6710: 20 74 68 65 20 6c 61 72 67 65 73 74 20 63 6f 6d   the largest com
6720: 6d 69 74 74 65 64 20 66 72 65 65 20 62 6c 6f 63  mitted free bloc
6730: 6b 20 69 6e 20 74 68 65 20 68 65 61 70 2c 20 69  k in the heap, i
6740: 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 2f 2f  n bytes...    //
6750: 2f 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c  / This value wil
6760: 6c 20 62 65 20 7a 65 72 6f 20 75 6e 6c 65 73 73  l be zero unless
6770: 20 68 65 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e   heap compaction
6780: 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20   is enabled...  
6790: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
67a0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
67b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61  >..    /// A sta
67c0: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
67d0: 75 72 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a  urn code (i.e. z
67e0: 65 72 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20  ero for success 
67f0: 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 0d 0a 20 20  and non-zero..  
6800: 20 20 2f 2f 2f 20 66 6f 72 20 66 61 69 6c 75 72    /// for failur
6810: 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  e)...    /// </r
6820: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
6830: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c  ernal static SQL
6840: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61  iteErrorCode Sta
6850: 74 69 63 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79  ticReleaseMemory
6860: 28 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  (..        int n
6870: 42 79 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20  Bytes,..        
6880: 62 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a 20 20 20  bool reset,..   
6890: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 61 63       bool compac
68a0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  t,..        ref 
68b0: 69 6e 74 20 6e 46 72 65 65 2c 0d 0a 20 20 20 20  int nFree,..    
68c0: 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 72 65 73      ref bool res
68d0: 65 74 4f 6b 2c 0d 0a 20 20 20 20 20 20 20 20 72  etOk,..        r
68e0: 65 66 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74  ef uint nLargest
68f0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
6900: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
6910: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
6920: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6930: 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .Ok;....        
6940: 69 6e 74 20 6e 46 72 65 65 4c 6f 63 61 6c 20 3d  int nFreeLocal =
6950: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6960: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6c  hods.sqlite3_rel
6970: 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6e 42 79 74  ease_memory(nByt
6980: 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 75 69  es);..        ui
6990: 6e 74 20 6e 4c 61 72 67 65 73 74 4c 6f 63 61 6c  nt nLargestLocal
69a0: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 62   = 0;..        b
69b0: 6f 6f 6c 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c  ool resetOkLocal
69c0: 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66   = false;....#if
69d0: 20 21 44 45 42 55 47 20 26 26 20 57 49 4e 44 4f   !DEBUG && WINDO
69e0: 57 53 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 75  WS // NOTE: Shou
69f0: 6c 64 20 62 65 20 22 57 49 4e 33 32 48 45 41 50  ld be "WIN32HEAP
6a00: 20 26 26 20 21 4d 45 4d 44 45 42 55 47 20 26 26   && !MEMDEBUG &&
6a10: 20 57 49 4e 44 4f 57 53 22 0d 0a 20 20 20 20 20   WINDOWS"..     
6a20: 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74     if (HelperMet
6a30: 68 6f 64 73 2e 49 73 57 69 6e 64 6f 77 73 28 29  hods.IsWindows()
6a40: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6a50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 72            if ((r
6a60: 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c == SQLiteError
6a70: 43 6f 64 65 2e 4f 6b 29 20 26 26 20 72 65 73 65  Code.Ok) && rese
6a80: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
6a90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6aa0: 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61     rc = UnsafeNa
6ab0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6ac0: 74 65 33 5f 77 69 6e 33 32 5f 72 65 73 65 74 5f  te3_win32_reset_
6ad0: 68 65 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  heap();....     
6ae0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
6af0: 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c == SQLiteError
6b00: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6b20: 73 65 74 4f 6b 4c 6f 63 61 6c 20 3d 20 74 72 75  setOkLocal = tru
6b30: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6b40: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6b50: 20 69 66 20 28 28 72 63 20 3d 3d 20 53 51 4c 69   if ((rc == SQLi
6b60: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
6b70: 26 26 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20  && compact)..   
6b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
6b90: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6ba0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69  thods.sqlite3_wi
6bb0: 6e 33 32 5f 63 6f 6d 70 61 63 74 5f 68 65 61 70  n32_compact_heap
6bc0: 28 72 65 66 20 6e 4c 61 72 67 65 73 74 4c 6f 63  (ref nLargestLoc
6bd0: 61 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  al);..        }.
6be0: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23  .        else..#
6bf0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 69  endif..        i
6c00: 66 20 28 72 65 73 65 74 20 7c 7c 20 63 6f 6d 70  f (reset || comp
6c10: 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  act)..        {.
6c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20  .            rc 
6c30: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6c40: 65 2e 4e 6f 74 46 6f 75 6e 64 3b 0d 0a 20 20 20  e.NotFound;..   
6c50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6c60: 20 20 6e 46 72 65 65 20 3d 20 6e 46 72 65 65 4c    nFree = nFreeL
6c70: 6f 63 61 6c 3b 0d 0a 20 20 20 20 20 20 20 20 6e  ocal;..        n
6c80: 4c 61 72 67 65 73 74 20 3d 20 6e 4c 61 72 67 65  Largest = nLarge
6c90: 73 74 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20 20 20  stLocal;..      
6ca0: 20 20 72 65 73 65 74 4f 6b 20 3d 20 72 65 73 65    resetOk = rese
6cb0: 74 4f 6b 4c 6f 63 61 6c 3b 0d 0a 0d 0a 20 20 20  tOkLocal;....   
6cc0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d       return rc;.
6cd0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
6ce0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6cf0: 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68   /// Shutdown th
6d00: 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20  e SQLite engine 
6d10: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
6d20: 65 20 72 65 73 74 61 72 74 65 64 20 77 69 74 68  e restarted with
6d30: 20 64 69 66 66 65 72 65 6e 74 0d 0a 20 20 20 20   different..    
6d40: 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  /// configuratio
6d50: 6e 20 6f 70 74 69 6f 6e 73 2e 20 20 57 65 20 64  n options.  We d
6d60: 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e  epend on auto in
6d70: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20  itialization to 
6d80: 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f  recover...    //
6d90: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6da0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
6db0: 65 74 75 72 6e 73 20 61 20 73 74 61 6e 64 61 72  eturns a standar
6dc0: 64 20 53 51 4c 69 74 65 20 72 65 73 75 6c 74 20  d SQLite result 
6dd0: 63 6f 64 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  code.</returns>.
6de0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6df0: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
6e00: 6f 72 43 6f 64 65 20 53 68 75 74 64 6f 77 6e 28  orCode Shutdown(
6e10: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6e20: 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 53    return StaticS
6e30: 68 75 74 64 6f 77 6e 28 66 61 6c 73 65 29 3b 0d  hutdown(false);.
6e40: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
6e50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6e60: 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e 20 74 68   /// Shutdown th
6e70: 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e 65 20  e SQLite engine 
6e80: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
6e90: 65 20 72 65 73 74 61 72 74 65 64 20 77 69 74 68  e restarted with
6ea0: 20 64 69 66 66 65 72 65 6e 74 0d 0a 20 20 20 20   different..    
6eb0: 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  /// configuratio
6ec0: 6e 20 6f 70 74 69 6f 6e 73 2e 20 20 57 65 20 64  n options.  We d
6ed0: 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e  epend on auto in
6ee0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20  itialization to 
6ef0: 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f  recover...    //
6f00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6f10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
6f20: 65 3d 22 64 69 72 65 63 74 6f 72 69 65 73 22 3e  e="directories">
6f30: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
6f40: 72 6f 20 74 6f 20 72 65 73 65 74 20 74 68 65 20  ro to reset the 
6f50: 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d  database and tem
6f60: 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69  porary directori
6f70: 65 73 20 74 6f 20 74 68 65 69 72 0d 0a 20 20 20  es to their..   
6f80: 20 2f 2f 2f 20 64 65 66 61 75 6c 74 20 76 61 6c   /// default val
6f90: 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c  ues, which shoul
6fa0: 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f  d be null for bo
6fb0: 74 68 2e 20 20 54 68 69 73 20 70 61 72 61 6d 65  th.  This parame
6fc0: 74 65 72 20 68 61 73 20 6e 6f 0d 0a 20 20 20 20  ter has no..    
6fd0: 2f 2f 2f 20 65 66 66 65 63 74 20 6f 6e 20 6e 6f  /// effect on no
6fe0: 6e 2d 57 69 6e 64 6f 77 73 20 6f 70 65 72 61 74  n-Windows operat
6ff0: 69 6e 67 20 73 79 73 74 65 6d 73 2e 0d 0a 20 20  ing systems...  
7000: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
7010: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
7020: 3e 52 65 74 75 72 6e 73 20 61 20 73 74 61 6e 64  >Returns a stand
7030: 61 72 64 20 53 51 4c 69 74 65 20 72 65 73 75 6c  ard SQLite resul
7040: 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75 72 6e 73  t code.</returns
7050: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
7060: 73 74 61 74 69 63 20 53 51 4c 69 74 65 45 72 72  static SQLiteErr
7070: 6f 72 43 6f 64 65 20 53 74 61 74 69 63 53 68 75  orCode StaticShu
7080: 74 64 6f 77 6e 28 0d 0a 20 20 20 20 20 20 20 20  tdown(..        
7090: 62 6f 6f 6c 20 64 69 72 65 63 74 6f 72 69 65 73  bool directories
70a0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
70b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
70c0: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
70d0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
70e0: 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .Ok;....        
70f0: 69 66 20 28 64 69 72 65 63 74 6f 72 69 65 73 29  if (directories)
7100: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
7110: 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20   WINDOWS..      
7120: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
7130: 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e 64 6f 77  Methods.IsWindow
7140: 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  s())..          
7150: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7160: 20 20 20 20 20 69 66 20 28 72 63 20 3d 3d 20 53       if (rc == S
7170: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
7180: 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
7190: 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73          rc = Uns
71a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
71b0: 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73  .sqlite3_win32_s
71c0: 65 74 5f 64 69 72 65 63 74 6f 72 79 28 31 2c 20  et_directory(1, 
71d0: 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
71e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
71f0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
7200: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
7210: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
7220: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
7230: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69  thods.sqlite3_wi
7240: 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
7250: 79 28 32 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  y(2, null);..   
7260: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7270: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65          else..#e
7280: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
7290: 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
72a0: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
72b0: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
72d0: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a  ace.WriteLine(..
72e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72f0: 20 20 20 20 22 53 68 75 74 64 6f 77 6e 3a 20 43      "Shutdown: C
7300: 61 6e 6e 6f 74 20 72 65 73 65 74 20 64 69 72 65  annot reset dire
7310: 63 74 6f 72 69 65 73 20 6f 6e 20 74 68 69 73 20  ctories on this 
7320: 70 6c 61 74 66 6f 72 6d 2e 22 29 3b 0d 0a 23 65  platform.");..#e
7330: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
7340: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
7350: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 72 63  ..        if (rc
7360: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
7370: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
7380: 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66 65       rc = Unsafe
7390: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
73a0: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29  lite3_shutdown()
73b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
73c0: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
73d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
73e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
73f0: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 61  ermines if the a
7400: 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65  ssociated native
7410: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
7420: 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20  le is open...   
7430: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
7440: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
7450: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  s>..    /// Non-
7460: 7a 65 72 6f 20 69 66 20 74 68 65 20 61 73 73 6f  zero if the asso
7470: 63 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f  ciated native co
7480: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
7490: 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f  is open...    //
74a0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
74b0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
74c0: 69 64 65 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28  ide bool IsOpen(
74d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
74e0: 20 20 72 65 74 75 72 6e 20 28 5f 73 71 6c 20 21    return (_sql !
74f0: 3d 20 6e 75 6c 6c 29 20 26 26 20 21 5f 73 71 6c  = null) && !_sql
7500: 2e 49 73 49 6e 76 61 6c 69 64 20 26 26 20 21 5f  .IsInvalid && !_
7510: 73 71 6c 2e 49 73 43 6c 6f 73 65 64 3b 0d 0a 20  sql.IsClosed;.. 
7520: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
7530: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
7540: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 66  // Returns the f
7550: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70  ully qualified p
7560: 61 74 68 20 61 6e 64 20 66 69 6c 65 20 6e 61 6d  ath and file nam
7570: 65 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  e for the curren
7580: 74 6c 79 20 6f 70 65 6e 0d 0a 20 20 20 20 2f 2f  tly open..    //
7590: 2f 20 64 61 74 61 62 61 73 65 2c 20 69 66 20 61  / database, if a
75a0: 6e 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ny...    /// </s
75b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
75c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 62   <param name="db
75d0: 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Name">..    /// 
75e0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
75f0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
7600: 65 20 74 6f 20 71 75 65 72 79 2e 0d 0a 20 20 20  e to query...   
7610: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
7620: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
7630: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 75  ..    /// The fu
7640: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70 61  lly qualified pa
7650: 74 68 20 61 6e 64 20 66 69 6c 65 20 6e 61 6d 65  th and file name
7660: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
7670: 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly open database
7680: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 66 20 61 6e  ,..    /// if an
7690: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  y...    /// </re
76a0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
76b0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
76c0: 72 69 6e 67 20 47 65 74 46 69 6c 65 4e 61 6d 65  ring GetFileName
76d0: 28 73 74 72 69 6e 67 20 64 62 4e 61 6d 65 29 0d  (string dbName).
76e0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
76f0: 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
7700: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
7710: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
7720: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54         return UT
7730: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
7740: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7750: 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61  qlite3_db_filena
7760: 6d 65 5f 62 79 74 65 73 28 0d 0a 20 20 20 20 20  me_bytes(..     
7770: 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 54 6f 55         _sql, ToU
7780: 54 46 38 28 64 62 4e 61 6d 65 29 29 2c 20 2d 31  TF8(dbName)), -1
7790: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
77a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
77b0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
77c0: 68 6f 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20  hod attempts to 
77d0: 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 64  determine if a d
77e0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
77f0: 6f 6e 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 2f  on opened..    /
7800: 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70 65 63  // with the spec
7810: 69 66 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d  ified <see cref=
7820: 22 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73  "SQLiteOpenFlags
7830: 45 6e 75 6d 22 20 2f 3e 20 73 68 6f 75 6c 64 20  Enum" /> should 
7840: 62 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c 6c 6f  be..    /// allo
7850: 77 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 6e  wed into the con
7860: 6e 65 63 74 69 6f 6e 20 70 6f 6f 6c 2e 0d 0a 20  nection pool... 
7870: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7880: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
7890: 6d 20 6e 61 6d 65 3d 22 6f 70 65 6e 46 6c 61 67  m name="openFlag
78a0: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
78b0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
78c0: 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 22  teOpenFlagsEnum"
78d0: 20 2f 3e 20 74 68 61 74 20 77 65 72 65 20 73 70   /> that were sp
78e0: 65 63 69 66 69 65 64 20 77 68 65 6e 20 74 68 65  ecified when the
78f0: 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63  ..    /// connec
7900: 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64 2e  tion was opened.
7910: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
7920: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
7930: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
7940: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 63  on-zero if the c
7950: 6f 6e 6e 65 63 74 69 6f 6e 20 73 68 6f 75 6c 64  onnection should
7960: 20 28 65 76 65 6e 74 75 61 6c 6c 79 29 20 62 65   (eventually) be
7970: 20 61 6c 6c 6f 77 65 64 20 69 6e 74 6f 20 74 68   allowed into th
7980: 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65  e..    /// conne
7990: 63 74 69 6f 6e 20 70 6f 6f 6c 3b 20 6f 74 68 65  ction pool; othe
79a0: 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20  rwise, zero...  
79b0: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
79c0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
79d0: 61 74 69 63 20 62 6f 6f 6c 20 49 73 41 6c 6c 6f  atic bool IsAllo
79e0: 77 65 64 54 6f 55 73 65 50 6f 6f 6c 28 0d 0a 20  wedToUsePool(.. 
79f0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4f 70 65         SQLiteOpe
7a00: 6e 46 6c 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46  nFlagsEnum openF
7a10: 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 29 0d  lags..        ).
7a20: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7a30: 72 65 74 75 72 6e 20 6f 70 65 6e 46 6c 61 67 73  return openFlags
7a40: 20 3d 3d 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c   == SQLiteOpenFl
7a50: 61 67 73 45 6e 75 6d 2e 44 65 66 61 75 6c 74 3b  agsEnum.Default;
7a60: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
7a70: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
7a80: 20 76 6f 69 64 20 4f 70 65 6e 28 73 74 72 69 6e   void Open(strin
7a90: 67 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 73  g strFilename, s
7aa0: 74 72 69 6e 67 20 76 66 73 4e 61 6d 65 2c 20 53  tring vfsName, S
7ab0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7ac0: 6c 61 67 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46  lags connectionF
7ad0: 6c 61 67 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e  lags, SQLiteOpen
7ae0: 46 6c 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c  FlagsEnum openFl
7af0: 61 67 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c  ags, int maxPool
7b00: 53 69 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f  Size, bool usePo
7b10: 6f 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ol)..    {..    
7b20: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e    //..      // N
7b30: 4f 54 45 3a 20 49 66 20 74 68 65 20 64 61 74 61  OTE: If the data
7b40: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
7b50: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  is currently ope
7b60: 6e 2c 20 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20  n, attempt to.. 
7b70: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6c       //       cl
7b80: 6f 73 65 20 69 74 20 6e 6f 77 2e 20 20 54 68 69  ose it now.  Thi
7b90: 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 62  s must be done b
7ba0: 65 63 61 75 73 65 20 74 68 65 20 66 69 6c 65 20  ecause the file 
7bb0: 6e 61 6d 65 20 6f 72 0d 0a 20 20 20 20 20 20 2f  name or..      /
7bc0: 2f 20 20 20 20 20 20 20 6f 74 68 65 72 20 70 61  /       other pa
7bd0: 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61  rameters that ma
7be0: 79 20 69 6d 70 61 63 74 20 74 68 65 20 75 6e 64  y impact the und
7bf0: 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65  erlying database
7c00: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
7c10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20   connection may 
7c20: 68 61 76 65 20 63 68 61 6e 67 65 64 2e 0d 0a 20  have changed... 
7c30: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69       //..      i
7c40: 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29  f (_sql != null)
7c50: 20 43 6c 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a   Close(false);..
7c60: 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
7c70: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68    // NOTE: If th
7c80: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73  e connection was
7c90: 20 6e 6f 74 20 63 6c 6f 73 65 64 20 73 75 63 63   not closed succ
7ca0: 65 73 73 66 75 6c 6c 79 2c 20 74 68 72 6f 77 20  essfully, throw 
7cb0: 61 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  an..      //    
7cc0: 20 20 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 77     exception now
7cd0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
7ce0: 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e     if (_sql != n
7cf0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7d00: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
7d10: 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65  Exception("conne
7d20: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20  ction handle is 
7d30: 73 74 69 6c 6c 20 61 63 74 69 76 65 22 29 3b 0d  still active");.
7d40: 0a 0d 0a 20 20 20 20 20 20 5f 75 73 65 50 6f 6f  ...      _usePoo
7d50: 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 0d 0a  l = usePool;....
7d60: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
7d70: 2f 2f 20 42 55 47 46 49 58 3a 20 44 6f 20 6e 6f  // BUGFIX: Do no
7d80: 74 20 61 6c 6c 6f 77 20 61 20 63 6f 6e 6e 65 63  t allow a connec
7d90: 74 69 6f 6e 20 69 6e 74 6f 20 74 68 65 20 70 6f  tion into the po
7da0: 6f 6c 20 69 66 20 69 74 20 77 61 73 20 6f 70 65  ol if it was ope
7db0: 6e 65 64 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  ned..      //   
7dc0: 20 20 20 20 20 20 77 69 74 68 20 66 6c 61 67 73        with flags
7dd0: 20 74 68 61 74 20 61 72 65 20 69 6e 63 6f 6d 70   that are incomp
7de0: 61 74 69 62 6c 65 20 77 69 74 68 20 74 68 65 20  atible with the 
7df0: 64 65 66 61 75 6c 74 20 66 6c 61 67 73 0d 0a 20  default flags.. 
7e00: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
7e10: 28 65 2e 67 2e 20 72 65 61 64 2d 6f 6e 6c 79 29  (e.g. read-only)
7e20: 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  ...      //..   
7e30: 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c 20     if (_usePool 
7e40: 26 26 20 21 49 73 41 6c 6c 6f 77 65 64 54 6f 55  && !IsAllowedToU
7e50: 73 65 50 6f 6f 6c 28 6f 70 65 6e 46 6c 61 67 73  sePool(openFlags
7e60: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 75  ))..          _u
7e70: 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d  sePool = false;.
7e80: 0a 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65 4e 61  ...      _fileNa
7e90: 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65  me = strFilename
7ea0: 3b 0d 0a 20 20 20 20 20 20 5f 66 6c 61 67 73 20  ;..      _flags 
7eb0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  = connectionFlag
7ec0: 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  s;....      if (
7ed0: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20  usePool)..      
7ee0: 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 20  {..        _sql 
7ef0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7f00: 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73 74  onPool.Remove(st
7f10: 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50 6f  rFilename, maxPo
7f20: 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f  olSize, out _poo
7f30: 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20  lVersion);....  
7f40: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
7f50: 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64  ection.OnChanged
7f60: 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65  (null, new Conne
7f70: 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d  ctionEventArgs(.
7f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
7f90: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  iteConnectionEve
7fa0: 6e 74 54 79 70 65 2e 4f 70 65 6e 65 64 46 72 6f  ntType.OpenedFro
7fb0: 6d 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c  mPool, null, nul
7fc0: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
7fd0: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c  null, null, _sql
7fe0: 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e  , strFilename, n
7ff0: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20  ew object[] {.. 
8000: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
8010: 66 28 53 51 4c 69 74 65 33 29 2c 20 73 74 72 46  f(SQLite3), strF
8020: 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65  ilename, vfsName
8030: 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  , connectionFlag
8040: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
8050: 6f 70 65 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f  openFlags, maxPo
8060: 6f 6c 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 2c  olSize, usePool,
8070: 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29   _poolVersion })
8080: 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43  );....#if !NET_C
8090: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
80a0: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
80b0: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
80c0: 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74  teLine(HelperMet
80d0: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
80e0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
80f0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
8100: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
8110: 20 20 20 20 20 20 20 20 20 22 4f 70 65 6e 20 28           "Open (
8120: 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 48 61 6e  Pool): {0}", Han
8130: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
8140: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
8150: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  }....      if (_
8160: 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
8170: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
8180: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
8190: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
81a0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
81b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
81c0: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
81d0: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
81e0: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
81f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8200: 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20 49     IntPtr db = I
8210: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
8220: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
8230: 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66  orCode n;....#if
8240: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
8250: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  D..          int
8260: 20 65 78 74 46 75 6e 63 73 20 3d 20 48 65 6c 70   extFuncs = Help
8270: 65 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61  erMethods.HasFla
8280: 67 73 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  gs(connectionFla
8290: 67 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  gs, SQLiteConnec
82a0: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65  tionFlags.NoExte
82b0: 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20  nsionFunctions) 
82c0: 3f 20 30 20 3a 20 31 3b 0d 0a 0d 0a 20 20 20 20  ? 0 : 1;....    
82d0: 20 20 20 20 20 20 69 66 20 28 65 78 74 46 75 6e        if (extFun
82e0: 63 73 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  cs != 0)..      
82f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8300: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
8310: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8320: 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28  e3_open_interop(
8330: 54 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61  ToUTF8(strFilena
8340: 6d 65 29 2c 20 54 6f 55 54 46 38 28 76 66 73 4e  me), ToUTF8(vfsN
8350: 61 6d 65 29 2c 20 6f 70 65 6e 46 6c 61 67 73 2c  ame), openFlags,
8360: 20 65 78 74 46 75 6e 63 73 2c 20 72 65 66 20 64   extFuncs, ref d
8370: 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  b);..          }
8380: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
8390: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
83a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
83b0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
83c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
83d0: 65 33 5f 6f 70 65 6e 5f 76 32 28 54 6f 55 54 46  e3_open_v2(ToUTF
83e0: 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20  8(strFilename), 
83f0: 72 65 66 20 64 62 2c 20 6f 70 65 6e 46 6c 61 67  ref db, openFlag
8400: 73 2c 20 54 6f 55 54 46 38 28 76 66 73 4e 61 6d  s, ToUTF8(vfsNam
8410: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e));..          
8420: 7d 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  }....#if !NET_CO
8430: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
8440: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
8450: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
8460: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
8470: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
8480: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
8490: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
84a0: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4f                "O
84c0: 70 65 6e 3a 20 7b 30 7d 22 2c 20 64 62 29 29 3b  pen: {0}", db));
84d0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
84e0: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
84f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
8500: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
8510: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
8520: 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  null);..        
8530: 20 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c    _sql = new SQL
8540: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
8550: 64 6c 65 28 64 62 2c 20 74 72 75 65 29 3b 0d 0a  dle(db, true);..
8560: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8570: 20 20 20 6c 6f 63 6b 20 28 5f 73 71 6c 29 20 7b     lock (_sql) {
8580: 20 2f 2a 20 48 41 43 4b 3a 20 46 6f 72 63 65 20   /* HACK: Force 
8590: 74 68 65 20 53 79 6e 63 42 6c 6f 63 6b 20 74 6f  the SyncBlock to
85a0: 20 62 65 20 22 63 72 65 61 74 65 64 22 20 6e 6f   be "created" no
85b0: 77 2e 20 2a 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20  w. */ }....     
85c0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
85d0: 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75  ion.OnChanged(nu
85e0: 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69  ll, new Connecti
85f0: 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20  onEventArgs(..  
8600: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
8610: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54  ConnectionEventT
8620: 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48  ype.NewCriticalH
8630: 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20  andle, null,..  
8640: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
8650: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c  null, null, _sql
8660: 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e  , strFilename, n
8670: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20  ew object[] {.. 
8680: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
8690: 66 28 53 51 4c 69 74 65 33 29 2c 20 73 74 72 46  f(SQLite3), strF
86a0: 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65  ilename, vfsName
86b0: 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  , connectionFlag
86c0: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
86d0: 6f 70 65 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f  openFlags, maxPo
86e0: 6f 6c 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 20  olSize, usePool 
86f0: 7d 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  }));..      }...
8700: 0a 20 20 20 20 20 20 2f 2f 20 42 69 6e 64 20 66  .      // Bind f
8710: 75 6e 63 74 69 6f 6e 73 20 74 6f 20 74 68 69 73  unctions to this
8720: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66   connection.  If
8730: 20 61 6e 79 20 70 72 65 76 69 6f 75 73 20 66 75   any previous fu
8740: 6e 63 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73  nctions of the s
8750: 61 6d 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ame name..      
8760: 2f 2f 20 77 65 72 65 20 61 6c 72 65 61 64 79 20  // were already 
8770: 62 6f 75 6e 64 2c 20 74 68 65 6e 20 74 68 65 20  bound, then the 
8780: 6e 65 77 20 62 69 6e 64 69 6e 67 73 20 72 65 70  new bindings rep
8790: 6c 61 63 65 20 74 68 65 20 6f 6c 64 2e 0d 0a 20  lace the old... 
87a0: 20 20 20 20 20 69 66 20 28 21 48 65 6c 70 65 72       if (!Helper
87b0: 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67 73  Methods.HasFlags
87c0: 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  (connectionFlags
87d0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
87e0: 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75  onFlags.NoBindFu
87f0: 6e 63 74 69 6f 6e 73 29 29 0d 0a 20 20 20 20 20  nctions))..     
8800: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
8810: 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20   (_functions == 
8820: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8830: 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20       _functions 
8840: 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
8850: 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41  <SQLiteFunctionA
8860: 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65  ttribute, SQLite
8870: 46 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a  Function>();....
8880: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
8890: 68 20 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c  h (KeyValuePair<
88a0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
88b0: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
88c0: 75 6e 63 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20  unction> pair.. 
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88e0: 20 69 6e 20 53 51 4c 69 74 65 46 75 6e 63 74 69   in SQLiteFuncti
88f0: 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73  on.BindFunctions
8900: 28 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f  (this, connectio
8910: 6e 46 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  nFlags))..      
8920: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8930: 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b       _functions[
8940: 70 61 69 72 2e 4b 65 79 5d 20 3d 20 70 61 69 72  pair.Key] = pair
8950: 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  .Value;..       
8960: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
8970: 0a 20 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75  .      SetTimeou
8980: 74 28 30 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e  t(0);..      GC.
8990: 4b 65 65 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b  KeepAlive(_sql);
89a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
89b0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
89c0: 20 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28   void ClearPool(
89d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
89e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
89f0: 50 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f  Pool.ClearPool(_
8a00: 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  fileName);..    
8a10: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8a20: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
8a30: 6f 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20  ountPool()..    
8a40: 7b 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69  {..        Dicti
8a50: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e  onary<string, in
8a60: 74 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c  t> counts = null
8a70: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f  ;..        int o
8a80: 70 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20  penCount = 0;.. 
8a90: 20 20 20 20 20 20 20 69 6e 74 20 63 6c 6f 73 65         int close
8aa0: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20  Count = 0;..    
8ab0: 20 20 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75      int totalCou
8ac0: 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  nt = 0;....     
8ad0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
8ae0: 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74  ionPool.GetCount
8af0: 73 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  s(_fileName,..  
8b00: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 63 6f            ref co
8b10: 75 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f  unts, ref openCo
8b20: 75 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f  unt, ref closeCo
8b30: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
8b40: 20 20 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74    ref totalCount
8b50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
8b60: 74 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b  turn totalCount;
8b70: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
8b80: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8b90: 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74   void SetTimeout
8ba0: 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29  (int nTimeoutMS)
8bb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49  ..    {..      I
8bc0: 6e 74 50 74 72 20 64 62 20 3d 20 5f 73 71 6c 3b  ntPtr db = _sql;
8bd0: 0d 0a 20 20 20 20 20 20 69 66 20 28 64 62 20 3d  ..      if (db =
8be0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 74  = IntPtr.Zero) t
8bf0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
8c00: 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e  xception("no con
8c10: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61  nection handle a
8c20: 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 20 20 20  vailable");..   
8c30: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
8c40: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
8c50: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8c60: 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
8c70: 64 62 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b  db, nTimeoutMS);
8c80: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d  ..      if (n !=
8c90: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8ca0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
8cb0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
8cc0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
8cd0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
8ce0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
8cf0: 64 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c  de bool Step(SQL
8d00: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
8d10: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
8d20: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8d30: 20 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f   n;..      Rando
8d40: 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  m rnd = null;.. 
8d50: 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74       uint startt
8d60: 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69  ick = (uint)Envi
8d70: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
8d80: 74 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 74  t;..      uint t
8d90: 69 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29 28  imeout = (uint)(
8da0: 73 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63  stmt._command._c
8db0: 6f 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20  ommandTimeout * 
8dc0: 31 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  1000);....      
8dd0: 52 65 73 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74  ResetCancelCount
8de0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69  ();....      whi
8df0: 6c 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20  le (true)..     
8e00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d   {..        try.
8e10: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8e20: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8e30: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8e40: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
8e50: 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
8e60: 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
8e70: 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
8e80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8e90: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
8ea0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8eb0: 73 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  step(stmt._sqlit
8ec0: 65 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20  e_stmt);..      
8ed0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
8ee0: 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f  f (ShouldThrowFo
8ef0: 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20  rCancel())..    
8f00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8f10: 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c     if ((n == SQL
8f20: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
8f30: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
8f40: 20 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74       (n == SQLit
8f50: 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20  eErrorCode.Row) 
8f60: 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
8f70: 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65      (n == SQLite
8f80: 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29  ErrorCode.Done))
8f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8fb0: 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72   n = SQLiteError
8fc0: 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d  Code.Interrupt;.
8fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
8ff0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
9000: 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29  ception(n, null)
9010: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
9020: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
9030: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9040: 2e 49 6e 74 65 72 72 75 70 74 29 20 72 65 74 75  .Interrupt) retu
9050: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
9060: 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
9070: 74 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29  teErrorCode.Row)
9080: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
9090: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
90a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
90b0: 44 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61 6c  Done) return fal
90c0: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  se;....        i
90d0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
90e0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
90f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9100: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
9110: 65 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e r;....        
9120: 20 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63    // An error oc
9130: 63 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74 20  curred, attempt 
9140: 74 6f 20 72 65 73 65 74 20 74 68 65 20 73 74 61  to reset the sta
9150: 74 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20  tement.  If the 
9160: 72 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65 63  reset worked bec
9170: 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20  ause the..      
9180: 20 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68 61      // schema ha
9190: 73 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74 72  s changed, re-tr
91a0: 79 20 74 68 65 20 73 74 65 70 20 61 67 61 69 6e  y the step again
91b0: 2e 20 20 49 66 20 69 74 20 65 72 72 6f 72 65 64  .  If it errored
91c0: 20 6f 75 72 20 62 65 63 61 75 73 65 20 74 68 65   our because the
91d0: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..     
91e0: 20 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65       // is locke
91f0: 64 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65 74  d, then keep ret
9200: 72 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65 20  rying until the 
9210: 63 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20  command timeout 
9220: 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20  occurs...       
9230: 20 20 20 72 20 3d 20 52 65 73 65 74 28 73 74 6d     r = Reset(stm
9240: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
9250: 20 69 66 20 28 72 20 3d 3d 20 53 51 4c 69 74 65   if (r == SQLite
9260: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
9270: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
9280: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
9290: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
92a0: 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
92b0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28        else if ((
92c0: 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  r == SQLiteError
92d0: 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72  Code.Locked || r
92e0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
92f0: 6f 64 65 2e 42 75 73 79 29 20 26 26 20 73 74 6d  ode.Busy) && stm
9300: 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75  t._command != nu
9310: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ll)..          {
9320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9330: 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20   Keep trying..  
9340: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e            if (rn
9350: 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69  d == null) // Fi
9360: 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65  rst time we've e
9370: 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c  ncountered the l
9380: 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ock..           
9390: 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e     rnd = new Ran
93a0: 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dom();....      
93b0: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76        // If we'v
93c0: 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63  e exceeded the c
93d0: 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74  ommand's timeout
93e0: 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68  , give up and th
93f0: 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20  row an error..  
9400: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75            if ((u
9410: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
9420: 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72  TickCount - star
9430: 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29  ttick > timeout)
9440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
9460: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
9470: 78 63 65 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c  xception(r, GetL
9480: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
9490: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
94a0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
94b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f              // O
94d0: 74 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66  therwise sleep f
94e0: 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75  or a random amou
94f0: 6e 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f  nt of time up to
9500: 20 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20   150ms..        
9510: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72        System.Thr
9520: 65 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c  eading.Thread.Sl
9530: 65 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20  eep(rnd.Next(1, 
9540: 31 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  150));..        
9550: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
9560: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
9570: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
9580: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
9590: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20  y>..    /// Has 
95a0: 74 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73  the sqlite3_errs
95b0: 74 72 28 29 20 63 6f 72 65 20 6c 69 62 72 61 72  tr() core librar
95c0: 79 20 41 50 49 20 62 65 65 6e 20 63 68 65 63 6b  y API been check
95d0: 65 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20  ed for yet?..   
95e0: 20 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20 69   /// If so, is i
95f0: 74 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20  t present?..    
9600: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
9610: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
9620: 69 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 65 72  ic bool? have_er
9630: 72 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rstr = null;....
9640: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9650: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
9660: 6e 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  ns the error mes
9670: 73 61 67 65 20 66 6f 72 20 74 68 65 20 73 70 65  sage for the spe
9680: 63 69 66 69 65 64 20 53 51 4c 69 74 65 20 72 65  cified SQLite re
9690: 74 75 72 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d  turn code using.
96a0: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c  .    /// the sql
96b0: 69 74 65 33 5f 65 72 72 73 74 72 28 29 20 66 75  ite3_errstr() fu
96c0: 6e 63 74 69 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20  nction, falling 
96d0: 62 61 63 6b 20 74 6f 20 74 68 65 20 69 6e 74 65  back to the inte
96e0: 72 6e 61 6c 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20  rnal lookup..   
96f0: 20 2f 2f 2f 20 74 61 62 6c 65 20 69 66 20 6e 65   /// table if ne
9700: 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f  cessary...    //
9710: 2f 0d 0a 20 20 20 20 2f 2f 2f 20 57 41 52 4e 49  /..    /// WARNI
9720: 4e 47 3a 20 44 6f 20 6e 6f 74 20 72 65 6d 6f 76  NG: Do not remov
9730: 65 20 74 68 69 73 20 6d 65 74 68 6f 64 2c 20 69  e this method, i
9740: 74 20 69 73 20 75 73 65 64 20 76 69 61 20 72 65  t is used via re
9750: 66 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  flection...    /
9760: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
9770: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
9780: 6d 65 3d 22 72 63 22 3e 54 68 65 20 53 51 4c 69  me="rc">The SQLi
9790: 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 3c  te return code.<
97a0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
97b0: 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 65 72   <returns>The er
97c0: 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 72 20 6e  ror message or n
97d0: 75 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74  ull if it cannot
97e0: 20 62 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74 75   be found.</retu
97f0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
9800: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
9810: 20 47 65 74 45 72 72 6f 72 53 74 72 69 6e 67 28   GetErrorString(
9820: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
9830: 72 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  rc)..    {..    
9840: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
9850: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9860: 69 66 20 28 68 61 76 65 5f 65 72 72 73 74 72 20  if (have_errstr 
9870: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
9880: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9890: 20 20 20 20 20 20 20 20 20 69 6e 74 20 76 65 72           int ver
98a0: 73 69 6f 6e 4e 75 6d 62 65 72 20 3d 20 53 51 4c  sionNumber = SQL
98b0: 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72  iteVersionNumber
98c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
98d0: 20 20 20 68 61 76 65 5f 65 72 72 73 74 72 20 3d     have_errstr =
98e0: 20 28 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20   (versionNumber 
98f0: 3e 3d 20 33 30 30 37 30 31 35 29 3b 0d 0a 20 20  >= 3007015);..  
9900: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9910: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
9920: 62 6f 6f 6c 29 68 61 76 65 5f 65 72 72 73 74 72  bool)have_errstr
9930: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9950: 20 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55    IntPtr ptr = U
9960: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9970: 64 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 73 74  ds.sqlite3_errst
9980: 72 28 72 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  r(rc);....      
9990: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 74            if (pt
99a0: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
99b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
99c0: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
99d0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
99e0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
99f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9a00: 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74   Marshal.PtrToSt
9a10: 72 69 6e 67 41 6e 73 69 28 70 74 72 29 3b 0d 0a  ringAnsi(ptr);..
9a20: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
9a30: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9a40: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70  n UTF8ToString(p
9a50: 74 72 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  tr, -1);..#endif
9a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9a70: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
9a80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
9a90: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 6e         catch (En
9aa0: 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64  tryPointNotFound
9ab0: 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20  Exception)..    
9ac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9ad0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
9ae0: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ...        }....
9af0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 46          return F
9b00: 61 6c 6c 62 61 63 6b 47 65 74 45 72 72 6f 72 53  allbackGetErrorS
9b10: 74 72 69 6e 67 28 72 63 29 3b 0d 0a 20 20 20 20  tring(rc);..    
9b20: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
9b30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9b40: 48 61 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  Has the sqlite3_
9b50: 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 29 20  stmt_readonly() 
9b60: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 41 50 49  core library API
9b70: 20 62 65 65 6e 20 63 68 65 63 6b 65 64 20 66 6f   been checked fo
9b80: 72 20 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20  r yet?..    /// 
9b90: 49 66 20 73 6f 2c 20 69 73 20 69 74 20 70 72 65  If so, is it pre
9ba0: 73 65 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sent?..    /// <
9bb0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
9bc0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
9bd0: 6f 6c 3f 20 68 61 76 65 5f 73 74 6d 74 5f 72 65  ol? have_stmt_re
9be0: 61 64 6f 6e 6c 79 20 3d 20 6e 75 6c 6c 3b 0d 0a  adonly = null;..
9bf0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
9c00: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
9c10: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  urns non-zero if
9c20: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73   the specified s
9c30: 74 61 74 65 6d 65 6e 74 20 69 73 20 72 65 61 64  tatement is read
9c40: 2d 6f 6e 6c 79 20 69 6e 20 6e 61 74 75 72 65 2e  -only in nature.
9c50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
9c60: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
9c70: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22  aram name="stmt"
9c80: 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74  >The statement t
9c90: 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e  o check.</param>
9ca0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
9cb0: 6e 73 3e 54 72 75 65 20 69 66 20 74 68 65 20 6f  ns>True if the o
9cc0: 75 74 65 72 20 71 75 65 72 79 20 69 73 20 72 65  uter query is re
9cd0: 61 64 2d 6f 6e 6c 79 2e 3c 2f 72 65 74 75 72 6e  ad-only.</return
9ce0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
9cf0: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49   override bool I
9d00: 73 52 65 61 64 4f 6e 6c 79 28 0d 0a 20 20 20 20  sReadOnly(..    
9d10: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
9d20: 65 6e 74 20 73 74 6d 74 0d 0a 20 20 20 20 20 20  ent stmt..      
9d30: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
9d40: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
9d50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9d60: 69 66 20 28 68 61 76 65 5f 73 74 6d 74 5f 72 65  if (have_stmt_re
9d70: 61 64 6f 6e 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d  adonly == null).
9d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9da0: 69 6e 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65  int versionNumbe
9db0: 72 20 3d 20 53 51 4c 69 74 65 56 65 72 73 69 6f  r = SQLiteVersio
9dc0: 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20  nNumber;..      
9dd0: 20 20 20 20 20 20 20 20 20 20 68 61 76 65 5f 73            have_s
9de0: 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 28  tmt_readonly = (
9df0: 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d  versionNumber >=
9e00: 20 33 30 30 37 30 30 34 29 3b 0d 0a 20 20 20 20   3007004);..    
9e10: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9e20: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 62 6f           if ((bo
9e30: 6f 6c 29 68 61 76 65 5f 73 74 6d 74 5f 72 65 61  ol)have_stmt_rea
9e40: 64 6f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  donly)..        
9e50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9e60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
9e70: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9e80: 73 2e 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 72  s.sqlite3_stmt_r
9e90: 65 61 64 6f 6e 6c 79 28 0d 0a 20 20 20 20 20 20  eadonly(..      
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
9eb0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
9ec0: 20 21 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20   != 0;..        
9ed0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
9ee0: 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
9ef0: 28 45 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f  (EntryPointNotFo
9f00: 75 6e 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20  undException).. 
9f10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9f20: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
9f30: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
9f40: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
9f50: 6e 20 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 45  n false; /* NOTE
9f60: 3a 20 55 6e 6b 6e 6f 77 6e 2c 20 61 73 73 75 6d  : Unknown, assum
9f70: 65 20 66 61 6c 73 65 2e 20 2a 2f 0d 0a 20 20 20  e false. */..   
9f80: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
9f90: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
9fa0: 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65  teErrorCode Rese
9fb0: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
9fc0: 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a  t stmt)..    {..
9fd0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
9fe0: 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20  rCode n;....#if 
9ff0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
a000: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
a010: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a020: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e  sqlite3_reset_in
a030: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
a040: 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65  te_stmt);..#else
a050: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
a060: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
a070: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74  sqlite3_reset(st
a080: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
a090: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
a0a0: 20 20 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68     // If the sch
a0b0: 65 6d 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79  ema changed, try
a0c0: 20 61 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20   and re-prepare 
a0d0: 69 74 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  it..      if (n 
a0e0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
a0f0: 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20  de.Schema)..    
a100: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20    {..        // 
a110: 52 65 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79  Recreate a dummy
a120: 20 73 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20   statement..    
a130: 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d      string str =
a140: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
a150: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61  using (SQLiteSta
a160: 74 65 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65  tement tmp = Pre
a170: 70 61 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e  pare(null, stmt.
a180: 5f 73 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e  _sqlStatement, n
a190: 75 6c 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74  ull, (uint)(stmt
a1a0: 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61  ._command._comma
a1b0: 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30  ndTimeout * 1000
a1c0: 29 2c 20 72 65 66 20 73 74 72 29 29 0d 0a 20 20  ), ref str))..  
a1d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a1e0: 20 20 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74     // Finalize t
a1f0: 68 65 20 65 78 69 73 74 69 6e 67 20 73 74 61 74  he existing stat
a200: 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  ement..         
a210: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
a220: 6d 74 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20  mt.Dispose();.. 
a230: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73           // Reas
a240: 73 69 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65  sign a new state
a250: 6d 65 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20  ment pointer to 
a260: 74 68 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e  the old statemen
a270: 74 20 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20  t and clear the 
a280: 74 65 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20  temporary one.. 
a290: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 6d 70           if (tmp
a2a0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
a2b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a2c0: 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65      stmt._sqlite
a2d0: 5f 73 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c  _stmt = tmp._sql
a2e0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20  ite_stmt;..     
a2f0: 20 20 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69         tmp._sqli
a300: 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d  te_stmt = null;.
a310: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
a320: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61            // Rea
a330: 70 70 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d  pply parameters.
a340: 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e  .          stmt.
a350: 42 69 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29  BindParameters()
a360: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
a370: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
a380: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b  iteErrorCode.Unk
a390: 6e 6f 77 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77  nown; // Reset w
a3a0: 61 73 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65  as OK, with sche
a3b0: 6d 61 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20  ma change..     
a3c0: 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69   }..      else i
a3d0: 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
a3e0: 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c  rorCode.Locked |
a3f0: 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  | n == SQLiteErr
a400: 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20  orCode.Busy)..  
a410: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
a420: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21  ...      if (n !
a430: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
a440: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 74  e.Ok)..        t
a450: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
a460: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
a470: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a  astError());....
a480: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 20        return n; 
a490: 2f 2f 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20  // We reset OK, 
a4a0: 6e 6f 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  no schema change
a4b0: 73 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  s..    }....    
a4c0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
a4d0: 65 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74  e string GetLast
a4e0: 45 72 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a  Error()..    {..
a4f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
a500: 65 74 4c 61 73 74 45 72 72 6f 72 28 6e 75 6c 6c  etLastError(null
a510: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
a520: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
a530: 64 65 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73  de string GetLas
a540: 74 45 72 72 6f 72 28 73 74 72 69 6e 67 20 64 65  tError(string de
a550: 66 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a  fValue)..    {..
a560: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72          string r
a570: 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65 42 61  esult = SQLiteBa
a580: 73 65 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28  se.GetLastError(
a590: 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20  _sql, _sql);..  
a5a0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
a5b0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72  .IsNullOrEmpty(r
a5c0: 65 73 75 6c 74 29 29 20 72 65 73 75 6c 74 20 3d  esult)) result =
a5d0: 20 64 65 66 56 61 6c 75 65 3b 0d 0a 20 20 20 20   defValue;..    
a5e0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
a5f0: 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
a600: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a660: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
a670: 51 75 65 72 79 20 44 69 61 67 6e 6f 73 74 69 63  Query Diagnostic
a680: 73 20 53 75 70 70 6f 72 74 0d 0a 20 20 20 20 2f  s Support..    /
a690: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
a6a0: 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64    /// This field
a6b0: 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70   is used to keep
a6c0: 20 74 72 61 63 6b 20 6f 66 20 77 68 65 74 68 65   track of whethe
a6d0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 20  r or not the..  
a6e0: 20 20 2f 2f 2f 20 22 53 51 4c 69 74 65 5f 46 6f    /// "SQLite_Fo
a6f0: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 22 20 65  rceLogPrepare" e
a700: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
a710: 62 6c 65 20 68 61 73 20 62 65 65 6e 20 71 75 65  ble has been que
a720: 72 69 65 64 2e 20 20 49 66 20 73 6f 2c 0d 0a 20  ried.  If so,.. 
a730: 20 20 20 2f 2f 2f 20 69 74 20 77 69 6c 6c 20 6f     /// it will o
a740: 6e 6c 79 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20  nly be non-zero 
a750: 69 66 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65  if the environme
a760: 6e 74 20 76 61 72 69 61 62 6c 65 20 77 61 73 20  nt variable was 
a770: 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f  present...    //
a780: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
a790: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
a7a0: 20 62 6f 6f 6c 3f 20 66 6f 72 63 65 4c 6f 67 50   bool? forceLogP
a7b0: 72 65 70 61 72 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  repare = null;..
a7c0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
a830: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
a840: 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
a850: 66 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70  f all calls to p
a860: 72 65 70 61 72 65 20 61 20 53 51 4c 20 71 75 65  repare a SQL que
a870: 72 79 20 77 69 6c 6c 20 62 65 20 6c 6f 67 67 65  ry will be logge
a880: 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 67 61  d,..    /// rega
a890: 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 66 6c  rdless of the fl
a8a0: 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f  ags for the asso
a8b0: 63 69 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f  ciated connectio
a8c0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
a8d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
a8e0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
a8f0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6c  // Non-zero to l
a900: 6f 67 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20  og all calls to 
a910: 70 72 65 70 61 72 65 20 61 20 53 51 4c 20 71 75  prepare a SQL qu
a920: 65 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ery...    /// </
a930: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
a940: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f  ternal static bo
a950: 6f 6c 20 46 6f 72 63 65 4c 6f 67 50 72 65 70 61  ol ForceLogPrepa
a960: 72 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  re()..    {..   
a970: 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52       lock (syncR
a980: 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  oot)..        {.
a990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
a9a0: 28 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65  (forceLogPrepare
a9b0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
a9c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a9d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 55 6e            if (Un
a9e0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a9f0: 73 2e 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75  s.GetSettingValu
aa00: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
aa20: 69 74 65 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70  ite_ForceLogPrep
aa30: 61 72 65 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e  are", null) != n
aa40: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
aa50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
aa70: 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 20 74  ceLogPrepare = t
aa80: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
aa90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
aaa0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
aac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aad0: 20 20 20 20 20 20 66 6f 72 63 65 4c 6f 67 50 72        forceLogPr
aae0: 65 70 61 72 65 20 3d 20 66 61 6c 73 65 3b 0d 0a  epare = false;..
aaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab00: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
ab10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ab20: 72 65 74 75 72 6e 20 28 62 6f 6f 6c 29 66 6f 72  return (bool)for
ab30: 63 65 4c 6f 67 50 72 65 70 61 72 65 3b 0d 0a 20  ceLogPrepare;.. 
ab40: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
ab50: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
ab60: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
ab70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abc0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
abd0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
abe0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
abf0: 50 72 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f  Prepare(SQLiteCo
ac00: 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74  nnection cnn, st
ac10: 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c  ring strSql, SQL
ac20: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65  iteStatement pre
ac30: 76 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65  vious, uint time
ac40: 6f 75 74 4d 53 2c 20 72 65 66 20 73 74 72 69 6e  outMS, ref strin
ac50: 67 20 73 74 72 52 65 6d 61 69 6e 29 0d 0a 20 20  g strRemain)..  
ac60: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 21    {..      if (!
ac70: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
ac80: 6d 70 74 79 28 73 74 72 53 71 6c 29 29 20 73 74  mpty(strSql)) st
ac90: 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 54 72  rSql = strSql.Tr
aca0: 69 6d 28 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  im();..      if 
acb0: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
acc0: 72 45 6d 70 74 79 28 73 74 72 53 71 6c 29 29 0d  rEmpty(strSql)).
acd0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
ace0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
acf0: 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65 20 64 6f   NOTE: SQLite do
ad00: 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74  es not support t
ad10: 68 65 20 63 6f 6e 63 65 70 74 20 6f 66 20 73 65  he concept of se
ad20: 70 61 72 61 74 65 20 73 63 68 65 6d 61 73 0d 0a  parate schemas..
ad30: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
ad40: 20 69 6e 20 6f 6e 65 20 64 61 74 61 62 61 73 65   in one database
ad50: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 6d  ; therefore, rem
ad60: 6f 76 65 20 74 68 65 20 62 61 73 65 20 73 63 68  ove the base sch
ad70: 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ema name..      
ad80: 20 20 2f 2f 20 20 20 20 20 20 20 75 73 65 64 20    //       used 
ad90: 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74 65 67 72  to smooth integr
ada0: 61 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 62  ation with the b
adb0: 61 73 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ase .NET Framewo
adc0: 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  rk..        //  
add0: 20 20 20 20 20 64 61 74 61 20 63 6c 61 73 73 65       data classe
ade0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  s...        //..
adf0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 62          string b
ae00: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20  aseSchemaName = 
ae10: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
ae20: 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65 6d 61 4e  cnn._baseSchemaN
ae30: 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ame : null;.... 
ae40: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
ae50: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
ae60: 28 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29  (baseSchemaName)
ae70: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
ae80: 20 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d          strSql =
ae90: 20 73 74 72 53 71 6c 2e 52 65 70 6c 61 63 65 28   strSql.Replace(
aea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aeb0: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
aec0: 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75  ringFormat(Cultu
aed0: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
aee0: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
aef0: 20 20 20 20 20 20 20 20 22 5b 7b 30 7d 5d 2e 22          "[{0}]."
af00: 2c 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  , baseSchemaName
af10: 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29  ), String.Empty)
af20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ;....          s
af30: 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52  trSql = strSql.R
af40: 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20  eplace(..       
af50: 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74         HelperMet
af60: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
af70: 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
af80: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d  variantCulture,.
af90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
afa0: 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d  {0}.", baseSchem
afb0: 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45  aName), String.E
afc0: 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  mpty);..        
afd0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
afe0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
aff0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 20  tionFlags flags 
b000: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 28 63 6e  =..          (cn
b010: 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e  n != null) ? cnn
b020: 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69 74 65 43  .Flags : SQLiteC
b030: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
b040: 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20  efault;....     
b050: 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65   if (ForceLogPre
b060: 70 61 72 65 28 29 20 7c 7c 0d 0a 20 20 20 20 20  pare() ||..     
b070: 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f       HelperMetho
b080: 64 73 2e 4c 6f 67 50 72 65 70 61 72 65 28 66 6c  ds.LogPrepare(fl
b090: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  ags))..      {..
b0a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 73            if ((s
b0b0: 74 72 53 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c  trSql == null) |
b0c0: 7c 20 28 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68  | (strSql.Length
b0d0: 20 3d 3d 20 30 29 20 7c 7c 20 28 73 74 72 53 71   == 0) || (strSq
b0e0: 6c 2e 54 72 69 6d 28 29 2e 4c 65 6e 67 74 68 20  l.Trim().Length 
b0f0: 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20  == 0))..        
b100: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
b110: 4c 6f 67 4d 65 73 73 61 67 65 28 22 50 72 65 70  LogMessage("Prep
b120: 61 72 69 6e 67 20 7b 3c 6e 6f 74 68 69 6e 67 3e  aring {<nothing>
b130: 7d 2e 2e 2e 22 29 3b 0d 0a 20 20 20 20 20 20 20  }...");..       
b140: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
b150: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
b160: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70  .LogMessage(Help
b170: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
b180: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
b190: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
b1a0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
b1b0: 6c 74 75 72 65 2c 20 22 50 72 65 70 61 72 69 6e  lture, "Preparin
b1c0: 67 20 7b 7b 7b 30 7d 7d 7d 2e 2e 2e 22 2c 20 73  g {{{0}}}...", s
b1d0: 74 72 53 71 6c 29 29 3b 0d 0a 20 20 20 20 20 20  trSql));..      
b1e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  }....      IntPt
b1f0: 72 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e  r stmt = IntPtr.
b200: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74  Zero;..      Int
b210: 50 74 72 20 70 74 72 20 3d 20 49 6e 74 50 74 72  Ptr ptr = IntPtr
b220: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e  .Zero;..      in
b230: 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  t len = 0;..    
b240: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
b250: 65 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f  e n = SQLiteErro
b260: 72 43 6f 64 65 2e 53 63 68 65 6d 61 3b 0d 0a 20  rCode.Schema;.. 
b270: 20 20 20 20 20 69 6e 74 20 72 65 74 72 69 65 73       int retries
b280: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74   = 0;..      int
b290: 20 6d 61 78 69 6d 75 6d 52 65 74 72 69 65 73 20   maximumRetries 
b2a0: 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20  = (cnn != null) 
b2b0: 3f 20 63 6e 6e 2e 5f 70 72 65 70 61 72 65 52 65  ? cnn._prepareRe
b2c0: 74 72 69 65 73 20 3a 20 53 51 4c 69 74 65 43 6f  tries : SQLiteCo
b2d0: 6e 6e 65 63 74 69 6f 6e 2e 44 65 66 61 75 6c 74  nnection.Default
b2e0: 50 72 65 70 61 72 65 52 65 74 72 69 65 73 3b 0d  PrepareRetries;.
b2f0: 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20  .      byte[] b 
b300: 3d 20 54 6f 55 54 46 38 28 73 74 72 53 71 6c 29  = ToUTF8(strSql)
b310: 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ;..      string 
b320: 74 79 70 65 64 65 66 73 20 3d 20 6e 75 6c 6c 3b  typedefs = null;
b330: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 53 74  ..      SQLiteSt
b340: 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d 20 6e 75  atement cmd = nu
b350: 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f  ll;..      Rando
b360: 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  m rnd = null;.. 
b370: 20 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74       uint startt
b380: 69 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69  ick = (uint)Envi
b390: 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e  ronment.TickCoun
b3a0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65 73 65  t;....      Rese
b3b0: 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 3b 0d  tCancelCount();.
b3c0: 0a 0d 0a 20 20 20 20 20 20 47 43 48 61 6e 64 6c  ...      GCHandl
b3d0: 65 20 68 61 6e 64 6c 65 20 3d 20 47 43 48 61 6e  e handle = GCHan
b3e0: 64 6c 65 2e 41 6c 6c 6f 63 28 62 2c 20 47 43 48  dle.Alloc(b, GCH
b3f0: 61 6e 64 6c 65 54 79 70 65 2e 50 69 6e 6e 65 64  andleType.Pinned
b400: 29 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  );..      IntPtr
b410: 20 70 73 71 6c 20 3d 20 68 61 6e 64 6c 65 2e 41   psql = handle.A
b420: 64 64 72 4f 66 50 69 6e 6e 65 64 4f 62 6a 65 63  ddrOfPinnedObjec
b430: 74 28 29 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  t();..      SQLi
b440: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
b450: 65 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  e statementHandl
b460: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
b470: 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   try..      {.. 
b480: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 28 6e         while ((n
b490: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
b4a0: 6f 64 65 2e 53 63 68 65 6d 61 20 7c 7c 20 6e 20  ode.Schema || n 
b4b0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
b4c0: 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20 3d  de.Locked || n =
b4d0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b4e0: 65 2e 42 75 73 79 29 20 26 26 20 72 65 74 72 69  e.Busy) && retri
b4f0: 65 73 20 3c 20 6d 61 78 69 6d 75 6d 52 65 74 72  es < maximumRetr
b500: 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ies)..        {.
b510: 0a 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a  .          try..
b520: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b530: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
b540: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
b550: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b560: 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
b570: 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
b580: 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
b590: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b5a0: 20 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20           stmt = 
b5b0: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
b5c0: 20 20 20 20 20 20 20 20 20 20 70 74 72 20 3d 20            ptr = 
b5d0: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
b5e0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
b5f0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
b600: 20 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20    len = 0;..    
b610: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
b620: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
b630: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
b640: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70 73  interop(_sql, ps
b650: 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31  ql, b.Length - 1
b660: 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20  , ref stmt, ref 
b670: 70 74 72 2c 20 72 65 66 20 6c 65 6e 29 3b 0d 0a  ptr, ref len);..
b680: 23 65 6c 73 65 0d 0a 23 69 66 20 55 53 45 5f 50  #else..#if USE_P
b690: 52 45 50 41 52 45 5f 56 32 0d 0a 20 20 20 20 20  REPARE_V2..     
b6a0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
b6b0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b6c0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
b6d0: 32 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  2(_sql, psql, b.
b6e0: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20  Length - 1, ref 
b6f0: 73 74 6d 74 2c 20 72 65 66 20 70 74 72 29 3b 0d  stmt, ref ptr);.
b700: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
b710: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
b720: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
b730: 74 65 33 5f 70 72 65 70 61 72 65 28 5f 73 71 6c  te3_prepare(_sql
b740: 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68  , psql, b.Length
b750: 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20   - 1, ref stmt, 
b760: 72 65 66 20 70 74 72 29 3b 0d 0a 23 65 6e 64 69  ref ptr);..#endi
b770: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  f..            l
b780: 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65 6e 64 69 66  en = -1;..#endif
b790: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
b7a0: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
b7b0: 5f 53 54 41 54 45 4d 45 4e 54 0d 0a 20 20 20 20  _STATEMENT..    
b7c0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
b7d0: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
b7e0: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
b7f0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
b800: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
b810: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
b820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b830: 20 20 22 50 72 65 70 61 72 65 20 28 7b 30 7d 29    "Prepare ({0})
b840: 3a 20 7b 31 7d 22 2c 20 6e 2c 20 73 74 6d 74 29  : {1}", n, stmt)
b850: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
b860: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
b870: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
b880: 6f 64 65 2e 4f 6b 29 20 26 26 20 28 73 74 6d 74  ode.Ok) && (stmt
b890: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
b8a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b8b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b8c0: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e  if (statementHan
b8d0: 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 73 74 61  dle != null) sta
b8e0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2e 44 69 73  tementHandle.Dis
b8f0: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
b900: 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
b910: 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 53 51 4c  Handle = new SQL
b920: 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64  iteStatementHand
b930: 6c 65 28 5f 73 71 6c 2c 20 73 74 6d 74 29 3b 0d  le(_sql, stmt);.
b940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b950: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b960: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61           if (sta
b970: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20  tementHandle != 
b980: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
b990: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b9a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b9b0: 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
b9c0: 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
b9d0: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
b9e0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
b9f0: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79  onnectionEventTy
ba00: 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c 48 61  pe.NewCriticalHa
ba10: 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  ndle, null, null
ba20: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ba30: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 73 74 61   null, null, sta
ba40: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 2c 20 73 74  tementHandle, st
ba50: 72 53 71 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  rSql, new object
ba60: 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
ba70: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
ba80: 65 33 29 2c 20 63 6e 6e 2c 20 73 74 72 53 71 6c  e3), cnn, strSql
ba90: 2c 20 70 72 65 76 69 6f 75 73 2c 20 74 69 6d 65  , previous, time
baa0: 6f 75 74 4d 53 20 7d 29 29 3b 0d 0a 20 20 20 20  outMS }));..    
bab0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
bac0: 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54       if (ShouldT
bad0: 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29  hrowForCancel())
bae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
baf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
bb00: 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  ((n == SQLiteErr
bb10: 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20  orCode.Ok) ||.. 
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb30: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
bb40: 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a  orCode.Row) ||..
bb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb60: 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72    (n == SQLiteEr
bb70: 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a  rorCode.Done))..
bb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
bb90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bba0: 20 20 20 6e 20 3d 20 53 51 4c 69 74 65 45 72 72     n = SQLiteErr
bbb0: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
bbc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
bbd0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
bbe0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
bbf0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
bc00: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
bc10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
bc20: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
bc30: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
bc40: 72 75 70 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rupt)..         
bc50: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
bc60: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20       else if (n 
bc70: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
bc80: 64 65 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20  de.Schema)..    
bc90: 20 20 20 20 20 20 20 20 72 65 74 72 69 65 73 2b          retries+
bca0: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c  +;..          el
bcb0: 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69  se if (n == SQLi
bcc0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
bcd0: 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  r)..          {.
bce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
bcf0: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
bd00: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 2c 20  GetLastError(), 
bd10: 22 6e 65 61 72 20 5c 22 54 59 50 45 53 5c 22 3a  "near \"TYPES\":
bd20: 20 73 79 6e 74 61 78 20 65 72 72 6f 72 22 2c 20   syntax error", 
bd30: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
bd40: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
bd50: 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  se) == 0)..     
bd60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bd70: 20 20 20 20 20 20 20 20 69 6e 74 20 70 6f 73 20          int pos 
bd80: 3d 20 73 74 72 53 71 6c 2e 49 6e 64 65 78 4f 66  = strSql.IndexOf
bd90: 28 27 3b 27 29 3b 0d 0a 20 20 20 20 20 20 20 20  (';');..        
bda0: 20 20 20 20 20 20 69 66 20 28 70 6f 73 20 3d 3d        if (pos ==
bdb0: 20 2d 31 29 20 70 6f 73 20 3d 20 73 74 72 53 71   -1) pos = strSq
bdc0: 6c 2e 4c 65 6e 67 74 68 20 2d 20 31 3b 0d 0a 0d  l.Length - 1;...
bdd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
bde0: 79 70 65 64 65 66 73 20 3d 20 73 74 72 53 71 6c  ypedefs = strSql
bdf0: 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 70 6f  .Substring(0, po
be00: 73 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20 20  s + 1);..       
be10: 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20         strSql = 
be20: 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69 6e 67  strSql.Substring
be30: 28 70 6f 73 20 2b 20 31 29 3b 0d 0a 0d 0a 20 20  (pos + 1);....  
be40: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 52              strR
be50: 65 6d 61 69 6e 20 3d 20 53 74 72 69 6e 67 2e 45  emain = String.E
be60: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
be70: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d         while (cm
be80: 64 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72  d == null && str
be90: 53 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  Sql.Length > 0).
bea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
beb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bec0: 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28    cmd = Prepare(
bed0: 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65  cnn, strSql, pre
bee0: 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53  vious, timeoutMS
bef0: 2c 20 72 65 66 20 73 74 72 52 65 6d 61 69 6e 29  , ref strRemain)
bf00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
bf10: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52     strSql = strR
bf20: 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20  emain;..        
bf30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
bf40: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6d 64           if (cmd
bf50: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
bf60: 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 53             cmd.S
bf70: 65 74 54 79 70 65 73 28 74 79 70 65 64 65 66 73  etTypes(typedefs
bf80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
bf90: 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d      return cmd;.
bfa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
bfb0: 23 69 66 20 28 4e 45 54 5f 33 35 20 7c 7c 20 4e  #if (NET_35 || N
bfc0: 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20  ET_40 || NET_45 
bfd0: 7c 7c 20 4e 45 54 5f 34 35 31 20 7c 7c 20 4e 45  || NET_451 || NE
bfe0: 54 5f 34 35 32 20 7c 7c 20 4e 45 54 5f 34 36 20  T_452 || NET_46 
bff0: 7c 7c 20 4e 45 54 5f 34 36 31 20 7c 7c 20 4e 45  || NET_461 || NE
c000: 54 5f 34 36 32 20 7c 7c 20 4e 45 54 5f 34 37 20  T_462 || NET_47 
c010: 7c 7c 20 4e 45 54 5f 34 37 31 20 7c 7c 20 4e 45  || NET_471 || NE
c020: 54 5f 34 37 32 29 20 26 26 20 21 50 4c 41 54 46  T_472) && !PLATF
c030: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
c040: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
c050: 20 20 65 6c 73 65 20 69 66 20 28 5f 62 75 69 6c    else if (_buil
c060: 64 69 6e 67 53 63 68 65 6d 61 20 3d 3d 20 66 61  dingSchema == fa
c070: 6c 73 65 20 26 26 20 53 74 72 69 6e 67 2e 43 6f  lse && String.Co
c080: 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45 72 72  mpare(GetLastErr
c090: 6f 72 28 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63  or(), 0, "no suc
c0a0: 68 20 74 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43  h table: TEMP.SC
c0b0: 48 45 4d 41 22 2c 20 30 2c 20 32 36 2c 20 53 74  HEMA", 0, 26, St
c0c0: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
c0d0: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
c0e0: 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) == 0)..       
c0f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c100: 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20        strRemain 
c110: 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  = String.Empty;.
c120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
c130: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
c140: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
c150: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
c160: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c170: 20 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c              ISQL
c180: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
c190: 6f 6e 73 20 65 78 74 20 3d 20 28 28 49 53 65 72  ons ext = ((ISer
c1a0: 76 69 63 65 50 72 6f 76 69 64 65 72 29 53 51 4c  viceProvider)SQL
c1b0: 69 74 65 46 61 63 74 6f 72 79 2e 49 6e 73 74 61  iteFactory.Insta
c1c0: 6e 63 65 29 2e 47 65 74 53 65 72 76 69 63 65 28  nce).GetService(
c1d0: 74 79 70 65 6f 66 28 49 53 51 4c 69 74 65 53 63  typeof(ISQLiteSc
c1e0: 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 29 29  hemaExtensions))
c1f0: 20 61 73 20 49 53 51 4c 69 74 65 53 63 68 65 6d   as ISQLiteSchem
c200: 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a  aExtensions;....
c210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c220: 69 66 20 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29  if (ext != null)
c230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c240: 20 20 20 20 65 78 74 2e 42 75 69 6c 64 54 65 6d      ext.BuildTem
c250: 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d  pSchema(cnn);...
c260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c270: 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e   while (cmd == n
c280: 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65  ull && strSql.Le
c290: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
c2a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2c0: 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63 6e  cmd = Prepare(cn
c2d0: 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69  n, strSql, previ
c2e0: 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20  ous, timeoutMS, 
c2f0: 72 65 66 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d  ref strRemain);.
c300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c310: 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52     strSql = strR
c320: 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20  emain;..        
c330: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c340: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c350: 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20  urn cmd;..      
c360: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c370: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
c380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c390: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c3a0: 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65     _buildingSche
c3b0: 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ma = false;..   
c3c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
c3d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
c3e0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  dif..          }
c3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
c400: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
c410: 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64  ErrorCode.Locked
c420: 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45   || n == SQLiteE
c430: 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20 2f  rrorCode.Busy) /
c440: 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61  / Locked -- dela
c450: 79 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74  y a small amount
c460: 20 62 65 66 6f 72 65 20 72 65 74 72 79 69 6e 67   before retrying
c470: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
c480: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65             // Ke
c490: 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20  ep trying..     
c4a0: 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d         if (rnd =
c4b0: 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74  = null) // First
c4c0: 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f   time we've enco
c4d0: 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b  untered the lock
c4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c4f0: 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d  rnd = new Random
c500: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
c510: 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65     // If we've e
c520: 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d  xceeded the comm
c530: 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67  and's timeout, g
c540: 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77  ive up and throw
c550: 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
c560: 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74         if ((uint
c570: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
c580: 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69  kCount - startti
c590: 63 6b 20 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d  ck > timeoutMS).
c5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
c5c0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
c5d0: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
c5e0: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
c5f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c600: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
c610: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c620: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74             // Ot
c630: 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f  herwise sleep fo
c640: 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e  r a random amoun
c650: 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20  t of time up to 
c660: 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20  150ms..         
c670: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65       System.Thre
c680: 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65  ading.Thread.Sle
c690: 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31  ep(rnd.Next(1, 1
c6a0: 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  50));..         
c6b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
c6c0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
c6d0: 20 20 20 20 20 20 20 20 69 66 20 28 53 68 6f 75          if (Shou
c6e0: 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c  ldThrowForCancel
c6f0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ())..        {..
c700: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c710: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
c720: 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20  rCode.Ok) ||..  
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e                (n
c740: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
c750: 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20  ode.Row) ||..   
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20               (n 
c770: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
c780: 64 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20  de.Done))..     
c790: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c7a0: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 53 51            n = SQ
c7b0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e  LiteErrorCode.In
c7c0: 74 65 72 72 75 70 74 3b 0d 0a 20 20 20 20 20 20  terrupt;..      
c7d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c7e0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
c7f0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
c800: 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  (n, null);..    
c810: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c820: 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
c830: 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72  ErrorCode.Interr
c840: 75 70 74 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c  upt) return null
c850: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
c860: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
c870: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
c880: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
c890: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
c8a0: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r());....       
c8b0: 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 55 54 46   strRemain = UTF
c8c0: 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20 6c  8ToString(ptr, l
c8d0: 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  en);....        
c8e0: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61 6e  if (statementHan
c8f0: 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64  dle != null) cmd
c900: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61   = new SQLiteSta
c910: 74 65 6d 65 6e 74 28 74 68 69 73 2c 20 66 6c 61  tement(this, fla
c920: 67 73 2c 20 73 74 61 74 65 6d 65 6e 74 48 61 6e  gs, statementHan
c930: 64 6c 65 2c 20 73 74 72 53 71 6c 2e 53 75 62 73  dle, strSql.Subs
c940: 74 72 69 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e  tring(0, strSql.
c950: 4c 65 6e 67 74 68 20 2d 20 73 74 72 52 65 6d 61  Length - strRema
c960: 69 6e 2e 4c 65 6e 67 74 68 29 2c 20 70 72 65 76  in.Length), prev
c970: 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ious);....      
c980: 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20    return cmd;.. 
c990: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 66 69       }..      fi
c9a0: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a  nally..      {..
c9b0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e 46          handle.F
c9c0: 72 65 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ree();..      }.
c9d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
c9e0: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
c9f0: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
ca00: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
ca10: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
ca20: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
ca30: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
ca40: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
ca50: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
ca60: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
ca70: 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
ca80: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
ca90: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
caa0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
cab0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
cac0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
cad0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
cae0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c  mter #{1} as NUL
caf0: 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  L...",..        
cb00: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
cb10: 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20  , index));..    
cb20: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
cb30: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
cb40: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
cb50: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
cb60: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
cb70: 56 61 6c 75 65 54 79 70 65 20 76 61 6c 75 65 29  ValueType value)
cb80: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
cb90: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
cba0: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
cbb0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
cbc0: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48  Log.LogMessage(H
cbd0: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
cbe0: 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
cbf0: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
cc00: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
cc10: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
cc20: 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d   "Binding statem
cc30: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
cc40: 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32   #{1} as type {2
cc50: 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b  } with value {{{
cc60: 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  3}}}...",..     
cc70: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74         handleInt
cc80: 50 74 72 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  Ptr, index, valu
cc90: 65 2e 47 65 74 54 79 70 65 28 29 2c 20 76 61 6c  e.GetType(), val
cca0: 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
ccb0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
ccc0: 69 63 20 73 74 72 69 6e 67 20 46 6f 72 6d 61 74  ic string Format
ccd0: 44 61 74 65 54 69 6d 65 28 44 61 74 65 54 69 6d  DateTime(DateTim
cce0: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
ccf0: 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42  .        StringB
cd00: 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20  uilder result = 
cd10: 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65  new StringBuilde
cd20: 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
cd30: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 76 61  result.Append(va
cd40: 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 22 79 79  lue.ToString("yy
cd50: 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73  yy-MM-ddTHH:mm:s
cd60: 73 2e 46 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a  s.FFFFFFFK"));..
cd70: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
cd80: 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20  ppend(' ');..   
cd90: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
cda0: 6e 64 28 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d  nd(value.Kind);.
cdb0: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
cdc0: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20  Append(' ');..  
cdd0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
cde0: 65 6e 64 28 76 61 6c 75 65 2e 54 69 63 6b 73 29  end(value.Ticks)
cdf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
ce00: 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53 74 72  urn result.ToStr
ce10: 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ing();..    }...
ce20: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
ce30: 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69  tatic void LogBi
ce40: 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nd(SQLiteStateme
ce50: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c  ntHandle handle,
ce60: 20 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65   int index, Date
ce70: 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Time value)..   
ce80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
ce90: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
cea0: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
ceb0: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
cec0: 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72  ogMessage(Helper
ced0: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
cee0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
cef0: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
cf00: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 69 6e              "Bin
cf20: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 7b  ding statement {
cf30: 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d  0} paramter #{1}
cf40: 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77 69 74   as type {2} wit
cf50: 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e  h value {{{3}}}.
cf60: 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
cf70: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
cf80: 69 6e 64 65 78 2c 20 74 79 70 65 6f 66 28 44 61  index, typeof(Da
cf90: 74 65 54 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44  teTime), FormatD
cfa0: 61 74 65 54 69 6d 65 28 76 61 6c 75 65 29 29 29  ateTime(value)))
cfb0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
cfc0: 70 72 6f 74 65 63 74 65 64 20 73 74 61 74 69 63  protected static
cfd0: 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51   void LogBind(SQ
cfe0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
cff0: 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20  dle handle, int 
d000: 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61  index, string va
d010: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
d020: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
d030: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
d040: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
d050: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
d060: 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
d070: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
d080: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
d090: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
d0a0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
d0b0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
d0c0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
d0d0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
d0e0: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
d0f0: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
d100: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
d110: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
d120: 74 79 70 65 6f 66 28 53 74 72 69 6e 67 29 2c 20  typeof(String), 
d130: 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20  (value != null) 
d140: 3f 20 76 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c  ? value : "<null
d150: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
d160: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
d170: 69 63 20 73 74 72 69 6e 67 20 54 6f 48 65 78 61  ic string ToHexa
d180: 64 65 63 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a  decimalString(..
d190: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61          byte[] a
d1a0: 72 72 61 79 0d 0a 20 20 20 20 20 20 20 20 29 0d  rray..        ).
d1b0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
d1c0: 69 66 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c  if (array == nul
d1d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
d1e0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
d1f0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
d200: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
d210: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
d220: 28 61 72 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20  (array.Length * 
d230: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  2);....        i
d240: 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 72 61  nt length = arra
d250: 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  y.Length;....   
d260: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
d270: 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
d280: 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b   length; index++
d290: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
d2a0: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 61 72 72  esult.Append(arr
d2b0: 61 79 5b 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69  ay[index].ToStri
d2c0: 6e 67 28 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20  ng("x2"));....  
d2d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
d2e0: 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  ult.ToString();.
d2f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
d300: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76  otected static v
d310: 6f 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69  oid LogBind(SQLi
d320: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
d330: 65 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e  e handle, int in
d340: 64 65 78 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  dex, byte[] valu
d350: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
d360: 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
d370: 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b  IntPtr = handle;
d380: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
d390: 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
d3a0: 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
d3b0: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
d3c0: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
d3d0: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
d3e0: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
d3f0: 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74     "Binding stat
d400: 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74  ement {0} paramt
d410: 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20  er #{1} as type 
d420: 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b  {2} with value {
d430: 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20  {{3}}}...",..   
d440: 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49           handleI
d450: 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79  ntPtr, index, ty
d460: 70 65 6f 66 28 42 79 74 65 5b 5d 29 2c 20 28 76  peof(Byte[]), (v
d470: 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  alue != null) ? 
d480: 54 6f 48 65 78 61 64 65 63 69 6d 61 6c 53 74 72  ToHexadecimalStr
d490: 69 6e 67 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e  ing(value) : "<n
d4a0: 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d  ull>"));..    }.
d4b0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
d4c0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
d4d0: 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69 74 65  nd_Double(SQLite
d4e0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
d4f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d500: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
d510: 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76   index, double v
d520: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
d530: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
d540: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
d550: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
d560: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20  e_stmt;....     
d570: 20 20 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50     if (ForceLogP
d580: 72 65 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70  repare() || Help
d590: 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e  erMethods.LogBin
d5a0: 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20  d(flags))..     
d5b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d5c0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
d5d0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
d5e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23  ..        }....#
d5f0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
d600: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
d610: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
d620: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
d630: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d640: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
d650: 6c 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  le(handle, index
d660: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
d670: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
d680: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
d690: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
d6a0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
d6b0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
d6c0: 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
d6d0: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53  NDARD..        S
d6e0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
d6f0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
d700: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
d710: 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ind_double_inter
d720: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
d730: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20  , ref value);.. 
d740: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
d750: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
d760: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
d770: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
d780: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
d790: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
d7a0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
d7b0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
d7c0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
d7d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d7e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
d7f0: 6f 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28 53  oid Bind_Int32(S
d800: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
d810: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
d820: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
d830: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
d840: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
d850: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
d860: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
d870: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
d880: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
d890: 20 20 20 20 20 69 66 20 28 46 6f 72 63 65 4c 6f       if (ForceLo
d8a0: 67 50 72 65 70 61 72 65 28 29 20 7c 7c 20 48 65  gPrepare() || He
d8b0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42  lperMethods.LogB
d8c0: 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20  ind(flags))..   
d8d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d8e0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
d8f0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
d900: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
d910: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
d920: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
d930: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d940: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
d950: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
d960: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
d970: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
d980: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
d990: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
d9a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
d9b0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
d9c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
d9d0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
d9e0: 64 20 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51  d Bind_UInt32(SQ
d9f0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
da00: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
da10: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
da20: 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e 74   int index, uint
da30: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
da40: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
da50: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
da60: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
da70: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
da80: 20 20 20 20 20 69 66 20 28 46 6f 72 63 65 4c 6f       if (ForceLo
da90: 67 50 72 65 70 61 72 65 28 29 20 7c 7c 20 48 65  gPrepare() || He
daa0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42  lperMethods.LogB
dab0: 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20 20 20  ind(flags))..   
dac0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
dad0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
dae0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
daf0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
db00: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
db10: 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20  rrorCode n;.... 
db20: 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65         if (Helpe
db30: 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61 67  rMethods.HasFlag
db40: 73 28 66 6c 61 67 73 2c 20 53 51 4c 69 74 65 43  s(flags, SQLiteC
db50: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42  onnectionFlags.B
db60: 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36 34  indUInt32AsInt64
db70: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
db80: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
db90: 76 61 6c 75 65 32 20 3d 20 76 61 6c 75 65 3b 0d  value2 = value;.
dba0: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
dbb0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
dbc0: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  K..            n
dbd0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
dbe0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
dbf0: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
dc00: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 32 29  , index, value2)
dc10: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
dc20: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
dc30: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
dc40: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
dc50: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
dc60: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
dc70: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
dc80: 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ue2);..#else..  
dc90: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
dca0: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
dcb0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
dcc0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
dcd0: 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
dce0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
dcf0: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
dd00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
dd10: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
dd20: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
dd30: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
dd40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 66 20    }..        if 
dd50: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
dd60: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
dd70: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
dd80: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
dd90: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
dda0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ddb0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
ddc0: 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  d_Int64(SQLiteSt
ddd0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
dde0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
ddf0: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
de00: 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75 65  ndex, long value
de10: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
de20: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
de30: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
de40: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
de50: 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  mt;....        i
de60: 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70 61  f (ForceLogPrepa
de70: 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d 65  re() || HelperMe
de80: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
de90: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ags))..        {
dea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
deb0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
dec0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
ded0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
dee0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
def0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
df00: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
df10: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
df20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
df30: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61  e3_bind_int64(ha
df40: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
df50: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ue);..        if
df60: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
df70: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
df80: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
df90: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
dfa0: 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69 66 20  rror());..#elif 
dfb0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
dfc0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
dfd0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
dfe0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
dff0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
e000: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e  nt64_interop(han
e010: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  dle, index, ref 
e020: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
e030: 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
e040: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68  ErrorCode.Ok) th
e050: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
e060: 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61  ception(n, GetLa
e070: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c  stError());..#el
e080: 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  se..        thro
e090: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
e0a0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
e0b0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
e0c0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
e0d0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
e0e0: 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65  nd_UInt64(SQLite
e0f0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
e100: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e110: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
e120: 20 69 6e 64 65 78 2c 20 75 6c 6f 6e 67 20 76 61   index, ulong va
e130: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
e140: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
e150: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
e160: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
e170: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
e180: 20 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72    if (ForceLogPr
e190: 65 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65  epare() || Helpe
e1a0: 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64  rMethods.LogBind
e1b0: 28 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20  (flags))..      
e1c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e1d0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
e1e0: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
e1f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69  .        }....#i
e200: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
e210: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
e220: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
e230: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
e240: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e250: 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36  lite3_bind_uint6
e260: 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  4(handle, index,
e270: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
e280: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
e290: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
e2a0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
e2b0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
e2c0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65  astError());..#e
e2d0: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
e2e0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51  DARD..        SQ
e2f0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
e300: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
e310: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
e320: 6e 64 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f  nd_uint64_intero
e330: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
e340: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
e350: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
e360: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
e370: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
e380: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
e390: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
e3a0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
e3b0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
e3c0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
e3d0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
e3e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
e3f0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
e400: 69 64 20 42 69 6e 64 5f 42 6f 6f 6c 65 61 6e 28  id Bind_Boolean(
e410: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
e420: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
e430: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
e440: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 6f  s, int index, bo
e450: 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  ol value)..    {
e460: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
e470: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
e480: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
e490: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
e4a0: 20 20 20 20 20 20 20 69 66 20 28 46 6f 72 63 65         if (Force
e4b0: 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c 7c 20  LogPrepare() || 
e4c0: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
e4d0: 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20  gBind(flags)).. 
e4e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e4f0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
e500: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
e510: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
e520: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76  ...        int v
e530: 61 6c 75 65 32 20 3d 20 76 61 6c 75 65 20 3f 20  alue2 = value ? 
e540: 31 20 3a 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  1 : 0;....      
e550: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
e560: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
e570: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
e580: 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e 64 6c  3_bind_int(handl
e590: 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 32  e, index, value2
e5a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
e5b0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
e5c0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
e5d0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
e5e0: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
e5f0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
e600: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
e610: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
e620: 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74 61 74  _Text(SQLiteStat
e630: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
e640: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e650: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
e660: 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ex, string value
e670: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
e680: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
e690: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
e6a0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
e6b0: 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  mt;....        i
e6c0: 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70 61  f (ForceLogPrepa
e6d0: 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d 65  re() || HelperMe
e6e0: 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c  thods.LogBind(fl
e6f0: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ags))..        {
e700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
e710: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
e720: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
e730: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e740: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
e750: 55 54 46 38 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a  UTF8(value);....
e760: 20 20 20 20 20 20 20 20 69 66 20 28 46 6f 72 63          if (Forc
e770: 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c 7c  eLogPrepare() ||
e780: 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c   HelperMethods.L
e790: 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a  ogBind(flags))..
e7a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e7b0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
e7c0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 29  andle, index, b)
e7d0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
e7e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
e7f0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
e800: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e810: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
e820: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
e830: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
e840: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
e850: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
e860: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
e870: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
e880: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
e890: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
e8a0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
e8b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
e8c0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44  ride void Bind_D
e8d0: 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74  ateTime(SQLiteSt
e8e0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
e8f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
e900: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
e910: 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64  ndex, DateTime d
e920: 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  t)..    {..     
e930: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
e940: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
e950: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
e960: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
e970: 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70  if (ForceLogPrep
e980: 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d  are() || HelperM
e990: 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66  ethods.LogBind(f
e9a0: 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  lags))..        
e9b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
e9c0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
e9d0: 6e 64 65 78 2c 20 64 74 29 3b 0d 0a 20 20 20 20  ndex, dt);..    
e9e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
e9f0: 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f   if (HelperMetho
ea00: 64 73 2e 48 61 73 46 6c 61 67 73 28 66 6c 61 67  ds.HasFlags(flag
ea10: 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  s, SQLiteConnect
ea20: 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64 44 61 74  ionFlags.BindDat
ea30: 65 54 69 6d 65 57 69 74 68 4b 69 6e 64 29 29 0d  eTimeWithKind)).
ea40: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
ea50: 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 64 61          if ((_da
ea60: 74 65 74 69 6d 65 4b 69 6e 64 20 21 3d 20 44 61  tetimeKind != Da
ea70: 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65  teTimeKind.Unspe
ea80: 63 69 66 69 65 64 29 20 26 26 0d 0a 20 20 20 20  cified) &&..    
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 28 64 74 2e              (dt.
eaa0: 4b 69 6e 64 20 21 3d 20 44 61 74 65 54 69 6d 65  Kind != DateTime
eab0: 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64  Kind.Unspecified
eac0: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
ead0: 20 20 20 20 20 20 28 64 74 2e 4b 69 6e 64 20 21        (dt.Kind !
eae0: 3d 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29  = _datetimeKind)
eaf0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
eb00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eb10: 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 4b    if (_datetimeK
eb20: 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b  ind == DateTimeK
eb30: 69 6e 64 2e 55 74 63 29 0d 0a 20 20 20 20 20 20  ind.Utc)..      
eb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 74                dt
eb50: 20 3d 20 64 74 2e 54 6f 55 6e 69 76 65 72 73 61   = dt.ToUniversa
eb60: 6c 54 69 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20  lTime();..      
eb70: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
eb80: 66 20 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  f (_datetimeKind
eb90: 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64   == DateTimeKind
eba0: 2e 4c 6f 63 61 6c 29 0d 0a 20 20 20 20 20 20 20  .Local)..       
ebb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 74 20               dt 
ebc0: 3d 20 64 74 2e 54 6f 4c 6f 63 61 6c 54 69 6d 65  = dt.ToLocalTime
ebd0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
ebe0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
ebf0: 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20  .        switch 
ec00: 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74  (_datetimeFormat
ec10: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
ec20: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
ec30: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
ec40: 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20  .Ticks:..       
ec50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec70: 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 64 74 2e  long value = dt.
ec80: 54 69 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20  Ticks;....      
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
eca0: 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72   (ForceLogPrepar
ecb0: 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d 65 74  e() || HelperMet
ecc0: 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61  hods.LogBind(fla
ecd0: 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gs))..          
ece0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ecf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed00: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
ed10: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
ed20: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
ed30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69           }....#i
ed40: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
ed50: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
ed60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed70: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
ed80: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
ed90: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
eda0: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e  3_bind_int64(han
edb0: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
edc0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
edd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
ede0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
edf0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
ee00: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
ee10: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
ee20: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
ee30: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
ee40: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
ee50: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
ee70: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
ee80: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ee90: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
eea0: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
eeb0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
eec0: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ef value);..    
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eee0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
eef0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
ef00: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
ef10: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
ef20: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
ef30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef40: 62 72 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20  break;..#else.. 
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef60: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
ef70: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
ef80: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
ef90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
efa0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
efb0: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
efc0: 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79  ormats.JulianDay
efd0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
efe0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
eff0: 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
f000: 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c 69 61   value = ToJulia
f010: 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 20 20 20  nDay(dt);....   
f020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f030: 20 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65   if (ForceLogPre
f040: 70 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72  pare() || Helper
f050: 4d 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28  Methods.LogBind(
f060: 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  flags))..       
f070: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
f080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f090: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
f0a0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
f0b0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
f0c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f0d0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
f0e0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
f0f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f100: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
f110: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
f120: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
f130: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
f140: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
f150: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
f160: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f170: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
f180: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
f190: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
f1a0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
f1b0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
f1d0: 61 6b 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ak;..#elif !SQLI
f1e0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f200: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f210: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
f220: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f230: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74  _bind_double_int
f240: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
f250: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
f260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f270: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
f280: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
f290: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
f2a0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
f2b0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
f2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f2d0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c       break;..#el
f2e0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
f2f0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
f300: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
f310: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
f320: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
f330: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f340: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
f350: 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78  DateFormats.Unix
f360: 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20 20 20  Epoch:..        
f370: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
f390: 6f 6e 67 20 76 61 6c 75 65 20 3d 20 43 6f 6e 76  ong value = Conv
f3a0: 65 72 74 2e 54 6f 49 6e 74 36 34 28 64 74 2e 53  ert.ToInt64(dt.S
f3b0: 75 62 74 72 61 63 74 28 55 6e 69 78 45 70 6f 63  ubtract(UnixEpoc
f3c0: 68 29 2e 54 6f 74 61 6c 53 65 63 6f 6e 64 73 29  h).TotalSeconds)
f3d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f3e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 46 6f 72           if (For
f3f0: 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c  ceLogPrepare() |
f400: 7c 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  | HelperMethods.
f410: 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d  LogBind(flags)).
f420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f430: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f450: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
f460: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f480: 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c      }....#if !PL
f490: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
f4a0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
f4c0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
f4d0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
f4e0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
f4f0: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
f500: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
f510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f520: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
f530: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
f540: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
f550: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
f560: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
f570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f580: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 69      break;..#eli
f590: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
f5a0: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
f5b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
f5c0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
f5d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f5e0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
f5f0: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
f600: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
f610: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
f620: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
f630: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
f640: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
f650: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
f660: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
f670: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
f680: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
f690: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f6b0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
f6c0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
f6d0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
f6e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
f6f0: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
f700: 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt:..           
f710: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f720: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
f730: 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74  [] b = ToUTF8(dt
f740: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f750: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 46 6f            if (Fo
f760: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20  rceLogPrepare() 
f770: 7c 7c 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  || HelperMethods
f780: 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29  .LogBind(flags))
f790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f7a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
f7d0: 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20   index, b);..   
f7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
f800: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
f810: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
f820: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f830: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  s.sqlite3_bind_t
f840: 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ext(handle, inde
f850: 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  x, b, b.Length -
f860: 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29   1, (IntPtr)(-1)
f870: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f880: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
f890: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
f8a0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
f8b0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
f8c0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
f8d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
f8e0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f900: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
f910: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
f920: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
f930: 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69  d Bind_Blob(SQLi
f940: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
f950: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
f960: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
f970: 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d  nt index, byte[]
f980: 20 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20   blobData)..    
f990: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
f9a0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
f9b0: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
f9c0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
f9d0: 20 20 20 20 20 20 20 20 69 66 20 28 46 6f 72 63          if (Forc
f9e0: 65 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c 7c  eLogPrepare() ||
f9f0: 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c   HelperMethods.L
fa00: 6f 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a  ogBind(flags))..
fa10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
fa20: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
fa30: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c  andle, index, bl
fa40: 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20  obData);..      
fa50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
fa60: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
fa70: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
fa80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
fa90: 69 6e 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c  ind_blob(handle,
faa0: 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61   index, blobData
fab0: 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74  , blobData.Lengt
fac0: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
fad0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
fae0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
faf0: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
fb00: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
fb10: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
fb20: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
fb30: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
fb40: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
fb50: 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65  Null(SQLiteState
fb60: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
fb70: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
fb80: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
fb90: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
fba0: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
fbb0: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
fbc0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
fbd0: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
fbe0: 69 66 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70  if (ForceLogPrep
fbf0: 61 72 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d  are() || HelperM
fc00: 65 74 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66  ethods.LogBind(f
fc10: 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  lags))..        
fc20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
fc30: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
fc40: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
fc50: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
fc60: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
fc70: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
fc80: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
fc90: 64 5f 6e 75 6c 6c 28 68 61 6e 64 6c 65 2c 20 69  d_null(handle, i
fca0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
fcb0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
fcc0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
fcd0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
fce0: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
fcf0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
fd00: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
fd10: 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 42  l override int B
fd20: 69 6e 64 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53  ind_ParamCount(S
fd30: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
fd40: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
fd50: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
fd60: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
fd70: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
fd80: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
fd90: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
fda0: 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  mt;..        int
fdb0: 20 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e   value = UnsafeN
fdc0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
fdd0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
fde0: 74 65 72 5f 63 6f 75 6e 74 28 68 61 6e 64 6c 65  ter_count(handle
fdf0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
fe00: 20 28 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72   (ForceLogPrepar
fe10: 65 28 29 20 7c 7c 20 48 65 6c 70 65 72 4d 65 74  e() || HelperMet
fe20: 68 6f 64 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61  hods.LogBind(fla
fe30: 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  gs))..        {.
fe40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
fe50: 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72  Ptr handleIntPtr
fe60: 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20   = handle;....  
fe70: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
fe80: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48  Log.LogMessage(H
fe90: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
fea0: 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
feb0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
fec0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
fed0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
fee0: 20 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d           "Statem
fef0: 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72  ent {0} paramter
ff00: 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d 2e 22 2c   count is {1}.",
ff10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ff20: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
ff30: 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 20 20  value));..      
ff40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
ff50: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
ff60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
ff70: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
ff80: 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e 61  ing Bind_ParamNa
ff90: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
ffa0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
ffb0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
ffc0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29  lags, int index)
ffd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
ffe0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
fff0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
10000 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
10010 74 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  t;..        stri
10020 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20  ng name;....#if 
10030 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
10040 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65  ..        int le
10050 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  n = 0;..        
10060 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72  name = UTF8ToStr
10070 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
10080 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10090 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
100a0 61 6d 65 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64  ame_interop(hand
100b0 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c  le, index, ref l
100c0 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
100d0 65 0d 0a 20 20 20 20 20 20 20 20 6e 61 6d 65 20  e..        name 
100e0 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  = UTF8ToString(U
100f0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10100 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
10110 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 68  parameter_name(h
10120 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29 2c 20 2d  andle, index), -
10130 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  1);..#endif.... 
10140 20 20 20 20 20 20 20 69 66 20 28 46 6f 72 63 65         if (Force
10150 4c 6f 67 50 72 65 70 61 72 65 28 29 20 7c 7c 20  LogPrepare() || 
10160 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
10170 67 42 69 6e 64 28 66 6c 61 67 73 29 29 0d 0a 20  gBind(flags)).. 
10180 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10190 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e        IntPtr han
101a0 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64  dleIntPtr = hand
101b0 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
101c0 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
101d0 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65  Message(HelperMe
101e0 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
101f0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
10200 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
10210 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
10220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10230 20 20 22 53 74 61 74 65 6d 65 6e 74 20 7b 30 7d    "Statement {0}
10240 20 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 6e   paramter #{1} n
10250 61 6d 65 20 69 73 20 7b 7b 7b 32 7d 7d 7d 2e 22  ame is {{{2}}}."
10260 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10270 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c     handleIntPtr,
10280 20 69 6e 64 65 78 2c 20 6e 61 6d 65 29 29 3b 0d   index, name));.
10290 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
102a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61 6d        return nam
102b0 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
102c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
102d0 64 65 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61  de int Bind_Para
102e0 6d 49 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61  mIndex(SQLiteSta
102f0 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
10300 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
10310 67 73 20 66 6c 61 67 73 2c 20 73 74 72 69 6e 67  gs flags, string
10320 20 70 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20 20   paramName)..   
10330 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
10340 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
10350 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
10360 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20  _sqlite_stmt;.. 
10370 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
10380 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
10390 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
103a0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
103b0 64 65 78 28 68 61 6e 64 6c 65 2c 20 54 6f 55 54  dex(handle, ToUT
103c0 46 38 28 70 61 72 61 6d 4e 61 6d 65 29 29 3b 0d  F8(paramName));.
103d0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 46  ...        if (F
103e0 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29  orceLogPrepare()
103f0 20 7c 7c 20 48 65 6c 70 65 72 4d 65 74 68 6f 64   || HelperMethod
10400 73 2e 4c 6f 67 42 69 6e 64 28 66 6c 61 67 73 29  s.LogBind(flags)
10410 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
10420 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
10430 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20   handleIntPtr = 
10440 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
10450 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
10460 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70  .LogMessage(Help
10470 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
10480 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
10490 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
104a0 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
104b0 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
104c0 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e 74        "Statement
104d0 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 69 6e   {0} paramter in
104e0 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b 31  dex of name {{{1
104f0 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d 0a  }}} is #{2}.",..
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70 61  handleIntPtr, pa
10520 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29 29  ramName, index))
10530 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
10540 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69          return i
10550 6e 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ndex;..    }....
10560 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10570 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d 6e  rride int Column
10580 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74  Count(SQLiteStat
10590 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20  ement stmt)..   
105a0 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
105b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
105c0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
105d0 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e 5f  umn_count(stmt._
105e0 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 20  sqlite_stmt);.. 
105f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10600 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
10610 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28  ring ColumnName(
10620 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
10630 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
10640 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
10650 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
10660 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
10670 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  ;..      IntPtr 
10680 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  p = UnsafeNative
10690 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
106a0 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65  column_name_inte
106b0 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
106c0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65  _stmt, index, re
106d0 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a  f len);..#else..
106e0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
106f0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
10700 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
10710 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73  umn_name(stmt._s
10720 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
10730 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  x);..#endif..   
10740 20 20 20 69 66 20 28 70 20 3d 3d 20 49 6e 74 50     if (p == IntP
10750 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
10760 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
10770 74 65 45 78 63 65 70 74 69 6f 6e 28 53 51 4c 69  teException(SQLi
10780 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 4d 65  teErrorCode.NoMe
10790 6d 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  m, GetLastError(
107a0 29 29 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ));..#if !SQLITE
107b0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
107c0 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
107d0 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 23  ring(p, len);..#
107e0 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
107f0 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
10800 70 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  p, -1);..#endif.
10810 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10820 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10830 54 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f 6c  TypeAffinity Col
10840 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c 69  umnAffinity(SQLi
10850 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
10860 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
10870 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
10880 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
10890 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
108a0 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e 5f  lumn_type(stmt._
108b0 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
108c0 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ex);..    }.... 
108d0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
108e0 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
108f0 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74 61  mnType(SQLiteSta
10900 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
10910 20 69 6e 64 65 78 2c 20 72 65 66 20 54 79 70 65   index, ref Type
10920 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e 69  Affinity nAffini
10930 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ty)..    {..    
10940 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23 69      int len;..#i
10950 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
10960 52 44 0d 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  RD..        len 
10970 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 49 6e  = 0;..        In
10980 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
10990 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
109a0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
109b0 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  type_interop(stm
109c0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
109d0 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 3b  index, ref len);
109e0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
109f0 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20   len = -1;..    
10a00 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55      IntPtr p = U
10a10 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10a20 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
10a30 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2e  n_decltype(stmt.
10a40 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
10a50 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  dex);..#endif.. 
10a60 20 20 20 20 20 20 20 6e 41 66 66 69 6e 69 74 79         nAffinity
10a70 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74   = ColumnAffinit
10a80 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  y(stmt, index);.
10a90 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
10aa0 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  p != IntPtr.Zero
10ab0 29 20 26 26 20 28 28 6c 65 6e 20 3e 20 30 29 20  ) && ((len > 0) 
10ac0 7c 7c 20 28 6c 65 6e 20 3d 3d 20 2d 31 29 29 29  || (len == -1)))
10ad0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
10ae0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10af0 64 65 63 6c 54 79 70 65 20 3d 20 55 54 46 38 54  declType = UTF8T
10b00 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b  oString(p, len);
10b10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10b20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
10b30 6c 6c 4f 72 45 6d 70 74 79 28 64 65 63 6c 54 79  llOrEmpty(declTy
10b40 70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  pe))..          
10b50 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 65 63        return dec
10b60 6c 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20  lType;..        
10b70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72  }....        str
10b80 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74 2e  ing[] ar = stmt.
10b90 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e 73 3b  TypeDefinitions;
10ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
10bb0 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ar != null)..   
10bc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10bd0 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c 20      if (index < 
10be0 61 72 2e 4c 65 6e 67 74 68 20 26 26 20 61 72 5b  ar.Length && ar[
10bf0 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29 0d  index] != null).
10c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c10 20 72 65 74 75 72 6e 20 61 72 5b 69 6e 64 65 78   return ar[index
10c20 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ];..        }...
10c30 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
10c40 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20  String.Empty;.. 
10c50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
10c60 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
10c70 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53 51  t ColumnIndex(SQ
10c80 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
10c90 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d  mt, string colum
10ca0 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  nName)..    {.. 
10cb0 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f 6c       int x = Col
10cc0 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b 0d  umnCount(stmt);.
10cd0 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e  ...      for (in
10ce0 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20  t n = 0; n < x; 
10cf0 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  n++)..      {.. 
10d00 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
10d10 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d 6e  g.Compare(column
10d20 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d 65  Name, ColumnName
10d30 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69 6e  (stmt, n), Strin
10d40 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
10d50 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
10d60 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
10d70 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20  return n;..     
10d80 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
10d90 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   -1;..    }.... 
10da0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
10db0 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c 75  ride string Colu
10dc0 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53  mnOriginalName(S
10dd0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
10de0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
10df0 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
10e00 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
10e10 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
10e20 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
10e30 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
10e40 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10e50 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
10e60 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72  rigin_name_inter
10e70 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
10e80 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
10e90 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
10ea0 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
10eb0 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
10ec0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10ed0 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
10ee0 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74  n_origin_name(st
10ef0 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
10f00 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
10f10 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
10f20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10f30 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
10f40 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28  umnDatabaseName(
10f50 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
10f60 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
10f70 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
10f80 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
10f90 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
10fa0 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
10fb0 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
10fc0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10fd0 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
10fe0 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69 6e  database_name_in
10ff0 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
11000 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
11010 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  ref len), len);.
11020 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
11030 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
11040 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
11050 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
11060 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
11070 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  me(stmt._sqlite_
11080 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31  stmt, index), -1
11090 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
110a0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
110b0 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
110c0 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d  g ColumnTableNam
110d0 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
110e0 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
110f0 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
11100 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
11110 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
11120 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72   0;..      retur
11130 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
11140 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11150 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
11160 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74  n_table_name_int
11170 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
11180 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
11190 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
111a0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
111b0 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
111c0 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
111d0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
111e0 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73  umn_table_name(s
111f0 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
11200 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
11210 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
11220 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11230 65 72 72 69 64 65 20 62 6f 6f 6c 20 44 6f 65 73  erride bool Does
11240 54 61 62 6c 65 45 78 69 73 74 28 0d 0a 20 20 20  TableExist(..   
11250 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74 61       string data
11260 42 61 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  Base,..        s
11270 74 72 69 6e 67 20 74 61 62 6c 65 0d 0a 20 20 20  tring table..   
11280 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
11290 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61         string da
112a0 74 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 20 2f  taType = null; /
112b0 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20  * NOT USED */.. 
112c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
112d0 6c 6c 61 74 65 53 65 71 75 65 6e 63 65 20 3d 20  llateSequence = 
112e0 6e 75 6c 6c 3b 20 2f 2a 20 4e 4f 54 20 55 53 45  null; /* NOT USE
112f0 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f  D */..        bo
11300 6f 6c 20 6e 6f 74 4e 75 6c 6c 20 3d 20 66 61 6c  ol notNull = fal
11310 73 65 3b 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20  se; /* NOT USED 
11320 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
11330 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 66 61   primaryKey = fa
11340 6c 73 65 3b 20 2f 2a 20 4e 4f 54 20 55 53 45 44  lse; /* NOT USED
11350 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   */..        boo
11360 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20  l autoIncrement 
11370 3d 20 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 20  = false; /* NOT 
11380 55 53 45 44 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  USED */....     
11390 20 20 20 72 65 74 75 72 6e 20 43 6f 6c 75 6d 6e     return Column
113a0 4d 65 74 61 44 61 74 61 28 0d 0a 20 20 20 20 20  MetaData(..     
113b0 20 20 20 20 20 20 20 64 61 74 61 42 61 73 65 2c         dataBase,
113c0 20 74 61 62 6c 65 2c 20 6e 75 6c 6c 2c 20 66 61   table, null, fa
113d0 6c 73 65 2c 20 72 65 66 20 64 61 74 61 54 79 70  lse, ref dataTyp
113e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
113f0 72 65 66 20 63 6f 6c 6c 61 74 65 53 65 71 75 65  ref collateSeque
11400 6e 63 65 2c 20 72 65 66 20 6e 6f 74 4e 75 6c 6c  nce, ref notNull
11410 2c 20 72 65 66 20 70 72 69 6d 61 72 79 4b 65 79  , ref primaryKey
11420 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
11430 65 66 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74  ef autoIncrement
11440 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
11450 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11460 64 65 20 62 6f 6f 6c 20 43 6f 6c 75 6d 6e 4d 65  de bool ColumnMe
11470 74 61 44 61 74 61 28 73 74 72 69 6e 67 20 64 61  taData(string da
11480 74 61 42 61 73 65 2c 20 73 74 72 69 6e 67 20 74  taBase, string t
11490 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c  able, string col
114a0 75 6d 6e 2c 20 62 6f 6f 6c 20 63 61 6e 54 68 72  umn, bool canThr
114b0 6f 77 2c 20 72 65 66 20 73 74 72 69 6e 67 20 64  ow, ref string d
114c0 61 74 61 54 79 70 65 2c 20 72 65 66 20 73 74 72  ataType, ref str
114d0 69 6e 67 20 63 6f 6c 6c 61 74 65 53 65 71 75 65  ing collateSeque
114e0 6e 63 65 2c 20 72 65 66 20 62 6f 6f 6c 20 6e 6f  nce, ref bool no
114f0 74 4e 75 6c 6c 2c 20 72 65 66 20 62 6f 6f 6c 20  tNull, ref bool 
11500 70 72 69 6d 61 72 79 4b 65 79 2c 20 72 65 66 20  primaryKey, ref 
11510 62 6f 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65  bool autoIncreme
11520 6e 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nt)..    {..    
11530 20 20 49 6e 74 50 74 72 20 64 61 74 61 54 79 70    IntPtr dataTyp
11540 65 50 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  ePtr = IntPtr.Ze
11550 72 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ro;..      IntPt
11560 72 20 63 6f 6c 6c 53 65 71 50 74 72 20 3d 20 49  r collSeqPtr = I
11570 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
11580 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c 20     int nnotNull 
11590 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  = 0;..      int 
115a0 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 30 3b  nprimaryKey = 0;
115b0 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 61 75 74  ..      int naut
115c0 6f 49 6e 63 20 3d 20 30 3b 0d 0a 20 20 20 20 20  oInc = 0;..     
115d0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
115e0 20 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 64   n;..      int d
115f0 74 4c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74  tLen;..      int
11600 20 63 73 4c 65 6e 3b 0d 0a 0d 0a 23 69 66 20 21   csLen;....#if !
11610 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
11620 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20 30  .      dtLen = 0
11630 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e 20 3d  ;..      csLen =
11640 20 30 3b 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55   0;..      n = U
11650 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11660 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
11670 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
11680 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
11690 6f 55 54 46 38 28 64 61 74 61 42 61 73 65 29 2c  oUTF8(dataBase),
116a0 20 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20   ToUTF8(table), 
116b0 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20  ToUTF8(column), 
116c0 72 65 66 20 64 61 74 61 54 79 70 65 50 74 72 2c  ref dataTypePtr,
116d0 20 72 65 66 20 63 6f 6c 6c 53 65 71 50 74 72 2c   ref collSeqPtr,
116e0 20 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 72   ref nnotNull, r
116f0 65 66 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20  ef nprimaryKey, 
11700 72 65 66 20 6e 61 75 74 6f 49 6e 63 2c 20 72 65  ref nautoInc, re
11710 66 20 64 74 4c 65 6e 2c 20 72 65 66 20 63 73 4c  f dtLen, ref csL
11720 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
11730 20 20 20 64 74 4c 65 6e 20 3d 20 2d 31 3b 0d 0a     dtLen = -1;..
11740 20 20 20 20 20 20 63 73 4c 65 6e 20 3d 20 2d 31        csLen = -1
11750 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ;....      n = U
11760 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11770 64 73 2e 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  ds.sqlite3_table
11780 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
11790 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61  (_sql, ToUTF8(da
117a0 74 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28  taBase), ToUTF8(
117b0 74 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63  table), ToUTF8(c
117c0 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61 74 61  olumn), ref data
117d0 54 79 70 65 50 74 72 2c 20 72 65 66 20 63 6f 6c  TypePtr, ref col
117e0 6c 53 65 71 50 74 72 2c 20 72 65 66 20 6e 6e 6f  lSeqPtr, ref nno
117f0 74 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72 69 6d  tNull, ref nprim
11800 61 72 79 4b 65 79 2c 20 72 65 66 20 6e 61 75 74  aryKey, ref naut
11810 6f 49 6e 63 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  oInc);..#endif..
11820 20 20 20 20 20 20 69 66 20 28 63 61 6e 54 68 72        if (canThr
11830 6f 77 20 26 26 20 28 6e 20 21 3d 20 53 51 4c 69  ow && (n != SQLi
11840 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29  teErrorCode.Ok))
11850 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
11860 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
11870 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
11880 0d 0a 20 20 20 20 20 20 64 61 74 61 54 79 70 65  ..      dataType
11890 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28   = UTF8ToString(
118a0 64 61 74 61 54 79 70 65 50 74 72 2c 20 64 74 4c  dataTypePtr, dtL
118b0 65 6e 29 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c  en);..      coll
118c0 61 74 65 53 65 71 75 65 6e 63 65 20 3d 20 55 54  ateSequence = UT
118d0 46 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 53  F8ToString(collS
118e0 65 71 50 74 72 2c 20 63 73 4c 65 6e 29 3b 0d 0a  eqPtr, csLen);..
118f0 0d 0a 20 20 20 20 20 20 6e 6f 74 4e 75 6c 6c 20  ..      notNull 
11900 3d 20 28 6e 6e 6f 74 4e 75 6c 6c 20 3d 3d 20 31  = (nnotNull == 1
11910 29 3b 0d 0a 20 20 20 20 20 20 70 72 69 6d 61 72  );..      primar
11920 79 4b 65 79 20 3d 20 28 6e 70 72 69 6d 61 72 79  yKey = (nprimary
11930 4b 65 79 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  Key == 1);..    
11940 20 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 20    autoIncrement 
11950 3d 20 28 6e 61 75 74 6f 49 6e 63 20 3d 3d 20 31  = (nautoInc == 1
11960 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  );....      retu
11970 72 6e 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  rn (n == SQLiteE
11980 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 3b 0d 0a 20  rrorCode.Ok);.. 
11990 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
119a0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62  rnal override ob
119b0 6a 65 63 74 20 47 65 74 4f 62 6a 65 63 74 28 53  ject GetObject(S
119c0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
119d0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
119e0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
119f0 73 77 69 74 63 68 20 28 43 6f 6c 75 6d 6e 41 66  switch (ColumnAf
11a00 66 69 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64  finity(stmt, ind
11a10 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ex))..        {.
11a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
11a30 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49  e TypeAffinity.I
11a40 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20  nt64:..         
11a50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11a70 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74  turn GetInt64(st
11a80 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
11ab0 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
11ac0 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  uble:..         
11ad0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11af0 74 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73  turn GetDouble(s
11b00 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
11b30 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  e TypeAffinity.T
11b40 65 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ext:..          
11b50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11b70 75 72 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74  urn GetText(stmt
11b80 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
11b90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11ba0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
11bb0 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
11bc0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
11bd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11be0 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 73            long s
11bf0 69 7a 65 20 3d 20 47 65 74 42 79 74 65 73 28 73  ize = GetBytes(s
11c00 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e  tmt, index, 0, n
11c10 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 0d 0a 20  ull, 0, 0);.... 
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 20 20 20 69 66 20 28 28 73 69 7a 65 20 3e 20 30     if ((size > 0
11c40 29 20 26 26 20 28 73 69 7a 65 20 3c 3d 20 69 6e  ) && (size <= in
11c50 74 2e 4d 61 78 56 61 6c 75 65 29 29 0d 0a 20 20  t.MaxValue))..  
11c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74               byt
11c90 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e 65 77 20  e[] bytes = new 
11ca0 62 79 74 65 5b 28 69 6e 74 29 73 69 7a 65 5d 3b  byte[(int)size];
11cb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 42              GetB
11cd0 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78  ytes(stmt, index
11ce0 2c 20 30 2c 20 62 79 74 65 73 2c 20 30 2c 20 28  , 0, bytes, 0, (
11cf0 69 6e 74 29 73 69 7a 65 29 3b 0d 0a 0d 0a 20 20  int)size);....  
11d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d10 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
11d20 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es;..           
11d30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d50 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
11d60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11d70 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
11d80 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 3a 0d 0a  Affinity.Null:..
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11da0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11db0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 42         return DB
11dc0 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20  Null.Value;..   
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
11de0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11df0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
11e00 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
11e10 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d  eption();..    }
11e20 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
11e30 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65   override double
11e40 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74   GetDouble(SQLit
11e50 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
11e60 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
11e70 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
11e80 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
11e90 52 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  RK..      return
11ea0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11eb0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
11ec0 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e  umn_double(stmt.
11ed0 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
11ee0 64 65 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  dex);..#elif !SQ
11ef0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
11f00 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75       double valu
11f10 65 20 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20  e = 0.0;..      
11f20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
11f30 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
11f40 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  mn_double_intero
11f50 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
11f60 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20  tmt, index, ref 
11f70 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72  value);..      r
11f80 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65  eturn value;..#e
11f90 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
11fa0 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
11fb0 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
11fc0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
11fd0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11fe0 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 47 65 74  verride bool Get
11ff0 42 6f 6f 6c 65 61 6e 28 53 51 4c 69 74 65 53 74  Boolean(SQLiteSt
12000 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
12010 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
12020 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
12030 42 6f 6f 6c 65 61 6e 28 47 65 74 4f 62 6a 65 63  Boolean(GetObjec
12040 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  t(stmt, index), 
12050 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
12060 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 66 61  riantCulture, fa
12070 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lse);..    }....
12080 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12090 72 72 69 64 65 20 73 62 79 74 65 20 47 65 74 53  rride sbyte GetS
120a0 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74 65  Byte(SQLiteState
120b0 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
120c0 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
120d0 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65      return unche
120e0 63 6b 65 64 28 28 73 62 79 74 65 29 28 47 65 74  cked((sbyte)(Get
120f0 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
12100 78 29 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c  x) & byte.MaxVal
12110 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
12120 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12130 72 72 69 64 65 20 62 79 74 65 20 47 65 74 42 79  rride byte GetBy
12140 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  te(SQLiteStateme
12150 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
12160 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
12170 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
12180 65 64 28 28 62 79 74 65 29 28 47 65 74 49 6e 74  ed((byte)(GetInt
12190 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
121a0 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29  & byte.MaxValue)
121b0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
121c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
121d0 64 65 20 73 68 6f 72 74 20 47 65 74 49 6e 74 31  de short GetInt1
121e0 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  6(SQLiteStatemen
121f0 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
12200 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
12210 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
12220 64 28 28 73 68 6f 72 74 29 28 47 65 74 49 6e 74  d((short)(GetInt
12230 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
12240 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75  & ushort.MaxValu
12250 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
12260 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
12270 72 69 64 65 20 75 73 68 6f 72 74 20 47 65 74 55  ride ushort GetU
12280 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74  Int16(SQLiteStat
12290 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
122a0 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
122b0 20 20 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68       return unch
122c0 65 63 6b 65 64 28 28 75 73 68 6f 72 74 29 28 47  ecked((ushort)(G
122d0 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e  etInt32(stmt, in
122e0 64 65 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61  dex) & ushort.Ma
122f0 78 56 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d  xValue));..    }
12300 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
12310 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
12320 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61  tInt32(SQLiteSta
12330 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
12340 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
12350 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
12360 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12370 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
12380 69 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  int(stmt._sqlite
12390 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  _stmt, index);..
123a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
123b0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75  ernal override u
123c0 69 6e 74 20 47 65 74 55 49 6e 74 33 32 28 53 51  int GetUInt32(SQ
123d0 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
123e0 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
123f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
12400 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75  urn unchecked((u
12410 69 6e 74 29 47 65 74 49 6e 74 33 32 28 73 74 6d  int)GetInt32(stm
12420 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20  t, index));..   
12430 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
12440 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67  al override long
12450 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65   GetInt64(SQLite
12460 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
12470 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
12480 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
12490 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
124a0 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  K..      return 
124b0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
124c0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
124d0 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73  mn_int64(stmt._s
124e0 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
124f0 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  x);..#elif !SQLI
12500 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
12510 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20     long value = 
12520 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  0;..      Unsafe
12530 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12540 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
12550 36 34 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  64_interop(stmt.
12560 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
12570 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
12580 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  ..      return v
12590 61 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  alue;..#else..  
125a0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
125b0 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
125c0 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
125d0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
125e0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
125f0 20 75 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36 34   ulong GetUInt64
12600 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
12610 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
12620 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12630 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
12640 28 28 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34  ((ulong)GetInt64
12650 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d  (stmt, index));.
12660 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
12670 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12680 73 74 72 69 6e 67 20 47 65 74 54 65 78 74 28 53  string GetText(S
12690 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
126a0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
126b0 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
126c0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
126d0 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b      int len = 0;
126e0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
126f0 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
12700 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12710 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
12720 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ext_interop(stmt
12730 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
12740 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20  ndex, ref len), 
12750 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
12760 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
12770 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
12780 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12790 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
127a0 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
127b0 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20  t, index),..    
127c0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
127d0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
127e0 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
127f0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
12800 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66  index));..#endif
12810 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12820 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12830 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74   DateTime GetDat
12840 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74  eTime(SQLiteStat
12850 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
12860 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
12870 20 20 20 20 20 69 66 20 28 5f 64 61 74 65 74 69       if (_dateti
12880 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69  meFormat == SQLi
12890 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69  teDateFormats.Ti
128a0 63 6b 73 29 0d 0a 20 20 20 20 20 20 20 20 72 65  cks)..        re
128b0 74 75 72 6e 20 54 69 63 6b 73 54 6f 44 61 74 65  turn TicksToDate
128c0 54 69 6d 65 28 47 65 74 49 6e 74 36 34 28 73 74  Time(GetInt64(st
128d0 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74  mt, index), _dat
128e0 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20  etimeKind);..   
128f0 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74     else if (_dat
12900 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53  etimeFormat == S
12910 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
12920 2e 4a 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20 20  .JulianDay)..   
12930 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
12940 74 65 54 69 6d 65 28 47 65 74 44 6f 75 62 6c 65  teTime(GetDouble
12950 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f  (stmt, index), _
12960 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a  datetimeKind);..
12970 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
12980 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d  datetimeFormat =
12990 3d 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  = SQLiteDateForm
129a0 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 29 0d 0a  ats.UnixEpoch)..
129b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
129c0 6e 69 78 45 70 6f 63 68 54 6f 44 61 74 65 54 69  nixEpochToDateTi
129d0 6d 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74  me(GetInt64(stmt
129e0 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74  , index), _datet
129f0 69 6d 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69 66  imeKind);....#if
12a00 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
12a10 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
12a20 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
12a30 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55  urn ToDateTime(U
12a40 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12a50 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
12a60 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73  n_text_interop(s
12a70 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
12a80 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e  , index, ref len
12a90 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ), len);..#else.
12aa0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
12ab0 44 61 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e  DateTime(UnsafeN
12ac0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12ad0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
12ae0 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
12af0 6d 74 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20  mt, index),..   
12b00 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
12b10 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12b20 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74  _column_bytes(st
12b30 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
12b40 20 69 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69   index));..#endi
12b50 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
12b60 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
12b70 65 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28  e long GetBytes(
12b80 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
12b90 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
12ba0 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74   int nDataOffset
12bb0 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20  , byte[] bDest, 
12bc0 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
12bd0 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d  nLength)..    {.
12be0 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20  .      int nlen 
12bf0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
12c00 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
12c10 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e  lumn_bytes(stmt.
12c20 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
12c30 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  dex);....      /
12c40 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74  / If no destinat
12c50 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75  ion buffer, retu
12c60 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64  rn the size need
12c70 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ed...      if (b
12c80 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
12c90 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
12ca0 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20      int nCopied 
12cb0 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  = nLength;....  
12cc0 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
12cd0 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
12ce0 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
12cf0 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
12d00 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
12d10 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
12d20 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
12d30 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
12d40 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
12d50 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
12d60 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
12d70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
12d80 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65  Ptr ptr = Unsafe
12d90 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12da0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
12db0 62 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  b(stmt._sqlite_s
12dc0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a  tmt, index);....
12dd0 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
12de0 43 6f 70 79 28 28 49 6e 74 50 74 72 29 28 70 74  Copy((IntPtr)(pt
12df0 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44  r.ToInt64() + nD
12e00 61 74 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73  ataOffset), bDes
12e10 74 2c 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69  t, nStart, nCopi
12e20 65 64 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ed);..      }.. 
12e30 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
12e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70   {..        nCop
12e50 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ied = 0;..      
12e60 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
12e70 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20  n nCopied;..    
12e80 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12e90 6c 20 6f 76 65 72 72 69 64 65 20 63 68 61 72 20  l override char 
12ea0 47 65 74 43 68 61 72 28 53 51 4c 69 74 65 53 74  GetChar(SQLiteSt
12eb0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
12ec0 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
12ed0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f  .      return Co
12ee0 6e 76 65 72 74 2e 54 6f 43 68 61 72 28 47 65 74  nvert.ToChar(Get
12ef0 55 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64  UInt16(stmt, ind
12f00 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ex));..    }....
12f10 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12f20 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68  rride long GetCh
12f30 61 72 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ars(SQLiteStatem
12f40 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
12f50 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  dex, int nDataOf
12f60 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65  fset, char[] bDe
12f70 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
12f80 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
12f90 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
12fa0 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  len;..      int 
12fb0 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74  nCopied = nLengt
12fc0 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72 69  h;....      stri
12fd0 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65 78 74  ng str = GetText
12fe0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
12ff0 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72        nlen = str
13000 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
13010 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e    if (bDest == n
13020 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e  ull) return nlen
13030 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
13040 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20  Copied + nStart 
13050 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20  > bDest.Length) 
13060 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e  nCopied = bDest.
13070 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b  Length - nStart;
13080 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
13090 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  ied + nDataOffse
130a0 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65  t > nlen) nCopie
130b0 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61  d = nlen - nData
130c0 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20  Offset;....     
130d0 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30   if (nCopied > 0
130e0 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72 2e 43  )..        str.C
130f0 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66 73 65  opyTo(nDataOffse
13100 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74  t, bDest, nStart
13110 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20  , nCopied);..   
13120 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20     else nCopied 
13130 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  = 0;....      re
13140 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
13150 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
13160 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
13170 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65  ol IsNull(SQLite
13180 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
13190 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
131a0 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
131b0 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  (ColumnAffinity(
131c0 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20  stmt, index) == 
131d0 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c  TypeAffinity.Nul
131e0 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
131f0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13200 69 64 65 20 69 6e 74 20 41 67 67 72 65 67 61 74  ide int Aggregat
13210 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f  eCount(IntPtr co
13220 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
13230 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
13240 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13250 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74  sqlite3_aggregat
13260 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29  e_count(context)
13270 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
13280 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
13290 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
132a0 65 20 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e  e CreateFunction
132b0 28 73 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74  (string strFunct
132c0 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20  ion, int nArgs, 
132d0 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71  bool needCollSeq
132e0 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b  , SQLiteCallback
132f0 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c   func, SQLiteCal
13300 6c 62 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20  lback funcstep, 
13310 53 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62  SQLiteFinalCallb
13320 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c 2c 20 62  ack funcfinal, b
13330 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20  ool canThrow).. 
13340 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
13350 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a  teErrorCode n;..
13360 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
13370 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6e 20  ANDARD..      n 
13380 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
13390 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72  thods.sqlite3_cr
133a0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e  eate_function_in
133b0 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
133c0 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c  F8(strFunction),
133d0 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50 74   nArgs, 4, IntPt
133e0 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75  r.Zero, func, fu
133f0 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61  ncstep, funcfina
13400 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20  l, (needCollSeq 
13410 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a 20 30  == true) ? 1 : 0
13420 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
13430 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
13440 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66  de.Ok) n = Unsaf
13450 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13460 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
13470 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f  nction_interop(_
13480 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
13490 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
134a0 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
134b0 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
134c0 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65   funcfinal, (nee
134d0 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65  dCollSeq == true
134e0 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c  ) ? 1 : 0);..#el
134f0 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e  se..      n = Un
13500 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13510 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
13520 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20  _function(_sql, 
13530 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69  ToUTF8(strFuncti
13540 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49  on), nArgs, 4, I
13550 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63  ntPtr.Zero, func
13560 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63  , funcstep, func
13570 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69  final);..      i
13580 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
13590 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20  rorCode.Ok) n = 
135a0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
135b0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61  ods.sqlite3_crea
135c0 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c  te_function(_sql
135d0 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
135e0 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c  tion), nArgs, 1,
135f0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
13600 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
13610 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69  ncfinal);..#endi
13620 66 0d 0a 20 20 20 20 20 20 69 66 20 28 63 61 6e  f..      if (can
13630 54 68 72 6f 77 20 26 26 20 28 6e 20 21 3d 20 53  Throw && (n != S
13640 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
13650 6b 29 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  k)) throw new SQ
13660 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
13670 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
13680 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
13690 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  n;..    }....   
136a0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
136b0 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
136c0 64 65 20 43 72 65 61 74 65 43 6f 6c 6c 61 74 69  de CreateCollati
136d0 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 43 6f 6c  on(string strCol
136e0 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f  lation, SQLiteCo
136f0 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51  llation func, SQ
13700 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75  LiteCollation fu
13710 6e 63 31 36 2c 20 62 6f 6f 6c 20 63 61 6e 54 68  nc16, bool canTh
13720 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  row)..    {..   
13730 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
13740 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
13750 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13760 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
13770 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
13780 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20  (strCollation), 
13790 32 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  2, IntPtr.Zero, 
137a0 66 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20 20 20  func16);..      
137b0 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
137c0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d  rrorCode.Ok) n =
137d0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
137e0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
137f0 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73  ate_collation(_s
13800 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 43 6f  ql, ToUTF8(strCo
13810 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74  llation), 1, Int
13820 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b  Ptr.Zero, func);
13830 0d 0a 20 20 20 20 20 20 69 66 20 28 63 61 6e 54  ..      if (canT
13840 68 72 6f 77 20 26 26 20 28 6e 20 21 3d 20 53 51  hrow && (n != SQ
13850 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
13860 29 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  )) throw new SQL
13870 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
13880 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
13890 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
138a0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
138b0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
138c0 65 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c  e int ContextCol
138d0 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c  lateCompare(Coll
138e0 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
138f0 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f  m enc, IntPtr co
13900 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73 31  ntext, string s1
13910 2c 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20  , string s2)..  
13920 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
13930 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
13940 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20   byte[] b1;..   
13950 20 20 20 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20     byte[] b2;.. 
13960 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65 78 74       System.Text
13970 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72  .Encoding conver
13980 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ter = null;.... 
13990 20 20 20 20 20 73 77 69 74 63 68 20 28 65 6e 63       switch (enc
139a0 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
139b0 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69      case Collati
139c0 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55  onEncodingEnum.U
139d0 54 46 38 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  TF8:..          
139e0 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74  converter = Syst
139f0 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
13a00 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20 20 20 20  .UTF8;..        
13a10 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
13a20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e    case Collation
13a30 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46  EncodingEnum.UTF
13a40 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20 20 20 20  16LE:..         
13a50 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79 73   converter = Sys
13a60 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e  tem.Text.Encodin
13a70 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  g.Unicode;..    
13a80 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
13a90 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61        case Colla
13aa0 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d  tionEncodingEnum
13ab0 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20 20 20 20  .UTF16BE:..     
13ac0 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
13ad0 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
13ae0 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55  oding.BigEndianU
13af0 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
13b00 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
13b10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d   }....      b1 =
13b20 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42 79   converter.GetBy
13b30 74 65 73 28 73 31 29 3b 0d 0a 20 20 20 20 20 20  tes(s1);..      
13b40 62 32 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47  b2 = converter.G
13b50 65 74 42 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a  etBytes(s2);....
13b60 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
13b70 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13b80 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  .sqlite3_context
13b90 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74  _collcompare_int
13ba0 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 62 31  erop(context, b1
13bb0 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c  , b1.Length, b2,
13bc0 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65   b2.Length);..#e
13bd0 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
13be0 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
13bf0 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
13c00 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
13c10 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
13c20 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74  verride int Cont
13c30 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72  extCollateCompar
13c40 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e(CollationEncod
13c50 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74  ingEnum enc, Int
13c60 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61  Ptr context, cha
13c70 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63  r[] c1, char[] c
13c80 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  2)..    {..#if !
13c90 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
13ca0 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31  .      byte[] b1
13cb0 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  ;..      byte[] 
13cc0 62 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65  b2;..      Syste
13cd0 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20  m.Text.Encoding 
13ce0 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c  converter = null
13cf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63  ;....      switc
13d00 68 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b  h (enc)..      {
13d10 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43  ..        case C
13d20 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
13d30 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20  Enum.UTF8:..    
13d40 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
13d50 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
13d60 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20  coding.UTF8;..  
13d70 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
13d80 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c          case Col
13d90 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
13da0 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20  um.UTF16LE:..   
13db0 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72         converter
13dc0 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45   = System.Text.E
13dd0 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b  ncoding.Unicode;
13de0 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
13df0 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
13e00 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
13e10 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d  ngEnum.UTF16BE:.
13e20 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65  .          conve
13e30 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65  rter = System.Te
13e40 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45  xt.Encoding.BigE
13e50 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ndianUnicode;.. 
13e60 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
13e70 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
13e80 20 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72    b1 = converter
13e90 2e 47 65 74 42 79 74 65 73 28 63 31 29 3b 0d 0a  .GetBytes(c1);..
13ea0 20 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65        b2 = conve
13eb0 72 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 32  rter.GetBytes(c2
13ec0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  );....      retu
13ed0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
13ee0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
13ef0 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61  ontext_collcompa
13f00 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65  re_interop(conte
13f10 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74  xt, b1, b1.Lengt
13f20 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68  h, b2, b2.Length
13f30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
13f40 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
13f50 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
13f60 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
13f70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
13f80 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 43 6f  rnal override Co
13f90 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
13fa0 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  GetCollationSequ
13fb0 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63 74  ence(SQLiteFunct
13fc0 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74 72  ion func, IntPtr
13fd0 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
13fe0 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
13ff0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 43 6f  ANDARD..      Co
14000 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  llationSequence 
14010 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74  seq = new Collat
14020 69 6f 6e 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a  ionSequence();..
14030 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
14040 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 74 79  0;..      int ty
14050 70 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69  pe = 0;..      i
14060 6e 74 20 65 6e 63 20 3d 20 30 3b 0d 0a 20 20 20  nt enc = 0;..   
14070 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20 55 6e     IntPtr p = Un
14080 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
14090 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  s.sqlite3_contex
140a0 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f  t_collseq_intero
140b0 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 74  p(context, ref t
140c0 79 70 65 2c 20 72 65 66 20 65 6e 63 2c 20 72 65  ype, ref enc, re
140d0 66 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  f len);....     
140e0 20 69 66 20 28 70 20 21 3d 20 6e 75 6c 6c 29 20   if (p != null) 
140f0 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54 46 38 54  seq.Name = UTF8T
14100 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b  oString(p, len);
14110 0d 0a 20 20 20 20 20 20 73 65 71 2e 54 79 70 65  ..      seq.Type
14120 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 54 79 70   = (CollationTyp
14130 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a 20 20 20  eEnum)type;..   
14140 20 20 20 73 65 71 2e 5f 66 75 6e 63 20 3d 20 66     seq._func = f
14150 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e  unc;..      seq.
14160 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43 6f 6c 6c  Encoding = (Coll
14170 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
14180 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  m)enc;....      
14190 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a 23 65 6c  return seq;..#el
141a0 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
141b0 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
141c0 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
141d0 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
141e0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
141f0 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50  erride long GetP
14200 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73 28 49  aramValueBytes(I
14210 6e 74 50 74 72 20 70 2c 20 69 6e 74 20 6e 44 61  ntPtr p, int nDa
14220 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d  taOffset, byte[]
14230 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
14240 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
14250 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
14260 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65  nt nlen = Unsafe
14270 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14280 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
14290 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  s(p);....      /
142a0 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74  / If no destinat
142b0 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75  ion buffer, retu
142c0 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64  rn the size need
142d0 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62  ed...      if (b
142e0 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  Dest == null) re
142f0 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20  turn nlen;....  
14300 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20      int nCopied 
14310 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  = nLength;....  
14320 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
14330 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74  + nStart > bDest
14340 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64  .Length) nCopied
14350 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20   = bDest.Length 
14360 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20  - nStart;..     
14370 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
14380 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65  DataOffset > nle
14390 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65  n) nCopied = nle
143a0 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b  n - nDataOffset;
143b0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43  ....      if (nC
143c0 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20  opied > 0)..    
143d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
143e0 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65  Ptr ptr = Unsafe
143f0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14400 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62  lite3_value_blob
14410 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  (p);....        
14420 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e  Marshal.Copy((In
14430 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74 36  tPtr)(ptr.ToInt6
14440 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  4() + nDataOffse
14450 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72  t), bDest, nStar
14460 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20  t, nCopied);..  
14470 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73      }..      els
14480 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  e..      {..    
14490 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b      nCopied = 0;
144a0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
144b0 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65     return nCopie
144c0 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  d;..    }....   
144d0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
144e0 64 65 20 64 6f 75 62 6c 65 20 47 65 74 50 61 72  de double GetPar
144f0 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28 49 6e  amValueDouble(In
14500 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
14510 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
14520 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
14530 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
14540 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14550 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
14560 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23  _double(ptr);..#
14570 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  elif !SQLITE_STA
14580 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 64 6f 75  NDARD..      dou
14590 62 6c 65 20 76 61 6c 75 65 20 3d 20 30 2e 30 3b  ble value = 0.0;
145a0 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
145b0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
145c0 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
145d0 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 72 65  _interop(ptr, re
145e0 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
145f0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
14600 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
14610 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
14620 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
14630 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
14640 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
14650 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65   override int Ge
14660 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 33 32  tParamValueInt32
14670 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
14680 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
14690 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
146a0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
146b0 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20  lue_int(ptr);.. 
146c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
146d0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f  rnal override lo
146e0 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ng GetParamValue
146f0 49 6e 74 36 34 28 49 6e 74 50 74 72 20 70 74 72  Int64(IntPtr ptr
14700 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
14710 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
14720 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
14730 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
14740 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14750 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70  e3_value_int64(p
14760 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  tr);..#elif !SQL
14770 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
14780 20 20 20 20 49 6e 74 36 34 20 76 61 6c 75 65 20      Int64 value 
14790 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61  = 0;..      Unsa
147a0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
147b0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
147c0 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c  t64_interop(ptr,
147d0 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
147e0 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
147f0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
14800 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
14810 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
14820 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
14830 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
14840 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
14850 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ing GetParamValu
14860 65 54 65 78 74 28 49 6e 74 50 74 72 20 70 74 72  eText(IntPtr ptr
14870 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
14880 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
14890 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
148a0 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  0;..      return
148b0 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
148c0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
148d0 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
148e0 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 70 74 72  text_interop(ptr
148f0 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29  , ref len), len)
14900 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
14910 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
14920 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
14930 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
14940 76 61 6c 75 65 5f 74 65 78 74 28 70 74 72 29 2c  value_text(ptr),
14950 0d 0a 20 20 20 20 20 20 20 20 55 6e 73 61 66 65  ..        Unsafe
14960 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14970 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
14980 73 28 70 74 72 29 29 3b 0d 0a 23 65 6e 64 69 66  s(ptr));..#endif
14990 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
149a0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
149b0 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65   TypeAffinity Ge
149c0 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28  tParamValueType(
149d0 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20  IntPtr ptr)..   
149e0 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
149f0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
14a00 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
14a10 75 65 5f 74 79 70 65 28 70 74 72 29 3b 0d 0a 20  ue_type(ptr);.. 
14a20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
14a30 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
14a40 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e  id ReturnBlob(In
14a50 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79  tPtr context, by
14a60 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
14a70 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
14a80 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14a90 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f  lite3_result_blo
14aa0 62 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  b(context, value
14ab0 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20  , value.Length, 
14ac0 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a  (IntPtr)(-1));..
14ad0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
14ae0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
14af0 6f 69 64 20 52 65 74 75 72 6e 44 6f 75 62 6c 65  oid ReturnDouble
14b00 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
14b10 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a   double value)..
14b20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
14b30 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
14b40 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73  EWORK..      Uns
14b50 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
14b60 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
14b70 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20  double(context, 
14b80 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21  value);..#elif !
14b90 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
14ba0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
14bb0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14bc0 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
14bd0 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74  _interop(context
14be0 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
14bf0 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f  else..      thro
14c00 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
14c10 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
14c20 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
14c30 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
14c40 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
14c50 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74 72  turnError(IntPtr
14c60 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
14c70 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
14c80 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
14c90 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
14ca0 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63  3_result_error(c
14cb0 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76  ontext, ToUTF8(v
14cc0 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e  alue), value.Len
14cd0 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  gth);..    }....
14ce0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14cf0 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
14d00 6e 49 6e 74 33 32 28 49 6e 74 50 74 72 20 63 6f  nInt32(IntPtr co
14d10 6e 74 65 78 74 2c 20 69 6e 74 20 76 61 6c 75 65  ntext, int value
14d20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14d30 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
14d40 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
14d50 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20  lt_int(context, 
14d60 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  value);..    }..
14d70 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
14d80 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
14d90 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20  urnInt64(IntPtr 
14da0 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61  context, long va
14db0 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  lue)..    {..#if
14dc0 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
14dd0 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
14de0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
14df0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
14e00 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74  esult_int64(cont
14e10 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  ext, value);..#e
14e20 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
14e30 44 41 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61  DARD..      Unsa
14e40 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
14e50 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
14e60 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  nt64_interop(con
14e70 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29  text, ref value)
14e80 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
14e90 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
14ea0 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
14eb0 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
14ec0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
14ed0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
14ee0 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74  d ReturnNull(Int
14ef0 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20  Ptr context)..  
14f00 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66    {..      Unsaf
14f10 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
14f20 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75  qlite3_result_nu
14f30 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  ll(context);..  
14f40 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
14f50 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
14f60 64 20 52 65 74 75 72 6e 54 65 78 74 28 49 6e 74  d ReturnText(Int
14f70 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
14f80 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
14f90 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  {..      byte[] 
14fa0 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65  b = ToUTF8(value
14fb0 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  );..      Unsafe
14fc0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14fd0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
14fe0 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46  t(context, ToUTF
14ff0 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67  8(value), b.Leng
15000 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29  th - 1, (IntPtr)
15010 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  (-1));..    }...
15020 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
15030 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
15040 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
15050 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
15060 73 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20  s the file name 
15070 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69  of the native li
15080 62 72 61 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  brary containing
15090 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20   the native..   
150a0 20 2f 2f 2f 20 22 76 74 73 68 69 6d 22 20 65 78   /// "vtshim" ex
150b0 74 65 6e 73 69 6f 6e 20 2d 41 4e 44 2d 20 77 68  tension -AND- wh
150c0 65 74 68 65 72 20 69 74 20 73 68 6f 75 6c 64 20  ether it should 
150d0 62 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 6c  be dynamically l
150e0 6f 61 64 65 64 20 62 79 0d 0a 20 20 20 20 2f 2f  oaded by..    //
150f0 2f 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20  / this class... 
15100 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
15110 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
15120 6d 20 6e 61 6d 65 3d 22 69 73 4c 6f 61 64 4e 65  m name="isLoadNe
15130 65 64 65 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  eded">..    /// 
15140 54 68 69 73 20 6f 75 74 70 75 74 20 70 61 72 61  This output para
15150 6d 65 74 65 72 20 77 69 6c 6c 20 62 65 20 73 65  meter will be se
15160 74 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  t to non-zero if
15170 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 6e 61   the returned na
15180 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69  tive..    /// li
15190 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 20  brary file name 
151a0 73 68 6f 75 6c 64 20 62 65 20 64 79 6e 61 6d 69  should be dynami
151b0 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20 70 72 69  cally loaded pri
151c0 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 69 6e 67  or to attempting
151d0 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63 72  ..    /// the cr
151e0 65 61 74 69 6f 6e 20 6f 66 20 6e 61 74 69 76 65  eation of native
151f0 20 64 69 73 70 6f 73 61 62 6c 65 20 65 78 74 65   disposable exte
15200 6e 73 69 6f 6e 20 6d 6f 64 75 6c 65 73 2e 0d 0a  nsion modules...
15210 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
15220 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
15230 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
15240 20 66 69 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68   file name of th
15250 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
15260 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
15270 6e 61 74 69 76 65 20 22 76 74 73 68 69 6d 22 0d  native "vtshim".
15280 0a 20 20 20 20 2f 2f 2f 20 65 78 74 65 6e 73 69  .    /// extensi
15290 6f 6e 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20  on -OR- null if 
152a0 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 64 65 74  it cannot be det
152b0 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f  ermined...    //
152c0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
152d0 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
152e0 20 47 65 74 53 68 69 6d 45 78 74 65 6e 73 69 6f   GetShimExtensio
152f0 6e 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20  nFileName(..    
15300 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 69 73 4c      ref bool isL
15310 6f 61 64 4e 65 65 64 65 64 20 2f 2a 20 6f 75 74  oadNeeded /* out
15320 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a   */..        )..
15330 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
15340 66 20 28 5f 73 68 69 6d 49 73 4c 6f 61 64 4e 65  f (_shimIsLoadNe
15350 65 64 65 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  eded != null).. 
15360 20 20 20 20 20 20 20 20 20 20 20 69 73 4c 6f 61             isLoa
15370 64 4e 65 65 64 65 64 20 3d 20 28 62 6f 6f 6c 29  dNeeded = (bool)
15380 5f 73 68 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65  _shimIsLoadNeede
15390 64 3b 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65  d;..        else
153a0 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 53 54 41  ..#if SQLITE_STA
153b0 4e 44 41 52 44 20 7c 7c 20 55 53 45 5f 49 4e 54  NDARD || USE_INT
153c0 45 52 4f 50 5f 44 4c 4c 20 7c 7c 20 50 4c 41 54  EROP_DLL || PLAT
153d0 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
153e0 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
153f0 20 20 20 69 73 4c 6f 61 64 4e 65 65 64 65 64 20     isLoadNeeded 
15400 3d 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  = HelperMethods.
15410 49 73 57 69 6e 64 6f 77 73 28 29 3b 20 2f 2a 20  IsWindows(); /* 
15420 43 4f 4d 50 41 54 20 2a 2f 0d 0a 23 65 6c 73 65  COMPAT */..#else
15430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 73  ..            is
15440 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 66 61 6c  LoadNeeded = fal
15450 73 65 3b 20 2f 2a 20 6d 69 78 65 64 2d 6d 6f 64  se; /* mixed-mod
15460 65 20 61 73 73 65 6d 62 6c 79 20 2a 2f 0d 0a 23  e assembly */..#
15470 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
15480 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
15490 20 3d 20 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f   = _shimExtensio
154a0 6e 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  nFileName;....  
154b0 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e 61        if (fileNa
154c0 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
154d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
154e0 66 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 23 69 66  fileName;....#if
154f0 20 28 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   (SQLITE_STANDAR
15500 44 20 7c 7c 20 55 53 45 5f 49 4e 54 45 52 4f 50  D || USE_INTEROP
15510 5f 44 4c 4c 20 7c 7c 20 50 4c 41 54 46 4f 52 4d  _DLL || PLATFORM
15520 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
15530 4b 29 20 26 26 20 50 52 45 4c 4f 41 44 5f 4e 41  K) && PRELOAD_NA
15540 54 49 56 45 5f 4c 49 42 52 41 52 59 0d 0a 20 20  TIVE_LIBRARY..  
15550 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
15560 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
15570 2e 47 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72  .GetNativeLibrar
15580 79 46 69 6c 65 4e 61 6d 65 4f 6e 6c 79 28 29 3b  yFileNameOnly();
15590 20 2f 2a 20 43 4f 4d 50 41 54 20 2a 2f 0d 0a 23   /* COMPAT */..#
155a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 72 65  else..        re
155b0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64  turn null;..#end
155c0 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
155d0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
155e0 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
155f0 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
15600 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
15610 6f 72 64 65 72 20 74 6f 20 63 72 65 61 74 65 20  order to create 
15620 61 20 64 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20  a disposable..  
15630 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e    /// module con
15640 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c  taining the impl
15650 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20  ementation of a 
15660 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
15670 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
15680 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
15690 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
156a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d  >..    /// The m
156b0 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20  odule object to 
156c0 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 72 65  be used when cre
156d0 61 74 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65  ating the native
156e0 20 64 69 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75   disposable modu
156f0 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  le...    /// </p
15700 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
15710 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
15720 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
15730 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61   flags for the a
15740 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63  ssociated <see c
15750 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65  ref="SQLiteConne
15760 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74  ction" /> object
15770 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
15780 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
15790 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
157a0 69 64 65 20 76 6f 69 64 20 43 72 65 61 74 65 4d  ide void CreateM
157b0 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75  odule(SQLiteModu
157c0 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74  le module, SQLit
157d0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
157e0 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a   flags)..    {..
157f0 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
15800 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
15810 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
15820 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
15830 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65  xception("module
15840 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
15850 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  f (HelperMethods
15860 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65 28 66 6c 61  .NoLogModule(fla
15870 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  gs))..        {.
15880 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64  .            mod
15890 75 6c 65 2e 4c 6f 67 45 72 72 6f 72 73 20 3d 20  ule.LogErrors = 
158a0 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
158b0 67 4d 6f 64 75 6c 65 45 72 72 6f 72 28 66 6c 61  gModuleError(fla
158c0 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gs);..          
158d0 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 78 63 65    module.LogExce
158e0 70 74 69 6f 6e 73 20 3d 20 48 65 6c 70 65 72 4d  ptions = HelperM
158f0 65 74 68 6f 64 73 2e 4c 6f 67 4d 6f 64 75 6c 65  ethods.LogModule
15900 45 78 63 65 70 74 69 6f 6e 28 66 6c 61 67 73 29  Exception(flags)
15910 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
15920 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
15930 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15940 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
15950 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
15960 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  ("connection has
15970 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64   an invalid hand
15980 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le");....       
15990 20 62 6f 6f 6c 20 69 73 4c 6f 61 64 4e 65 65 64   bool isLoadNeed
159a0 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ed = false;..   
159b0 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
159c0 4e 61 6d 65 20 3d 20 47 65 74 53 68 69 6d 45 78  Name = GetShimEx
159d0 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61 6d 65 28  tensionFileName(
159e0 72 65 66 20 69 73 4c 6f 61 64 4e 65 65 64 65 64  ref isLoadNeeded
159f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
15a00 20 28 69 73 4c 6f 61 64 4e 65 65 64 65 64 29 0d   (isLoadNeeded).
15a10 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
15a20 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c 65          if (file
15a30 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
15a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15a50 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
15a60 78 63 65 70 74 69 6f 6e 28 22 74 68 65 20 66 69  xception("the fi
15a70 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  le name for the 
15a80 5c 22 76 74 73 68 69 6d 5c 22 20 65 78 74 65 6e  \"vtshim\" exten
15a90 73 69 6f 6e 20 69 73 20 75 6e 6b 6e 6f 77 6e 22  sion is unknown"
15aa0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15ab0 20 20 69 66 20 28 5f 73 68 69 6d 45 78 74 65 6e    if (_shimExten
15ac0 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 20 3d 3d 20  sionProcName == 
15ad0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15ae0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
15af0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
15b00 28 22 74 68 65 20 65 6e 74 72 79 20 70 6f 69 6e  ("the entry poin
15b10 74 20 66 6f 72 20 74 68 65 20 5c 22 76 74 73 68  t for the \"vtsh
15b20 69 6d 5c 22 20 65 78 74 65 6e 73 69 6f 6e 20 69  im\" extension i
15b30 73 20 75 6e 6b 6e 6f 77 6e 22 29 3b 0d 0a 0d 0a  s unknown");....
15b40 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 4c              SetL
15b50 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 74 72 75  oadExtension(tru
15b60 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
15b70 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 66   LoadExtension(f
15b80 69 6c 65 4e 61 6d 65 2c 20 5f 73 68 69 6d 45 78  ileName, _shimEx
15b90 74 65 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 29  tensionProcName)
15ba0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
15bb0 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
15bc0 6c 65 2e 43 72 65 61 74 65 44 69 73 70 6f 73 61  le.CreateDisposa
15bd0 62 6c 65 4d 6f 64 75 6c 65 28 5f 73 71 6c 29 29  bleModule(_sql))
15be0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
15bf0 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d 6f           if (_mo
15c00 64 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  dules == null)..
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 5f 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20 44  _modules = new D
15c30 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
15c40 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 28  , SQLiteModule>(
15c50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15c60 20 20 5f 6d 6f 64 75 6c 65 73 2e 41 64 64 28 6d    _modules.Add(m
15c70 6f 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64 75  odule.Name, modu
15c80 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le);....        
15c90 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f 6c      if (_usePool
15ca0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
15cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15cc0 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c    _usePool = fal
15cd0 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f  se;....#if !NET_
15ce0 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
15cf0 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
15d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d10 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
15d20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
15d30 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d50 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
15d60 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 22 43 72 65 61 74 65 4d 6f 64 75 6c 65 20    "CreateModule 
15d90 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65 64 3a  (Pool) Disabled:
15da0 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
15db0 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64              Hand
15dc0 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  leToString()));.
15dd0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
15de0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15df0 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
15e00 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
15e10 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
15e20 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
15e30 6e 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  n(GetLastError()
15e40 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
15e50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
15e60 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
15e70 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74  // Calls the nat
15e80 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  ive SQLite core 
15e90 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72  library in order
15ea0 20 74 6f 20 63 6c 65 61 6e 75 70 20 74 68 65 20   to cleanup the 
15eb0 72 65 73 6f 75 72 63 65 73 0d 0a 20 20 20 20 2f  resources..    /
15ec0 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  // associated wi
15ed0 74 68 20 61 20 6d 6f 64 75 6c 65 20 63 6f 6e 74  th a module cont
15ee0 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65  aining the imple
15ef0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76  mentation of a v
15f00 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
15f10 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
15f20 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
15f30 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e  m name="module">
15f40 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f  ..    /// The mo
15f50 64 75 6c 65 20 6f 62 6a 65 63 74 20 70 72 65 76  dule object prev
15f60 69 6f 75 73 6c 79 20 70 61 73 73 65 64 20 74 6f  iously passed to
15f70 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
15f80 43 72 65 61 74 65 4d 6f 64 75 6c 65 22 20 2f 3e  CreateModule" />
15f90 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64  ..    /// method
15fa0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
15fb0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
15fc0 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
15fd0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
15fe0 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73  lags for the ass
15ff0 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63 72 65  ociated <see cre
16000 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  f="SQLiteConnect
16010 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ion" /> object i
16020 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f  nstance...    //
16030 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16040 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
16050 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f  e void DisposeMo
16060 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c  dule(SQLiteModul
16070 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65  e module, SQLite
16080 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
16090 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20  flags)..    {.. 
160a0 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
160b0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
160c0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
160d0 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
160e0 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22  ception("module"
160f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6d 6f  );....        mo
16100 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d  dule.Dispose();.
16110 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
16120 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
16130 76 65 72 72 69 64 65 20 49 6e 74 50 74 72 20 41  verride IntPtr A
16140 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74 28  ggregateContext(
16150 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
16160 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
16170 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
16180 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
16190 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65  _aggregate_conte
161a0 78 74 28 63 6f 6e 74 65 78 74 2c 20 31 29 3b 0d  xt(context, 1);.
161b0 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e  .    }....#if IN
161c0 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
161d0 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  BLE..    /// <su
161e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
161f0 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65  Calls the native
16200 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
16210 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  rary in order to
16220 20 64 65 63 6c 61 72 65 20 61 20 76 69 72 74 75   declare a virtu
16230 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
16240 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  / in response to
16250 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65   a call into the
16260 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
16270 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
16280 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20  xCreate" />..   
16290 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72 65   /// or <see cre
162a0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
162b0 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22  Module.xConnect"
162c0 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c   /> virtual tabl
162d0 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20  e methods...    
162e0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
162f0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
16300 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
16310 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74 75     /// The virtu
16320 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20  al table module 
16330 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 72 65  that is to be re
16340 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68  sponsible for th
16350 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  e virtual table.
16360 0a 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20 64  .    /// being d
16370 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  eclared...    //
16380 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16390 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
163a0 22 73 74 72 53 71 6c 22 3e 0d 0a 20 20 20 20 2f  "strSql">..    /
163b0 2f 2f 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  // The string co
163c0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c  ntaining the SQL
163d0 20 73 74 61 74 65 6d 65 6e 74 20 64 65 73 63 72   statement descr
163e0 69 62 69 6e 67 20 74 68 65 20 76 69 72 74 75 61  ibing the virtua
163f0 6c 20 74 61 62 6c 65 20 74 6f 0d 0a 20 20 20 20  l table to..    
16400 2f 2f 2f 20 62 65 20 64 65 63 6c 61 72 65 64 2e  /// be declared.
16410 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
16420 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
16430 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e  am name="error">
16440 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73  ..    /// Upon s
16450 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74  uccess, the cont
16460 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61 72  ents of this par
16470 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65 66  ameter are undef
16480 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c  ined.  Upon fail
16490 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74  ure,..    /// it
164a0 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20   should contain 
164b0 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 65  an appropriate e
164c0 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20  rror message... 
164d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
164e0 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
164f0 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74  s>..    /// A st
16500 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
16510 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
16520 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
16530 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
16540 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
16550 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72  rCode DeclareVir
16560 74 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20  tualTable(..    
16570 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65      SQLiteModule
16580 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20   module,..      
16590 20 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c    string strSql,
165a0 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74  ..        ref st
165b0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
165c0 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
165d0 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
165e0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
165f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16600 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74  error = "connect
16610 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
16620 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20  id handle";..   
16630 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16640 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
16650 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
16660 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  }....        Int
16670 50 74 72 20 70 53 71 6c 20 3d 20 49 6e 74 50 74  Ptr pSql = IntPt
16680 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
16690 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
166a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
166b0 53 71 6c 20 3d 20 53 51 4c 69 74 65 53 74 72 69  Sql = SQLiteStri
166c0 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f  ng.Utf8IntPtrFro
166d0 6d 53 74 72 69 6e 67 28 73 74 72 53 71 6c 29 3b  mString(strSql);
166e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
166f0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
16700 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
16710 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16720 64 65 63 6c 61 72 65 5f 76 74 61 62 28 0d 0a 20  declare_vtab(.. 
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
16740 73 71 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a 20  sql, pSql);.... 
16750 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
16760 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
16770 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6d 6f 64  Code.Ok) && (mod
16780 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ule != null)).. 
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
167a0 6f 64 75 6c 65 2e 44 65 63 6c 61 72 65 64 20 3d  odule.Declared =
167b0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
167c0 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
167d0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
167e0 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c 61  k) error = GetLa
167f0 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20  stError();....  
16800 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16810 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   n;..        }..
16820 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
16830 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
16840 20 20 20 20 20 20 20 20 69 66 20 28 70 53 71 6c          if (pSql
16850 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
16860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
16870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16880 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72   SQLiteMemory.Fr
16890 65 65 28 70 53 71 6c 29 3b 0d 0a 20 20 20 20 20  ee(pSql);..     
168a0 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20             pSql 
168b0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
168c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
168d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
168e0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
168f0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
16900 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
16910 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
16920 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64  ry in order to d
16930 65 63 6c 61 72 65 20 61 20 76 69 72 74 75 61 6c  eclare a virtual
16940 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20   table..    /// 
16950 66 75 6e 63 74 69 6f 6e 20 69 6e 20 72 65 73 70  function in resp
16960 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69  onse to a call i
16970 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65  nto the <see cre
16980 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
16990 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20  Module.xCreate" 
169a0 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c  />..    /// or <
169b0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
169c0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
169d0 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75  onnect" /> virtu
169e0 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73  al table methods
169f0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
16a00 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
16a10 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75  param name="modu
16a20 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  le">..    /// Th
16a30 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
16a40 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20 74  module that is t
16a50 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65  o be responsible
16a60 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c   for the virtual
16a70 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20   table..    /// 
16a80 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64  function being d
16a90 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f  eclared...    //
16aa0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16ab0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
16ac0 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e  "argumentCount">
16ad0 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  ..    /// The nu
16ae0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
16af0 73 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f  s to the functio
16b00 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64  n being declared
16b10 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
16b20 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
16b30 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e  ram name="name">
16b40 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
16b50 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
16b60 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65  on being declare
16b70 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
16b80 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
16b90 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72  aram name="error
16ba0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e  ">..    /// Upon
16bb0 20 73 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f   success, the co
16bc0 6e 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70  ntents of this p
16bd0 61 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64  arameter are und
16be0 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61  efined.  Upon fa
16bf0 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20  ilure,..    /// 
16c00 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69  it should contai
16c10 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  n an appropriate
16c20 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d   error message..
16c30 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
16c40 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
16c50 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
16c60 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
16c70 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
16c80 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
16c90 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
16ca0 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
16cb0 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56  rorCode DeclareV
16cc0 69 72 74 75 61 6c 46 75 6e 63 74 69 6f 6e 28 0d  irtualFunction(.
16cd0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d  .        SQLiteM
16ce0 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20  odule module,.. 
16cf0 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d         int argum
16d00 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  entCount,..     
16d10 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
16d20 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72  .        ref str
16d30 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
16d40 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
16d50 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d       if (_sql ==
16d60 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
16d70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  {..            e
16d80 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74 69  rror = "connecti
16d90 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
16da0 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20 20  d handle";..    
16db0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
16dc0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
16dd0 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
16de0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
16df0 74 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74  tr pName = IntPt
16e00 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
16e10 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
16e20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
16e30 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74 72  Name = SQLiteStr
16e40 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
16e50 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29 3b 0d  omString(name);.
16e60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
16e70 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
16e80 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
16e90 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f  ethods.sqlite3_o
16ea0 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f 6e  verload_function
16eb0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16ec0 20 20 20 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c 20     _sql, pName, 
16ed0 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 3b 0d  argumentCount);.
16ee0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
16ef0 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
16f00 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72 6f  rorCode.Ok) erro
16f10 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f 72  r = GetLastError
16f20 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
16f30 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20     return n;..  
16f40 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16f50 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
16f60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16f70 20 69 66 20 28 70 4e 61 6d 65 20 21 3d 20 49 6e   if (pName != In
16f80 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
16f90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16fa0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
16fb0 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 4e 61  eMemory.Free(pNa
16fc0 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
16fd0 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 49 6e        pName = In
16fe0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
16ff0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17000 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e     }..    }..#en
17010 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  dif....    /// <
17020 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
17030 2f 20 42 75 69 6c 64 73 20 61 6e 20 65 72 72 6f  / Builds an erro
17040 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
17050 20 66 72 61 67 6d 65 6e 74 20 63 6f 6e 74 61 69   fragment contai
17060 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 2f 2f  ning the..    //
17070 2f 20 64 65 66 69 6e 65 64 20 76 61 6c 75 65 73  / defined values
17080 20 6f 66 20 74 68 65 20 3c 73 65 65 20 63 72 65   of the <see cre
17090 66 3d 22 53 51 4c 69 74 65 53 74 61 74 75 73 4f  f="SQLiteStatusO
170a0 70 73 45 6e 75 6d 22 20 2f 3e 0d 0a 20 20 20 20  psEnum" />..    
170b0 2f 2f 2f 20 65 6e 75 6d 65 72 61 74 69 6f 6e 2e  /// enumeration.
170c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
170d0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
170e0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
170f0 20 54 68 65 20 62 75 69 6c 74 20 73 74 72 69 6e   The built strin
17100 67 20 66 72 61 67 6d 65 6e 74 2e 0d 0a 20 20 20  g fragment...   
17110 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
17120 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
17130 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53 74  tic string GetSt
17140 61 74 75 73 44 62 4f 70 73 4e 61 6d 65 73 28 29  atusDbOpsNames()
17150 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
17160 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 62   StringBuilder b
17170 75 69 6c 64 65 72 20 3d 20 6e 65 77 20 53 74 72  uilder = new Str
17180 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d  ingBuilder();...
17190 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
171a0 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
171b0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
171c0 20 28 73 74 72 69 6e 67 20 6e 61 6d 65 20 69 6e   (string name in
171d0 20 45 6e 75 6d 2e 47 65 74 4e 61 6d 65 73 28 0d   Enum.GetNames(.
171e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
171f0 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 53 74   typeof(SQLiteSt
17200 61 74 75 73 4f 70 73 45 6e 75 6d 29 29 29 0d 0a  atusOpsEnum)))..
17210 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17220 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
17230 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
17240 6e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  name))..        
17250 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
17260 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17270 20 69 66 20 28 62 75 69 6c 64 65 72 2e 4c 65 6e   if (builder.Len
17280 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
17290 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65            builde
172a0 72 2e 41 70 70 65 6e 64 28 22 2c 20 22 29 3b 0d  r.Append(", ");.
172b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ...            b
172c0 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 6e 61  uilder.Append(na
172d0 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  me);..        }.
172e0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
172f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 54  //..        // T
17300 4f 44 4f 3a 20 55 70 64 61 74 65 20 74 68 69 73  ODO: Update this
17310 20 6c 69 73 74 20 69 66 20 74 68 65 20 61 76 61   list if the ava
17320 69 6c 61 62 6c 65 20 76 61 6c 75 65 73 20 69 6e  ilable values in
17330 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
17340 20 20 20 20 20 20 20 22 53 51 4c 69 74 65 43 6f         "SQLiteCo
17350 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 22 20 65  nfigDbOpsEnum" e
17360 6e 75 6d 65 72 61 74 69 6f 6e 20 63 68 61 6e 67  numeration chang
17370 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  e...        //..
17380 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
17390 41 70 70 65 6e 64 46 6f 72 6d 61 74 28 43 75 6c  AppendFormat(Cul
173a0 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
173b0 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
173c0 20 20 20 20 20 20 20 20 22 7b 30 7d 2c 20 7b 31          "{0}, {1
173d0 7d 2c 20 7b 32 7d 2c 20 7b 33 7d 2c 20 7b 34 7d  }, {2}, {3}, {4}
173e0 2c 20 7b 35 7d 2c 20 7b 36 7d 2c 20 7b 37 7d 2c  , {5}, {6}, {7},
173f0 20 7b 38 7d 2c 20 7b 39 7d 2c 20 7b 31 30 7d 2c   {8}, {9}, {10},
17400 20 7b 31 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20   {11}",..       
17410 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 75       SQLiteStatu
17420 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  sOpsEnum.SQLITE_
17430 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49  DBSTATUS_LOOKASI
17440 44 45 5f 55 53 45 44 2c 0d 0a 20 20 20 20 20 20  DE_USED,..      
17450 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
17460 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45  usOpsEnum.SQLITE
17470 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
17480 55 53 45 44 2c 0d 0a 20 20 20 20 20 20 20 20 20  USED,..         
17490 20 20 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f     SQLiteStatusO
174a0 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
174b0 53 54 41 54 55 53 5f 53 43 48 45 4d 41 5f 55 53  STATUS_SCHEMA_US
174c0 45 44 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ED,..           
174d0 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73   SQLiteStatusOps
174e0 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54  Enum.SQLITE_DBST
174f0 41 54 55 53 5f 53 54 4d 54 5f 55 53 45 44 2c 0d  ATUS_STMT_USED,.
17500 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
17510 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d  iteStatusOpsEnum
17520 2e 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53  .SQLITE_DBSTATUS
17530 5f 4c 4f 4f 4b 41 53 49 44 45 5f 48 49 54 2c 0d  _LOOKASIDE_HIT,.
17540 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
17550 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d  iteStatusOpsEnum
17560 2e 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53  .SQLITE_DBSTATUS
17570 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53 5f  _LOOKASIDE_MISS_
17580 53 49 5a 45 2c 0d 0a 20 20 20 20 20 20 20 20 20  SIZE,..         
17590 20 20 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f     SQLiteStatusO
175a0 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
175b0 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45  STATUS_LOOKASIDE
175c0 5f 4d 49 53 53 5f 46 55 4c 4c 2c 0d 0a 20 20 20  _MISS_FULL,..   
175d0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53           SQLiteS
175e0 74 61 74 75 73 4f 70 73 45 6e 75 6d 2e 53 51 4c  tatusOpsEnum.SQL
175f0 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43  ITE_DBSTATUS_CAC
17600 48 45 5f 48 49 54 2c 0d 0a 20 20 20 20 20 20 20  HE_HIT,..       
17610 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 75       SQLiteStatu
17620 73 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  sOpsEnum.SQLITE_
17630 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f 4d  DBSTATUS_CACHE_M
17640 49 53 53 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ISS,..          
17650 20 20 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70    SQLiteStatusOp
17660 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53  sEnum.SQLITE_DBS
17670 54 41 54 55 53 5f 43 41 43 48 45 5f 57 52 49 54  TATUS_CACHE_WRIT
17680 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  E,..            
17690 53 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45  SQLiteStatusOpsE
176a0 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41  num.SQLITE_DBSTA
176b0 54 55 53 5f 44 45 46 45 52 52 45 44 5f 46 4b 53  TUS_DEFERRED_FKS
176c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ,..            S
176d0 51 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e  QLiteStatusOpsEn
176e0 75 6d 2e 53 51 4c 49 54 45 5f 44 42 53 54 41 54  um.SQLITE_DBSTAT
176f0 55 53 5f 43 41 43 48 45 5f 55 53 45 44 5f 53 48  US_CACHE_USED_SH
17700 41 52 45 44 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ARED);..#endif..
17710 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
17720 20 62 75 69 6c 64 65 72 2e 54 6f 53 74 72 69 6e   builder.ToStrin
17730 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  g();..    }.... 
17740 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
17750 0d 0a 20 20 20 20 2f 2f 2f 20 42 75 69 6c 64 73  ..    /// Builds
17760 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
17770 65 20 73 74 72 69 6e 67 20 66 72 61 67 6d 65 6e  e string fragmen
17780 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
17790 0d 0a 20 20 20 20 2f 2f 2f 20 64 65 66 69 6e 65  ..    /// define
177a0 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
177b0 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
177c0 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
177d0 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 65 6e  " />..    /// en
177e0 75 6d 65 72 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  umeration...    
177f0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
17800 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
17810 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 62  >..    /// The b
17820 75 69 6c 74 20 73 74 72 69 6e 67 20 66 72 61 67  uilt string frag
17830 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ment...    /// <
17840 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
17850 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
17860 72 69 6e 67 20 47 65 74 43 6f 6e 66 69 67 44 62  ring GetConfigDb
17870 4f 70 73 4e 61 6d 65 73 28 29 0d 0a 20 20 20 20  OpsNames()..    
17880 7b 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e  {..        Strin
17890 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72  gBuilder builder
178a0 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
178b0 6c 64 65 72 28 29 3b 0d 0a 0d 0a 23 69 66 20 21  lder();....#if !
178c0 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
178d0 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
178e0 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69     foreach (stri
178f0 6e 67 20 6e 61 6d 65 20 69 6e 20 45 6e 75 6d 2e  ng name in Enum.
17900 47 65 74 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20  GetNames(..     
17910 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
17920 66 28 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62  f(SQLiteConfigDb
17930 4f 70 73 45 6e 75 6d 29 29 29 0d 0a 20 20 20 20  OpsEnum)))..    
17940 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17950 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
17960 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6e 61 6d 65  NullOrEmpty(name
17970 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
17980 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
17990 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
179a0 28 62 75 69 6c 64 65 72 2e 4c 65 6e 67 74 68 20  (builder.Length 
179b0 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
179c0 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
179d0 70 65 6e 64 28 22 2c 20 22 29 3b 0d 0a 0d 0a 20  pend(", ");.... 
179e0 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64             build
179f0 65 72 2e 41 70 70 65 6e 64 28 6e 61 6d 65 29 3b  er.Append(name);
17a00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6c  ..        }..#el
17a10 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  se..        //..
17a20 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a          // TODO:
17a30 20 55 70 64 61 74 65 20 74 68 69 73 20 6c 69 73   Update this lis
17a40 74 20 69 66 20 74 68 65 20 61 76 61 69 6c 61 62  t if the availab
17a50 6c 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  le values in the
17a60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
17a70 20 20 20 22 53 51 4c 69 74 65 43 6f 6e 66 69 67     "SQLiteConfig
17a80 44 62 4f 70 73 45 6e 75 6d 22 20 65 6e 75 6d 65  DbOpsEnum" enume
17a90 72 61 74 69 6f 6e 20 63 68 61 6e 67 65 2e 0d 0a  ration change...
17aa0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
17ab0 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65      builder.Appe
17ac0 6e 64 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65  ndFormat(Culture
17ad0 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
17ae0 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
17af0 20 20 20 20 22 7b 30 7d 2c 20 7b 31 7d 2c 20 7b      "{0}, {1}, {
17b00 32 7d 2c 20 7b 33 7d 2c 20 7b 34 7d 2c 20 7b 35  2}, {3}, {4}, {5
17b10 7d 2c 20 7b 36 7d 2c 20 7b 37 7d 2c 20 7b 38 7d  }, {6}, {7}, {8}
17b20 2c 20 7b 39 7d 22 2c 0d 0a 20 20 20 20 20 20 20  , {9}",..       
17b30 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
17b40 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54  gDbOpsEnum.SQLIT
17b50 45 5f 44 42 43 4f 4e 46 49 47 5f 4e 4f 4e 45 2c  E_DBCONFIG_NONE,
17b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
17b70 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
17b80 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
17b90 46 49 47 5f 4d 41 49 4e 44 42 4e 41 4d 45 2c 0d  FIG_MAINDBNAME,.
17ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
17bb0 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e  iteConfigDbOpsEn
17bc0 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46  um.SQLITE_DBCONF
17bd0 49 47 5f 4c 4f 4f 4b 41 53 49 44 45 2c 0d 0a 20  IG_LOOKASIDE,.. 
17be0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
17bf0 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
17c00 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47  .SQLITE_DBCONFIG
17c10 5f 45 4e 41 42 4c 45 5f 46 4b 45 59 2c 0d 0a 20  _ENABLE_FKEY,.. 
17c20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
17c30 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d  eConfigDbOpsEnum
17c40 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47  .SQLITE_DBCONFIG
17c50 5f 45 4e 41 42 4c 45 5f 54 52 49 47 47 45 52 2c  _ENABLE_TRIGGER,
17c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
17c70 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
17c80 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
17c90 46 49 47 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f  FIG_ENABLE_FTS3_
17ca0 54 4f 4b 45 4e 49 5a 45 52 2c 0d 0a 20 20 20 20  TOKENIZER,..    
17cb0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
17cc0 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51  nfigDbOpsEnum.SQ
17cd0 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e  LITE_DBCONFIG_EN
17ce0 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  ABLE_LOAD_EXTENS
17cf0 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ION,..          
17d00 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62    SQLiteConfigDb
17d10 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44  OpsEnum.SQLITE_D
17d20 42 43 4f 4e 46 49 47 5f 4e 4f 5f 43 4b 50 54 5f  BCONFIG_NO_CKPT_
17d30 4f 4e 5f 43 4c 4f 53 45 2c 0d 0a 20 20 20 20 20  ON_CLOSE,..     
17d40 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
17d50 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
17d60 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41  ITE_DBCONFIG_ENA
17d70 42 4c 45 5f 51 50 53 47 2c 0d 0a 20 20 20 20 20  BLE_QPSG,..     
17d80 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
17d90 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
17da0 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 54 52 49  ITE_DBCONFIG_TRI
17db0 47 47 45 52 5f 45 51 50 29 3b 0d 0a 23 65 6e 64  GGER_EQP);..#end
17dc0 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  if....        re
17dd0 74 75 72 6e 20 62 75 69 6c 64 65 72 2e 54 6f 53  turn builder.ToS
17de0 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d  tring();..    }.
17df0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
17e00 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
17e10 74 75 72 6e 73 20 74 68 65 20 63 75 72 72 65 6e  turns the curren
17e20 74 20 61 6e 64 2f 6f 72 20 68 69 67 68 77 61 74  t and/or highwat
17e30 65 72 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  er values for th
17e40 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20  e specified..   
17e50 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 73 74   /// database st
17e60 61 74 75 73 20 70 61 72 61 6d 65 74 65 72 2e 0d  atus parameter..
17e70 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
17e80 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
17e90 72 61 6d 20 6e 61 6d 65 3d 22 6f 70 74 69 6f 6e  ram name="option
17ea0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
17eb0 64 61 74 61 62 61 73 65 20 73 74 61 74 75 73 20  database status 
17ec0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 71 75 65  parameter to que
17ed0 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ry...    /// </p
17ee0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
17ef0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65  param name="rese
17f00 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  t">..    /// Non
17f10 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65 74 20 74  -zero to reset t
17f20 68 65 20 68 69 67 68 77 61 74 65 72 20 76 61 6c  he highwater val
17f30 75 65 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  ue to the curren
17f40 74 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f  t value...    //
17f50 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
17f60 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
17f70 22 63 75 72 72 65 6e 74 22 3e 0d 0a 20 20 20 20  "current">..    
17f80 2f 2f 2f 20 49 66 20 61 70 70 6c 69 63 61 62 6c  /// If applicabl
17f90 65 2c 20 72 65 63 65 69 76 65 73 20 74 68 65 20  e, receives the 
17fa0 63 75 72 72 65 6e 74 20 76 61 6c 75 65 2e 0d 0a  current value...
17fb0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
17fc0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
17fd0 20 6e 61 6d 65 3d 22 68 69 67 68 77 61 74 65 72   name="highwater
17fe0 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 61  ">..    /// If a
17ff0 70 70 6c 69 63 61 62 6c 65 2c 20 72 65 63 65 69  pplicable, recei
18000 76 65 73 20 74 68 65 20 68 69 67 68 77 61 74 65  ves the highwate
18010 72 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f  r value...    //
18020 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
18030 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
18040 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
18050 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
18060 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
18070 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
18080 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
18090 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
180a0 20 47 65 74 53 74 61 74 75 73 50 61 72 61 6d 65   GetStatusParame
180b0 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ter(..        SQ
180c0 4c 69 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75  LiteStatusOpsEnu
180d0 6d 20 6f 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  m option,..     
180e0 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a     bool reset,..
180f0 20 20 20 20 20 20 20 20 72 65 66 20 69 6e 74 20          ref int 
18100 63 75 72 72 65 6e 74 2c 0d 0a 20 20 20 20 20 20  current,..      
18110 20 20 72 65 66 20 69 6e 74 20 68 69 67 68 77 61    ref int highwa
18120 74 65 72 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ter..        )..
18130 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
18140 66 20 28 21 45 6e 75 6d 2e 49 73 44 65 66 69 6e  f (!Enum.IsDefin
18150 65 64 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65  ed(typeof(SQLite
18160 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 29 2c 20  StatusOpsEnum), 
18170 6f 70 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  option))..      
18180 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18190 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
181a0 65 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65  eException(Helpe
181b0 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
181c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
181d0 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
181e0 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
181f0 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
18200 20 20 20 20 20 22 75 6e 72 65 63 6f 67 6e 69 7a       "unrecogniz
18210 65 64 20 73 74 61 74 75 73 20 6f 70 74 69 6f 6e  ed status option
18220 2c 20 6d 75 73 74 20 62 65 3a 20 7b 30 7d 22 2c  , must be: {0}",
18230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18240 20 20 47 65 74 53 74 61 74 75 73 44 62 4f 70 73    GetStatusDbOps
18250 4e 61 6d 65 73 28 29 29 29 3b 0d 0a 20 20 20 20  Names()));..    
18260 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18270 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
18280 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
18290 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 0d 0a  te3_db_status(..
182a0 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
182b0 2c 20 6f 70 74 69 6f 6e 2c 20 72 65 66 20 63 75  , option, ref cu
182c0 72 72 65 6e 74 2c 20 72 65 66 20 68 69 67 68 77  rrent, ref highw
182d0 61 74 65 72 2c 20 72 65 73 65 74 20 3f 20 31 20  ater, reset ? 1 
182e0 3a 20 30 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  : 0);..    }....
182f0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
18300 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 68 61 6e 67  >..    /// Chang
18310 65 20 61 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e a configuratio
18320 6e 20 6f 70 74 69 6f 6e 20 76 61 6c 75 65 20 66  n option value f
18330 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  or the database.
18340 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63  ..    /// connec
18350 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
18360 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
18370 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
18380 6f 70 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f  option">..    //
18390 2f 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  / The database c
183a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
183b0 69 6f 6e 20 74 6f 20 63 68 61 6e 67 65 2e 0d 0a  ion to change...
183c0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
183d0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
183e0 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a   name="value">..
183f0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20      /// The new 
18400 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 73 70  value for the sp
18410 65 63 69 66 69 65 64 20 63 6f 6e 66 69 67 75 72  ecified configur
18420 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 2e 0d 0a 20  ation option... 
18430 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
18440 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
18450 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74  s>..    /// A st
18460 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
18470 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
18480 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
18490 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
184a0 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
184b0 72 43 6f 64 65 20 53 65 74 43 6f 6e 66 69 67 75  rCode SetConfigu
184c0 72 61 74 69 6f 6e 4f 70 74 69 6f 6e 28 0d 0a 20  rationOption(.. 
184d0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
184e0 66 69 67 44 62 4f 70 73 45 6e 75 6d 20 6f 70 74  figDbOpsEnum opt
184f0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 6f 62  ion,..        ob
18500 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20  ject value..    
18510 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
18520 20 20 20 20 20 20 69 66 20 28 21 45 6e 75 6d 2e        if (!Enum.
18530 49 73 44 65 66 69 6e 65 64 28 74 79 70 65 6f 66  IsDefined(typeof
18540 28 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f  (SQLiteConfigDbO
18550 70 73 45 6e 75 6d 29 2c 20 6f 70 74 69 6f 6e 29  psEnum), option)
18560 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
18570 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
18580 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
18590 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ion(HelperMethod
185a0 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
185b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
185c0 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
185d0 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
185e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75                "u
185f0 6e 72 65 63 6f 67 6e 69 7a 65 64 20 63 6f 6e 66  nrecognized conf
18600 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
18610 2c 20 6d 75 73 74 20 62 65 3a 20 7b 30 7d 22 2c  , must be: {0}",
18620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18630 20 20 47 65 74 43 6f 6e 66 69 67 44 62 4f 70 73    GetConfigDbOps
18640 4e 61 6d 65 73 28 29 29 29 3b 0d 0a 20 20 20 20  Names()));..    
18650 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18660 20 73 77 69 74 63 68 20 28 6f 70 74 69 6f 6e 29   switch (option)
18670 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
18680 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
18690 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
186a0 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
186b0 46 49 47 5f 4e 4f 4e 45 3a 20 2f 2f 20 6e 69 6c  FIG_NONE: // nil
186c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
186d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
186e0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f 20 6e 6f 74   // NOTE: Do not
18710 68 69 6e 67 2c 20 72 65 74 75 72 6e 20 73 75 63  hing, return suc
18720 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
18730 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
18760 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20  ErrorCode.Ok;.. 
18770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
18790 73 65 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44  se SQLiteConfigD
187a0 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  bOpsEnum.SQLITE_
187b0 44 42 43 4f 4e 46 49 47 5f 4d 41 49 4e 44 42 4e  DBCONFIG_MAINDBN
187c0 41 4d 45 3a 20 2f 2f 20 63 68 61 72 2a 0d 0a 20  AME: // char*.. 
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
187e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
187f0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
18800 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18820 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
18830 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
18840 6e 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  n("value");.... 
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69     if (!(value i
18870 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20  s string))..    
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18890 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
188a0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
188b0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
188c0 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f  tion(HelperMetho
188d0 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
188e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
18900 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
18910 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72         "configur
18940 61 74 69 6f 6e 20 76 61 6c 75 65 20 74 79 70 65  ation value type
18950 20 6d 69 73 6d 61 74 63 68 2c 20 6d 75 73 74 20   mismatch, must 
18960 62 65 20 6f 66 20 74 79 70 65 20 7b 30 7d 22 2c  be of type {0}",
18970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
18990 70 65 6f 66 28 73 74 72 69 6e 67 29 29 29 3b 0d  peof(string)));.
189a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
189b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
189d0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
189e0 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f   = SQLiteErrorCo
189f0 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
18a10 6e 74 50 74 72 20 70 44 62 4e 61 6d 65 20 3d 20  ntPtr pDbName = 
18a20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a40 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a70 20 20 20 20 20 20 20 20 70 44 62 4e 61 6d 65 20          pDbName 
18a80 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
18a90 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
18aa0 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ing(..          
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ac0 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 29    (string)value)
18ad0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18af0 28 70 44 62 4e 61 6d 65 20 3d 3d 20 49 6e 74 50  (pDbName == IntP
18b00 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
18b50 65 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  eException(..   
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
18b80 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 4d  iteErrorCode.NoM
18b90 65 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  em,..           
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bb0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 61 6c 6c       "cannot all
18bc0 6f 63 61 74 65 20 64 61 74 61 62 61 73 65 20 6e  ocate database n
18bd0 61 6d 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame");..        
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
18c10 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
18c20 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62  thods.sqlite3_db
18c30 5f 63 6f 6e 66 69 67 5f 63 68 61 72 70 74 72 28  _config_charptr(
18c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
18c60 71 6c 2c 20 6f 70 74 69 6f 6e 2c 20 70 44 62 4e  ql, option, pDbN
18c70 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c90 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74   if (rc == SQLit
18ca0 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 20 20 20 20 20 20 20 46 72 65 65 44 62 4e 61 6d         FreeDbNam
18cf0 65 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20  e(true);....    
18d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d10 20 20 20 20 20 20 20 20 64 62 4e 61 6d 65 20 3d          dbName =
18d20 20 70 44 62 4e 61 6d 65 3b 0d 0a 20 20 20 20 20   pDbName;..     
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 20 20 20 20 20 20 70 44 62 4e 61 6d 65 20 3d         pDbName =
18d50 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18da0 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18de0 28 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72  ((rc != SQLiteEr
18df0 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 0d 0a  rorCode.Ok) &&..
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 20 20 20 20 20 20 28 70 44 62              (pDb
18e20 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  Name != IntPtr.Z
18e30 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ero))..         
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
18e70 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
18e80 70 44 62 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  pDbName);..     
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 20 20 20 20 70 44 62 4e 61 6d 65 20 3d         pDbName =
18eb0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18ef0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18f00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
18f10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18f20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
18f30 20 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e    case SQLiteCon
18f40 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
18f50 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4c 4f 4f  ITE_DBCONFIG_LOO
18f60 4b 41 53 49 44 45 3a 20 2f 2f 20 76 6f 69 64 2a  KASIDE: // void*
18f70 20 69 6e 74 20 69 6e 74 0d 0a 20 20 20 20 20 20   int int..      
18f80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fa0 20 6f 62 6a 65 63 74 5b 5d 20 61 72 72 61 79 20   object[] array 
18fb0 3d 20 76 61 6c 75 65 20 61 73 20 6f 62 6a 65 63  = value as objec
18fc0 74 5b 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t[];....        
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18fe0 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  array == null)..
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19020 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
19030 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d  xception(HelperM
19040 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
19050 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
19080 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
19090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190a0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66             "conf
190b0 69 67 75 72 61 74 69 6f 6e 20 76 61 6c 75 65 20  iguration value 
190c0 74 79 70 65 20 6d 69 73 6d 61 74 63 68 2c 20 6d  type mismatch, m
190d0 75 73 74 20 62 65 20 6f 66 20 74 79 70 65 20 7b  ust be of type {
190e0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74 5b    typeof(object[
19110 5d 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ])));..         
19120 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 20 69 66 20 28 21 28 61 72 72 61 79 5b      if (!(array[
19150 30 5d 20 69 73 20 49 6e 74 50 74 72 29 29 0d 0a  0] is IntPtr))..
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19170 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19190 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
191a0 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d  xception(HelperM
191b0 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
191c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191e0 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
191f0 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
19200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19210 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66             "conf
19220 69 67 75 72 61 74 69 6f 6e 20 65 6c 65 6d 65 6e  iguration elemen
19230 74 20 7a 65 72 6f 20 28 30 29 20 74 79 70 65 20  t zero (0) type 
19240 6d 69 73 6d 61 74 63 68 2c 20 6d 75 73 74 20 62  mismatch, must b
19250 65 20 6f 66 20 74 79 70 65 20 7b 30 7d 22 2c 0d  e of type {0}",.
19260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
19280 65 6f 66 28 49 6e 74 50 74 72 29 29 29 3b 0d 0a  eof(IntPtr)));..
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
192c0 28 21 28 61 72 72 61 79 5b 31 5d 20 69 73 20 69  (!(array[1] is i
192d0 6e 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nt))..          
192e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19300 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
19310 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 48  QLiteException(H
19320 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
19330 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
19360 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
19370 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19390 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   "configuration 
193a0 65 6c 65 6d 65 6e 74 20 6f 6e 65 20 28 31 29 20  element one (1) 
193b0 74 79 70 65 20 6d 69 73 6d 61 74 63 68 2c 20 6d  type mismatch, m
193c0 75 73 74 20 62 65 20 6f 66 20 74 79 70 65 20 7b  ust be of type {
193d0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 20 74 79 70 65 6f 66 28 69 6e 74 29 29 29 3b    typeof(int)));
19400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19410 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19430 66 20 28 21 28 61 72 72 61 79 5b 32 5d 20 69 73  f (!(array[2] is
19440 20 69 6e 74 29 29 0d 0a 20 20 20 20 20 20 20 20   int))..        
19450 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
19480 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
19490 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
194a0 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194c0 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
194d0 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
194e0 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19500 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f     "configuratio
19510 6e 20 65 6c 65 6d 65 6e 74 20 74 77 6f 20 28 32  n element two (2
19520 29 20 74 79 70 65 20 6d 69 73 6d 61 74 63 68 2c  ) type mismatch,
19530 20 6d 75 73 74 20 62 65 20 6f 66 20 74 79 70 65   must be of type
19540 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 20 20 20 20 74 79 70 65 6f 66 28 69 6e 74 29 29      typeof(int))
19570 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
19580 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195a0 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
195b0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
195c0 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 5f 69 6e  te3_db_config_in
195d0 74 70 74 72 5f 74 77 6f 5f 69 6e 74 73 28 0d 0a  tptr_two_ints(..
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195f0 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 6f 70          _sql, op
19600 74 69 6f 6e 2c 20 28 49 6e 74 50 74 72 29 61 72  tion, (IntPtr)ar
19610 72 61 79 5b 30 5d 2c 20 28 69 6e 74 29 61 72 72  ray[0], (int)arr
19620 61 79 5b 31 5d 2c 20 28 69 6e 74 29 61 72 72 61  ay[1], (int)arra
19630 79 5b 32 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20  y[2]);..        
19640 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19650 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
19660 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
19670 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  m.SQLITE_DBCONFI
19680 47 5f 45 4e 41 42 4c 45 5f 46 4b 45 59 3a 20 2f  G_ENABLE_FKEY: /
19690 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20  / int int*..    
196a0 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
196b0 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e  iteConfigDbOpsEn
196c0 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46  um.SQLITE_DBCONF
196d0 49 47 5f 45 4e 41 42 4c 45 5f 54 52 49 47 47 45  IG_ENABLE_TRIGGE
196e0 52 3a 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a  R: // int int*..
196f0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
19700 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f   SQLiteConfigDbO
19710 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
19720 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 46 54  CONFIG_ENABLE_FT
19730 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 3a 20 2f 2f  S3_TOKENIZER: //
19740 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20 20   int int*..     
19750 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
19760 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
19770 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  m.SQLITE_DBCONFI
19780 47 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58  G_ENABLE_LOAD_EX
19790 54 45 4e 53 49 4f 4e 3a 20 2f 2f 20 69 6e 74 20  TENSION: // int 
197a0 69 6e 74 2a 0d 0a 20 20 20 20 20 20 20 20 20 20  int*..          
197b0 20 20 63 61 73 65 20 53 51 4c 69 74 65 43 6f 6e    case SQLiteCon
197c0 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
197d0 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4e 4f 5f  ITE_DBCONFIG_NO_
197e0 43 4b 50 54 5f 4f 4e 5f 43 4c 4f 53 45 3a 20 2f  CKPT_ON_CLOSE: /
197f0 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 20 20  / int int*..    
19800 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
19810 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e  iteConfigDbOpsEn
19820 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46  um.SQLITE_DBCONF
19830 49 47 5f 45 4e 41 42 4c 45 5f 51 50 53 47 3a 20  IG_ENABLE_QPSG: 
19840 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 20  // int int*..   
19850 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
19860 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
19870 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
19880 46 49 47 5f 54 52 49 47 47 45 52 5f 45 51 50 3a  FIG_TRIGGER_EQP:
19890 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d 0a 20 20   // int int*..  
198a0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
198b0 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73  QLiteConfigDbOps
198c0 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f  Enum.SQLITE_DBCO
198d0 4e 46 49 47 5f 52 45 53 45 54 5f 44 41 54 41 42  NFIG_RESET_DATAB
198e0 41 53 45 3a 20 2f 2f 20 69 6e 74 20 69 6e 74 2a  ASE: // int int*
198f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19900 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19910 20 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76           if (!(v
19920 61 6c 75 65 20 69 73 20 62 6f 6f 6c 29 29 0d 0a  alue is bool))..
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19960 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
19970 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d  xception(HelperM
19980 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
19990 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199b0 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
199c0 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66             "conf
199f0 69 67 75 72 61 74 69 6f 6e 20 76 61 6c 75 65 20  iguration value 
19a00 74 79 70 65 20 6d 69 73 6d 61 74 63 68 2c 20 6d  type mismatch, m
19a10 75 73 74 20 62 65 20 6f 66 20 74 79 70 65 20 7b  ust be of type {
19a20 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a40 20 20 74 79 70 65 6f 66 28 62 6f 6f 6c 29 29 29    typeof(bool)))
19a50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19a60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a80 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30 3b 20  int result = 0; 
19a90 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a  /* NOT USED */..
19aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19ab0 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
19ac0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
19ad0 2e 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66  .sqlite3_db_conf
19ae0 69 67 5f 69 6e 74 5f 72 65 66 69 6e 74 28 0d 0a  ig_int_refint(..
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 6f 70          _sql, op
19b10 74 69 6f 6e 2c 20 28 28 62 6f 6f 6c 29 76 61 6c  tion, ((bool)val
19b20 75 65 20 3f 20 31 20 3a 20 30 29 2c 20 72 65 66  ue ? 1 : 0), ref
19b30 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20   result);..     
19b40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19b50 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
19b60 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t:..            
19b70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19b80 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
19b90 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
19ba0 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f  tion(HelperMetho
19bb0 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
19bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19bd0 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
19be0 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
19bf0 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19c10 75 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6e 66  unsupported conf
19c20 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
19c30 20 7b 30 7d 22 2c 20 6f 70 74 69 6f 6e 29 29 3b   {0}", option));
19c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19c50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
19c60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
19c70 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
19c80 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64  /// Enables or d
19c90 69 73 61 62 6c 65 73 20 65 78 74 65 6e 73 69 6f  isables extensio
19ca0 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20 53 51 4c  n loading by SQL
19cb0 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ite...    /// </
19cc0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
19cd0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
19ce0 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f  OnOff">..    ///
19cf0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
19d00 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78 74 65 6e  loading of exten
19d10 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20  sions, false to 
19d20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  disable...    //
19d30 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
19d40 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
19d50 65 20 76 6f 69 64 20 53 65 74 4c 6f 61 64 45 78  e void SetLoadEx
19d60 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e  tension(bool bOn
19d70 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Off)..    {..   
19d80 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
19d90 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20  Code n;....     
19da0 20 20 20 69 66 20 28 53 51 4c 69 74 65 56 65 72     if (SQLiteVer
19db0 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30  sionNumber >= 30
19dc0 31 33 30 30 30 29 0d 0a 20 20 20 20 20 20 20 20  13000)..        
19dd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
19de0 20 3d 20 53 65 74 43 6f 6e 66 69 67 75 72 61 74   = SetConfigurat
19df0 69 6f 6e 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20  ionOption(..    
19e00 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
19e10 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
19e20 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  m.SQLITE_DBCONFI
19e30 47 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58  G_ENABLE_LOAD_EX
19e40 54 45 4e 53 49 4f 4e 2c 0d 0a 20 20 20 20 20 20  TENSION,..      
19e50 20 20 20 20 20 20 20 20 20 20 62 4f 6e 4f 66 66            bOnOff
19e60 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
19e70 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
19e80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19e90 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
19ea0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
19eb0 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f  te3_enable_load_
19ec0 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20  extension(..    
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
19ee0 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a  , (bOnOff ? -1 :
19ef0 20 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d   0));..        }
19f00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
19f10 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
19f20 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) 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 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
19f50 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
19f60 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
19f70 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64  y>..    /// Load
19f80 73 20 61 20 53 51 4c 69 74 65 20 65 78 74 65 6e  s a SQLite exten
19f90 73 69 6f 6e 20 6c 69 62 72 61 72 79 20 66 72 6f  sion library fro
19fa0 6d 20 74 68 65 20 6e 61 6d 65 64 20 66 69 6c 65  m the named file
19fb0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
19fc0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
19fd0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65  param name="file
19fe0 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Name">..    /// 
19ff0 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
1a000 64 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62  dynamic link lib
1a010 72 61 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69  rary file contai
1a020 6e 69 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69  ning the extensi
1a030 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  on...    /// </p
1a040 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1a050 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63  param name="proc
1a060 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Name">..    /// 
1a070 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
1a080 65 78 70 6f 72 74 65 64 20 66 75 6e 63 74 69 6f  exported functio
1a090 6e 20 75 73 65 64 20 74 6f 20 69 6e 69 74 69 61  n used to initia
1a0a0 6c 69 7a 65 20 74 68 65 20 65 78 74 65 6e 73 69  lize the extensi
1a0b0 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20  on...    /// If 
1a0c0 6e 75 6c 6c 2c 20 74 68 65 20 64 65 66 61 75 6c  null, the defaul
1a0d0 74 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  t "sqlite3_exten
1a0e0 73 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20  sion_init" will 
1a0f0 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  be used...    //
1a100 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1a110 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1a120 65 20 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e  e void LoadExten
1a130 73 69 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c 65  sion(string file
1a140 4e 61 6d 65 2c 20 73 74 72 69 6e 67 20 70 72 6f  Name, string pro
1a150 63 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  cName)..    {.. 
1a160 20 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 4e         if (fileN
1a170 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
1a180 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1a190 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
1a1a0 45 78 63 65 70 74 69 6f 6e 28 22 66 69 6c 65 4e  Exception("fileN
1a1b0 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame");....      
1a1c0 20 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72 20    IntPtr pError 
1a1d0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
1a1e0 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
1a1f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a200 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66        byte[] utf
1a210 38 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46 38  8FileName = UTF8
1a220 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65  Encoding.UTF8.Ge
1a230 74 42 79 74 65 73 28 66 69 6c 65 4e 61 6d 65 20  tBytes(fileName 
1a240 2b 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20 20  + '\0');..      
1a250 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74 66        byte[] utf
1a260 38 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c 6c  8ProcName = null
1a270 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a280 20 69 66 20 28 70 72 6f 63 4e 61 6d 65 20 21 3d   if (procName !=
1a290 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1a2a0 20 20 20 20 20 20 20 20 75 74 66 38 50 72 6f 63          utf8Proc
1a2b0 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f 64  Name = UTF8Encod
1a2c0 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65  ing.UTF8.GetByte
1a2d0 73 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c 30  s(procName + '\0
1a2e0 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ');....         
1a2f0 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1a300 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
1a310 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1a320 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  e3_load_extensio
1a330 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1a340 20 20 20 20 5f 73 71 6c 2c 20 75 74 66 38 46 69      _sql, utf8Fi
1a350 6c 65 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f 63  leName, utf8Proc
1a360 4e 61 6d 65 2c 20 72 65 66 20 70 45 72 72 6f 72  Name, ref pError
1a370 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a380 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
1a390 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
1a3c0 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54 46  Exception(n, UTF
1a3d0 38 54 6f 53 74 72 69 6e 67 28 70 45 72 72 6f 72  8ToString(pError
1a3e0 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20  , -1));..       
1a3f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
1a400 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lly..        {..
1a410 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a420 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72  pError != IntPtr
1a430 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1a440 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a450 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
1a460 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1a470 65 33 5f 66 72 65 65 28 70 45 72 72 6f 72 29 3b  e3_free(pError);
1a480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a490 20 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74    pError = IntPt
1a4a0 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
1a4b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1a4c0 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
1a4d0 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64  /// Enables or d
1a4e0 69 73 61 62 6c 65 73 20 65 78 74 65 6e 64 65 64  isables extended
1a4f0 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65   result codes re
1a500 74 75 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65  turned by SQLite
1a510 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1a520 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
1a530 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f  ExtendedResultCo
1a540 64 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29  des(bool bOnOff)
1a550 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
1a560 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
1a570 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
1a580 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
1a590 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63  xtended_result_c
1a5a0 6f 64 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  odes(..         
1a5b0 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f   _sql, (bOnOff ?
1a5c0 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20 20   -1 : 0));....  
1a5d0 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
1a5e0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
1a5f0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
1a600 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
1a610 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
1a620 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 47      }..    /// G
1a630 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51 4c  ets the last SQL
1a640 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a  ite error code..
1a650 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1a660 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
1a670 72 43 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65  rCode ResultCode
1a680 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
1a690 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
1a6a0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1a6b0 74 65 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c  te3_errcode(_sql
1a6c0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f  );..    }..    /
1a6d0 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74  // Gets the last
1a6e0 20 53 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64   SQLite extended
1a6f0 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20   error code..   
1a700 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1a710 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
1a720 64 65 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c  de ExtendedResul
1a730 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a  tCode()..    {..
1a740 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
1a750 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1a760 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65  .sqlite3_extende
1a770 64 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29 3b  d_errcode(_sql);
1a780 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1a790 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73  // Add a log mes
1a7a0 73 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c  sage via the SQL
1a7b0 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20  ite sqlite3_log 
1a7c0 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20  interface...    
1a7d0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1a7e0 65 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67  e void LogMessag
1a7f0 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e(SQLiteErrorCod
1a800 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69  e iErrCode, stri
1a810 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20 20  ng zMessage)..  
1a820 20 20 7b 0d 0a 20 20 20 20 20 20 53 74 61 74 69    {..      Stati
1a830 63 4c 6f 67 4d 65 73 73 61 67 65 28 69 45 72 72  cLogMessage(iErr
1a840 43 6f 64 65 2c 20 7a 4d 65 73 73 61 67 65 29 3b  Code, zMessage);
1a850 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1a860 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73  // Add a log mes
1a870 73 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c  sage via the SQL
1a880 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20  ite sqlite3_log 
1a890 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20  interface...    
1a8a0 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
1a8b0 76 6f 69 64 20 53 74 61 74 69 63 4c 6f 67 4d 65  void StaticLogMe
1a8c0 73 73 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f  ssage(SQLiteErro
1a8d0 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20  rCode iErrCode, 
1a8e0 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29  string zMessage)
1a8f0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
1a900 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1a910 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69  ds.sqlite3_log(i
1a920 45 72 72 43 6f 64 65 2c 20 54 6f 55 54 46 38 28  ErrCode, ToUTF8(
1a930 7a 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20  zMessage));..   
1a940 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f   }....#if INTERO
1a950 50 5f 43 4f 44 45 43 20 7c 7c 20 49 4e 54 45 52  P_CODEC || INTER
1a960 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 0d 0a  OP_INCLUDE_SEE..
1a970 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1a980 69 63 20 76 6f 69 64 20 5a 65 72 6f 50 61 73 73  ic void ZeroPass
1a990 77 6f 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73  word(byte[] pass
1a9a0 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20  wordBytes)..    
1a9b0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 70  {..        if (p
1a9c0 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d 3d 20  asswordBytes == 
1a9d0 6e 75 6c 6c 29 20 72 65 74 75 72 6e 3b 0d 0a 0d  null) return;...
1a9e0 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e  .        for (in
1a9f0 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
1aa00 65 78 20 3c 20 70 61 73 73 77 6f 72 64 42 79 74  ex < passwordByt
1aa10 65 73 2e 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78  es.Length; index
1aa20 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ++)..        {..
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
1aa40 20 76 61 6c 75 65 20 3d 20 28 62 79 74 65 29 28   value = (byte)(
1aa50 28 69 6e 64 65 78 20 2b 20 31 29 20 25 20 62 79  (index + 1) % by
1aa60 74 65 2e 4d 61 78 56 61 6c 75 65 29 3b 0d 0a 0d  te.MaxValue);...
1aa70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 73  .            pas
1aa80 73 77 6f 72 64 42 79 74 65 73 5b 69 6e 64 65 78  swordBytes[index
1aa90 5d 20 3d 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ] = value;..    
1aaa0 20 20 20 20 20 20 20 20 70 61 73 73 77 6f 72 64          password
1aab0 42 79 74 65 73 5b 69 6e 64 65 78 5d 20 5e 3d 20  Bytes[index] ^= 
1aac0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
1aad0 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
1aae0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
1aaf0 65 20 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f  e void SetPasswo
1ab00 72 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f  rd(byte[] passwo
1ab10 72 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d  rdBytes)..    {.
1ab20 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
1ab30 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
1ab40 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1ab50 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c 2c  qlite3_key(_sql,
1ab60 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c 20   passwordBytes, 
1ab70 70 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65  passwordBytes.Le
1ab80 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ngth);....      
1ab90 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
1aba0 73 2e 48 61 73 46 6c 61 67 73 28 5f 66 6c 61 67  s.HasFlags(_flag
1abb0 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  s, SQLiteConnect
1abc0 69 6f 6e 46 6c 61 67 73 2e 48 69 64 65 50 61 73  ionFlags.HidePas
1abd0 73 77 6f 72 64 29 29 0d 0a 20 20 20 20 20 20 20  sword))..       
1abe0 20 5a 65 72 6f 50 61 73 73 77 6f 72 64 28 70 61   ZeroPassword(pa
1abf0 73 73 77 6f 72 64 42 79 74 65 73 29 3b 0d 0a 0d  sswordBytes);...
1ac00 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
1ac10 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
1ac20 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
1ac30 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
1ac40 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
1ac50 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  ;....      if (_
1ac60 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20  usePool)..      
1ac70 7b 0d 0a 20 20 20 20 20 20 20 20 5f 75 73 65 50  {..        _useP
1ac80 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ool = false;....
1ac90 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
1aca0 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
1acb0 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
1acc0 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
1acd0 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
1ace0 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
1acf0 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
1ad00 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
1ad10 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  re,..          "
1ad20 53 65 74 50 61 73 73 77 6f 72 64 20 28 50 6f 6f  SetPassword (Poo
1ad30 6c 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d  l) Disabled: {0}
1ad40 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 48 61  ",..          Ha
1ad50 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29  ndleToString()))
1ad60 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
1ad70 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
1ad80 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1ad90 64 65 20 76 6f 69 64 20 43 68 61 6e 67 65 50 61  de void ChangePa
1ada0 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65  ssword(byte[] ne
1adb0 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d  wPasswordBytes).
1adc0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
1add0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
1ade0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
1adf0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
1ae00 6b 65 79 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73  key(_sql, newPas
1ae10 73 77 6f 72 64 42 79 74 65 73 2c 20 28 6e 65 77  swordBytes, (new
1ae20 50 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d 3d  PasswordBytes ==
1ae30 20 6e 75 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77   null) ? 0 : new
1ae40 50 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c 65  PasswordBytes.Le
1ae50 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ngth);....      
1ae60 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
1ae70 73 2e 48 61 73 46 6c 61 67 73 28 5f 66 6c 61 67  s.HasFlags(_flag
1ae80 73 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  s, SQLiteConnect
1ae90 69 6f 6e 46 6c 61 67 73 2e 48 69 64 65 50 61 73  ionFlags.HidePas
1aea0 73 77 6f 72 64 29 29 0d 0a 20 20 20 20 20 20 20  sword))..       
1aeb0 20 5a 65 72 6f 50 61 73 73 77 6f 72 64 28 6e 65   ZeroPassword(ne
1aec0 77 50 61 73 73 77 6f 72 64 42 79 74 65 73 29 3b  wPasswordBytes);
1aed0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  ....      if (n 
1aee0 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
1aef0 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
1af00 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
1af10 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
1af20 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ());....      if
1af30 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20   (_usePool)..   
1af40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 75     {..        _u
1af50 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d  sePool = false;.
1af60 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
1af70 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
1af80 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
1af90 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
1afa0 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
1afb0 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
1afc0 0a 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75  .          Cultu
1afd0 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
1afe0 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
1aff0 20 20 22 43 68 61 6e 67 65 50 61 73 73 77 6f 72    "ChangePasswor
1b000 64 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65  d (Pool) Disable
1b010 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  d: {0}",..      
1b020 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69      HandleToStri
1b030 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
1b040 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1b050 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69  .#endif....    i
1b060 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1b070 20 76 6f 69 64 20 53 65 74 50 72 6f 67 72 65 73   void SetProgres
1b080 73 48 6f 6f 6b 28 69 6e 74 20 6e 4f 70 73 2c 20  sHook(int nOps, 
1b090 53 51 4c 69 74 65 50 72 6f 67 72 65 73 73 43 61  SQLiteProgressCa
1b0a0 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
1b0b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73    {..        Uns
1b0c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1b0d0 2e 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65 73  .sqlite3_progres
1b0e0 73 5f 68 61 6e 64 6c 65 72 28 5f 73 71 6c 2c 20  s_handler(_sql, 
1b0f0 6e 4f 70 73 2c 20 66 75 6e 63 2c 20 49 6e 74 50  nOps, func, IntP
1b100 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
1b110 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
1b120 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
1b130 65 74 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f 6b  etAuthorizerHook
1b140 28 53 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65  (SQLiteAuthorize
1b150 72 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  rCallback func).
1b160 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
1b170 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1b180 73 2e 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75  s.sqlite3_set_au
1b190 74 68 6f 72 69 7a 65 72 28 5f 73 71 6c 2c 20 66  thorizer(_sql, f
1b1a0 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
1b1b0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
1b1c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
1b1d0 64 65 20 76 6f 69 64 20 53 65 74 55 70 64 61 74  de void SetUpdat
1b1e0 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61  eHook(SQLiteUpda
1b1f0 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  teCallback func)
1b200 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
1b210 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1b220 64 73 2e 73 71 6c 69 74 65 33 5f 75 70 64 61 74  ds.sqlite3_updat
1b230 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e  e_hook(_sql, fun
1b240 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
1b250 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1b260 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1b270 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48   void SetCommitH
1b280 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74  ook(SQLiteCommit
1b290 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
1b2a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
1b2b0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1b2c0 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f  .sqlite3_commit_
1b2d0 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
1b2e0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
1b2f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1b300 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
1b310 6f 69 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c  oid SetTraceCall
1b320 62 61 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65  back(SQLiteTrace
1b330 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
1b340 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
1b350 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1b360 2e 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 5f  .sqlite3_trace(_
1b370 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
1b380 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
1b390 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
1b3a0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
1b3b0 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 32 28  tTraceCallback2(
1b3c0 53 51 4c 69 74 65 54 72 61 63 65 46 6c 61 67 73  SQLiteTraceFlags
1b3d0 20 6d 61 73 6b 2c 20 53 51 4c 69 74 65 54 72 61   mask, SQLiteTra
1b3e0 63 65 43 61 6c 6c 62 61 63 6b 32 20 66 75 6e 63  ceCallback2 func
1b3f0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1b400 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
1b410 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 72  thods.sqlite3_tr
1b420 61 63 65 5f 76 32 28 5f 73 71 6c 2c 20 6d 61 73  ace_v2(_sql, mas
1b430 6b 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e  k, func, IntPtr.
1b440 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Zero);..    }...
1b450 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1b460 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 52  erride void SetR
1b470 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69  ollbackHook(SQLi
1b480 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  teRollbackCallba
1b490 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d  ck func)..    {.
1b4a0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
1b4b0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1b4c0 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f 6f 6b  e3_rollback_hook
1b4d0 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74  (_sql, func, Int
1b4e0 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
1b4f0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
1b500 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1b510 41 6c 6c 6f 77 73 20 74 68 65 20 73 65 74 74 69  Allows the setti
1b520 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69 6e 67 20  ng of a logging 
1b530 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b 65 64  callback invoked
1b540 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20   by SQLite when 
1b550 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67 20 65  a..    /// log e
1b560 76 65 6e 74 20 6f 63 63 75 72 73 2e 20 20 4f 6e  vent occurs.  On
1b570 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61 63 6b 20  ly one callback 
1b580 6d 61 79 20 62 65 20 73 65 74 2e 20 20 49 66 20  may be set.  If 
1b590 4e 55 4c 4c 20 69 73 20 70 61 73 73 65 64 2c 0d  NULL is passed,.
1b5a0 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6c 6f 67  .    /// the log
1b5b0 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 73  ging callback is
1b5c0 20 75 6e 72 65 67 69 73 74 65 72 65 64 2e 0d 0a   unregistered...
1b5d0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1b5e0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
1b5f0 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 22 3e 54  am name="func">T
1b600 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  he callback func
1b610 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 2e 3c  tion to invoke.<
1b620 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1b630 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e   <returns>Return
1b640 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64 65 3c  s a result code<
1b650 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
1b660 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1b670 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1b680 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28   SetLogCallback(
1b690 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63  SQLiteLogCallbac
1b6a0 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a  k func)..    {..
1b6b0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
1b6c0 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
1b6d0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1b6e0 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f  .sqlite3_config_
1b6f0 6c 6f 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  log(..          
1b700 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70    SQLiteConfigOp
1b710 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e  sEnum.SQLITE_CON
1b720 46 49 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 49  FIG_LOG, func, I
1b730 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a  ntPtr.Zero);....
1b740 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
1b750 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
1b760 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
1b770 20 20 20 5f 73 65 74 4c 6f 67 43 61 6c 6c 62 61     _setLogCallba
1b780 63 6b 20 3d 20 28 66 75 6e 63 20 21 3d 20 6e 75  ck = (func != nu
1b790 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ll);....        
1b7a0 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
1b7b0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1b7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b810 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1b820 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1b830 20 20 20 2f 2f 2f 20 41 70 70 65 6e 64 73 20 61     /// Appends a
1b840 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
1b850 61 6e 64 20 61 6e 20 61 70 70 72 6f 70 72 69 61  and an appropria
1b860 74 65 20 6c 69 6e 65 2d 65 6e 64 69 6e 67 20 74  te line-ending t
1b870 6f 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53  o a <see cref="S
1b880 74 72 69 6e 67 42 75 69 6c 64 65 72 22 20 2f 3e  tringBuilder" />
1b890 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e  ..    /// instan
1b8a0 63 65 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ce.  This is use
1b8b0 66 75 6c 20 62 65 63 61 75 73 65 20 74 68 65 20  ful because the 
1b8c0 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20 46 72 61  .NET Compact Fra
1b8d0 6d 65 77 6f 72 6b 20 68 61 73 20 61 20 73 6c 69  mework has a sli
1b8e0 67 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74 20  ghtly different 
1b8f0 73 65 74 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20  set..    /// of 
1b900 73 75 70 70 6f 72 74 65 64 20 6d 65 74 68 6f 64  supported method
1b910 73 20 66 6f 72 20 74 68 65 20 3c 73 65 65 20 63  s for the <see c
1b920 72 65 66 3d 22 53 74 72 69 6e 67 42 75 69 6c 64  ref="StringBuild
1b930 65 72 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20  er" /> class... 
1b940 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1b950 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1b960 6d 20 6e 61 6d 65 3d 22 62 75 69 6c 64 65 72 22  m name="builder"
1b970 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
1b980 73 65 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67  see cref="String
1b990 42 75 69 6c 64 65 72 22 20 2f 3e 20 69 6e 73 74  Builder" /> inst
1b9a0 61 6e 63 65 20 74 6f 20 61 70 70 65 6e 64 20 74  ance to append t
1b9b0 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  o...    /// </pa
1b9c0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
1b9d0 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 65 73 73 61  aram name="messa
1b9e0 67 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ge">..    /// Th
1b9f0 65 20 6d 65 73 73 61 67 65 20 74 6f 20 61 70 70  e message to app
1ba00 65 6e 64 2e 20 20 49 74 20 77 69 6c 6c 20 62 65  end.  It will be
1ba10 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
1ba20 61 70 70 72 6f 70 72 69 61 74 65 20 6c 69 6e 65  appropriate line
1ba30 2d 65 6e 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f  -ending...    //
1ba40 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1ba50 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
1ba60 6f 69 64 20 41 70 70 65 6e 64 45 72 72 6f 72 28  oid AppendError(
1ba70 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67  ..        String
1ba80 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72 2c  Builder builder,
1ba90 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
1baa0 20 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20   message..      
1bab0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
1bac0 20 20 20 20 69 66 20 28 62 75 69 6c 64 65 72 20      if (builder 
1bad0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1bae0 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
1baf0 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
1bb00 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
1bb10 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72  .        builder
1bb20 2e 41 70 70 65 6e 64 4c 69 6e 65 28 6d 65 73 73  .AppendLine(mess
1bb30 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  age);..#else..  
1bb40 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
1bb50 70 65 6e 64 28 6d 65 73 73 61 67 65 29 3b 0d 0a  pend(message);..
1bb60 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
1bb70 41 70 70 65 6e 64 28 22 5c 72 5c 6e 22 29 3b 0d  Append("\r\n");.
1bb80 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
1bb90 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bbf0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
1bc00 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1bc10 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1bc20 61 74 74 65 6d 70 74 73 20 74 6f 20 63 61 75 73  attempts to caus
1bc30 65 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74  e the SQLite nat
1bc40 69 76 65 20 6c 69 62 72 61 72 79 20 74 6f 20 69  ive library to i
1bc50 6e 76 61 6c 69 64 61 74 65 0d 0a 20 20 20 20 2f  nvalidate..    /
1bc60 2f 2f 20 69 74 73 20 66 75 6e 63 74 69 6f 6e 20  // its function 
1bc70 70 6f 69 6e 74 65 72 73 20 74 68 61 74 20 72 65  pointers that re
1bc80 66 65 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74  fer to this inst
1bc90 61 6e 63 65 2e 20 20 54 68 69 73 20 69 73 20 6e  ance.  This is n
1bca0 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 2f 2f  ecessary..    //
1bcb0 2f 20 74 6f 20 70 72 65 76 65 6e 74 20 63 61 6c  / to prevent cal
1bcc0 6c 73 20 66 72 6f 6d 20 6e 61 74 69 76 65 20 63  ls from native c
1bcd0 6f 64 65 20 69 6e 74 6f 20 64 65 6c 65 67 61 74  ode into delegat
1bce0 65 73 20 74 68 61 74 20 6d 61 79 20 68 61 76 65  es that may have
1bcf0 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 67   been..    /// g
1bd00 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 65 64  arbage collected
1bd10 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65  .  Normally, the
1bd20 73 65 20 74 79 70 65 73 20 6f 66 20 69 73 73 75  se types of issu
1bd30 65 73 20 63 61 6e 20 6f 6e 6c 79 20 61 72 69 73  es can only aris
1bd40 65 20 66 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63  e for..    /// c
1bd50 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 68 61 74 20  onnections that 
1bd60 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65  are added to the
1bd70 20 70 6f 6f 6c 3b 20 68 6f 77 76 65 72 2c 20 69   pool; howver, i
1bd80 74 20 69 73 20 67 6f 6f 64 20 70 72 61 63 74 69  t is good practi
1bd90 63 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 75  ce to..    /// u
1bda0 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20 69  nconditionally i
1bdb0 6e 76 61 6c 69 64 61 74 65 20 66 75 6e 63 74 69  nvalidate functi
1bdc0 6f 6e 20 70 6f 69 6e 74 65 72 73 20 74 68 61 74  on pointers that
1bdd0 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20 6f 62   may refer to ob
1bde0 6a 65 63 74 73 0d 0a 20 20 20 20 2f 2f 2f 20 62  jects..    /// b
1bdf0 65 69 6e 67 20 64 69 73 70 6f 73 65 64 2e 0d 0a  eing disposed...
1be00 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1be10 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
1be20 61 6d 20 6e 61 6d 65 3d 22 69 6e 63 6c 75 64 65  am name="include
1be30 47 6c 6f 62 61 6c 22 3e 0d 0a 20 20 20 20 2f 2f  Global">..    //
1be40 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 61 6c  / Non-zero to al
1be50 73 6f 20 69 6e 76 61 6c 69 64 61 74 65 20 67 6c  so invalidate gl
1be60 6f 62 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 6f  obal function po
1be70 69 6e 74 65 72 73 20 28 69 2e 65 2e 20 74 68 6f  inters (i.e. tho
1be80 73 65 20 74 68 61 74 0d 0a 20 20 20 20 2f 2f 2f  se that..    ///
1be90 20 61 72 65 20 6e 6f 74 20 64 69 72 65 63 74 6c   are not directl
1bea0 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
1beb0 68 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  h this connectio
1bec0 6e 20 6f 6e 20 74 68 65 20 6e 61 74 69 76 65 20  n on the native 
1bed0 73 69 64 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20  side)...    /// 
1bee0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1bef0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
1bf00 61 6e 54 68 72 6f 77 22 3e 0d 0a 20 20 20 20 2f  anThrow">..    /
1bf10 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
1bf20 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65  his method is be
1bf30 69 6e 67 20 65 78 65 63 75 74 65 64 20 77 69 74  ing executed wit
1bf40 68 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68  hin a context wh
1bf50 65 72 65 20 69 74 20 63 61 6e 0d 0a 20 20 20 20  ere it can..    
1bf60 2f 2f 2f 20 74 68 72 6f 77 20 61 6e 20 65 78 63  /// throw an exc
1bf70 65 70 74 69 6f 6e 20 69 6e 20 74 68 65 20 65 76  eption in the ev
1bf80 65 6e 74 20 6f 66 20 66 61 69 6c 75 72 65 3b 20  ent of failure; 
1bf90 6f 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e  otherwise, zero.
1bfa0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1bfb0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
1bfc0 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
1bfd0 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20  on-zero if this 
1bfe0 6d 65 74 68 6f 64 20 77 61 73 20 73 75 63 63 65  method was succe
1bff0 73 73 66 75 6c 3b 20 6f 74 68 65 72 77 69 73 65  ssful; otherwise
1c000 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f  , zero...    ///
1c010 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1c020 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 55 6e   private bool Un
1c030 68 6f 6f 6b 4e 61 74 69 76 65 43 61 6c 6c 62 61  hookNativeCallba
1c040 63 6b 73 28 0d 0a 20 20 20 20 20 20 20 20 62 6f  cks(..        bo
1c050 6f 6c 20 69 6e 63 6c 75 64 65 47 6c 6f 62 61 6c  ol includeGlobal
1c060 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  ,..        bool 
1c070 63 61 6e 54 68 72 6f 77 0d 0a 20 20 20 20 20 20  canThrow..      
1c080 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
1c090 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1c0a0 2f 2f 20 4e 4f 54 45 3a 20 49 6e 69 74 69 61 6c  // NOTE: Initial
1c0b0 6c 79 2c 20 74 68 69 73 20 6d 65 74 68 6f 64 20  ly, this method 
1c0c0 61 73 73 75 6d 65 73 20 73 75 63 63 65 73 73 2e  assumes success.
1c0d0 20 20 54 68 65 6e 2c 20 69 66 20 61 6e 79 20 61    Then, if any a
1c0e0 74 74 65 6d 70 74 0d 0a 20 20 20 20 20 20 20 20  ttempt..        
1c0f0 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 6e 76 61  //       to inva
1c100 6c 69 64 61 74 65 20 61 20 66 75 6e 63 74 69 6f  lidate a functio
1c110 6e 20 70 6f 69 6e 74 65 72 20 66 61 69 6c 73 2c  n pointer fails,
1c120 20 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73   the overall res
1c130 75 6c 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20  ult is..        
1c140 2f 2f 20 20 20 20 20 20 20 73 65 74 20 74 6f 20  //       set to 
1c150 66 61 69 6c 75 72 65 2e 20 20 48 6f 77 65 76 65  failure.  Howeve
1c160 72 2c 20 74 68 69 73 20 77 69 6c 6c 20 6e 6f 74  r, this will not
1c170 20 70 72 65 76 65 6e 74 20 66 75 72 74 68 65 72   prevent further
1c180 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
1c190 20 20 20 61 74 74 65 6d 70 74 73 2c 20 69 66 20     attempts, if 
1c1a0 61 6e 79 2c 20 74 6f 20 69 6e 76 61 6c 69 64 61  any, to invalida
1c1b0 74 65 20 73 75 62 73 65 71 75 65 6e 74 20 66 75  te subsequent fu
1c1c0 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 73 2e  nction pointers.
1c1d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
1c1e0 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 75 6c        bool resul
1c1f0 74 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  t = true;..     
1c200 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
1c210 64 65 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72  de rc = SQLiteEr
1c220 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
1c230 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
1c240 65 72 20 62 75 69 6c 64 65 72 20 3d 20 6e 65 77  er builder = new
1c250 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29   StringBuilder()
1c260 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1c270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1c2d0 20 20 20 20 23 72 65 67 69 6f 6e 20 52 6f 6c 6c      #region Roll
1c2e0 62 61 63 6b 20 48 6f 6f 6b 20 28 50 65 72 2d 43  back Hook (Per-C
1c2f0 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  onnection)..    
1c300 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
1c310 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c320 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28  SetRollbackHook(
1c330 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20  null); /* throw 
1c340 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23  */..        }..#
1c350 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
1c360 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
1c370 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
1c380 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
1c390 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20   e)..#else..    
1c3a0 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
1c3b0 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20  tion)..#endif.. 
1c3c0 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e         {..#if !N
1c3d0 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
1c3e0 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
1c3f0 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  N..            t
1c400 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1c410 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c420 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
1c430 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
1c440 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
1c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c460 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
1c470 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
1c480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c490 20 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20       "Failed to 
1c4a0 75 6e 73 65 74 20 72 6f 6c 6c 62 61 63 6b 20 68  unset rollback h
1c4b0 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ook: {0}",..    
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4d0 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  e)); /* throw */
1c4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1c4f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
1c500 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
1c510 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c520 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
1c530 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
1c540 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
1c550 20 20 20 20 20 20 20 20 41 70 70 65 6e 64 45 72          AppendEr
1c560 72 6f 72 28 62 75 69 6c 64 65 72 2c 20 22 66 61  ror(builder, "fa
1c570 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 72 6f  iled to unset ro
1c580 6c 6c 62 61 63 6b 20 68 6f 6f 6b 22 29 3b 0d 0a  llback hook");..
1c590 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
1c5a0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1c5b0 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20  .Error;....     
1c5c0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
1c5d0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1c5e0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
1c5f0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1c600 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1c610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1c660 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1c670 54 72 61 63 65 20 43 61 6c 6c 62 61 63 6b 20 28  Trace Callback (
1c680 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d  Per-Connection).
1c690 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
1c6a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c6b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1c6c0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68       // NOTE: Wh
1c6d0 65 6e 20 75 73 69 6e 67 20 76 65 72 73 69 6f 6e  en using version
1c6e0 20 33 2e 31 34 20 28 6f 72 20 6c 61 74 65 72 29   3.14 (or later)
1c6f0 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   of the SQLite c
1c700 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ore..           
1c710 20 2f 2f 20 20 20 20 20 20 20 6c 69 62 72 61 72   //       librar
1c720 79 2c 20 75 73 65 20 74 68 65 20 6e 65 77 65 72  y, use the newer
1c730 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 5f 76   sqlite3_trace_v
1c740 32 28 29 20 41 50 49 20 69 6e 20 6f 72 64 65 72  2() API in order
1c750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1c760 20 20 20 20 20 20 20 74 6f 20 75 6e 68 6f 6f 6b         to unhook
1c770 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62   the trace callb
1c780 61 63 6b 2c 20 6a 75 73 74 20 69 6e 20 63 61 73  ack, just in cas
1c790 65 20 74 68 65 20 6f 6c 64 65 72 0d 0a 20 20 20  e the older..   
1c7a0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1c7b0 20 20 41 50 49 20 69 73 20 6e 6f 74 20 61 76 61    API is not ava
1c7c0 69 6c 61 62 6c 65 20 28 65 2e 67 2e 20 53 51 4c  ilable (e.g. SQL
1c7d0 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
1c7e0 54 45 44 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  TED)...         
1c7f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1c800 20 20 20 69 66 20 28 55 6e 73 61 66 65 4e 61 74     if (UnsafeNat
1c810 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1c820 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75  e3_libversion_nu
1c830 6d 62 65 72 28 29 20 3e 3d 20 33 30 31 34 30 30  mber() >= 301400
1c840 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
1c850 20 20 20 20 53 65 74 54 72 61 63 65 43 61 6c 6c      SetTraceCall
1c860 62 61 63 6b 32 28 53 51 4c 69 74 65 54 72 61 63  back2(SQLiteTrac
1c870 65 46 6c 61 67 73 2e 53 51 4c 49 54 45 5f 54 52  eFlags.SQLITE_TR
1c880 41 43 45 5f 4e 4f 4e 45 2c 20 6e 75 6c 6c 29 3b  ACE_NONE, null);
1c890 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
1c8a0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8c0 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  SetTraceCallback
1c8d0 28 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77  (null); /* throw
1c8e0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   */..        }..
1c8f0 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
1c900 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
1c910 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
1c920 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1c930 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  n e)..#else..   
1c940 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1c950 70 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a  ption)..#endif..
1c960 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
1c970 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
1c980 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
1c990 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
1c9a0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c9b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c9c0 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
1c9d0 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
1c9e0 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
1c9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ca00 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
1ca10 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
1ca20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ca30 20 20 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f        "Failed to
1ca40 20 75 6e 73 65 74 20 74 72 61 63 65 20 63 61 6c   unset trace cal
1ca50 6c 62 61 63 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20  lback: {0}",..  
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca70 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20    e)); /* throw 
1ca80 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1ca90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
1caa0 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
1cab0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1cac0 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
1cad0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
1cae0 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
1caf0 20 20 20 20 20 20 20 20 20 20 41 70 70 65 6e 64            Append
1cb00 45 72 72 6f 72 28 62 75 69 6c 64 65 72 2c 20 22  Error(builder, "
1cb10 66 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20  failed to unset 
1cb20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 22 29  trace callback")
1cb30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
1cb40 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  c = SQLiteErrorC
1cb50 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20  ode.Error;....  
1cb60 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1cb70 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
1cb80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
1cb90 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1cba0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1cbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbd0 2f 2f 2f 2f 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 0d  ///////////////.
1cc00 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1cc10 6f 6e 20 43 6f 6d 6d 69 74 20 48 6f 6f 6b 20 28  on Commit Hook (
1cc20 50 65 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d  Per-Connection).
1cc30 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
1cc40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1cc50 20 20 20 20 20 53 65 74 43 6f 6d 6d 69 74 48 6f       SetCommitHo
1cc60 6f 6b 28 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72  ok(null); /* thr
1cc70 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d  ow */..        }
1cc80 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
1cc90 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
1cca0 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
1ccb0 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1ccc0 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20  ion e)..#else.. 
1ccd0 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
1cce0 63 65 70 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66  ception)..#endif
1ccf0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
1cd00 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
1cd10 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
1cd20 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
1cd30 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1cd40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1cd50 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
1cd60 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68  eLine(HelperMeth
1cd70 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
1cd80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1cd90 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
1cda0 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
1cdb0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1cdc0 20 20 20 20 20 20 20 20 22 46 61 69 6c 65 64 20          "Failed 
1cdd0 74 6f 20 75 6e 73 65 74 20 63 6f 6d 6d 69 74 20  to unset commit 
1cde0 68 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  hook: {0}",..   
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce00 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a   e)); /* throw *
1ce10 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  /..            }
1ce20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
1ce30 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
1ce40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ce50 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
1ce60 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
1ce70 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
1ce80 20 20 20 20 20 20 20 20 20 41 70 70 65 6e 64 45           AppendE
1ce90 72 72 6f 72 28 62 75 69 6c 64 65 72 2c 20 22 66  rror(builder, "f
1cea0 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 63  ailed to unset c
1ceb0 6f 6d 6d 69 74 20 68 6f 6f 6b 22 29 3b 0d 0a 20  ommit hook");.. 
1cec0 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
1ced0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
1cee0 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20  Error;....      
1cef0 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66        result = f
1cf00 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alse;..        }
1cf10 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1cf20 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20  ///////////.... 
1cf90 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55         #region U
1cfa0 70 64 61 74 65 20 48 6f 6f 6b 20 28 50 65 72 2d  pdate Hook (Per-
1cfb0 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20  Connection)..   
1cfc0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1cfd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1cfe0 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28 6e   SetUpdateHook(n
1cff0 75 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  ull); /* throw *
1d000 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 69  /..        }..#i
1d010 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
1d020 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
1d030 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 63  CTION..        c
1d040 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1d050 65 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  e)..#else..     
1d060 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1d070 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ion)..#endif..  
1d080 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45        {..#if !NE
1d090 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
1d0a0 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
1d0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
1d0c0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1d0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d0e0 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
1d0f0 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
1d100 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
1d110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d120 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
1d130 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
1d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d150 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75      "Failed to u
1d160 6e 73 65 74 20 75 70 64 61 74 65 20 68 6f 6f 6b  nset update hook
1d170 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
1d180 20 20 20 20 20 20 20 20 20 20 20 20 20 65 29 29               e))
1d190 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
1d1a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1d1b0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
1d1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1e0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
1d200 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
1d210 20 20 20 20 20 41 70 70 65 6e 64 45 72 72 6f 72       AppendError
1d220 28 62 75 69 6c 64 65 72 2c 20 22 66 61 69 6c 65  (builder, "faile
1d230 64 20 74 6f 20 75 6e 73 65 74 20 75 70 64 61 74  d to unset updat
1d240 65 20 68 6f 6f 6b 22 29 3b 0d 0a 20 20 20 20 20  e hook");..     
1d250 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 69         rc = SQLi
1d260 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
1d270 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  r;....          
1d280 20 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65    result = false
1d290 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1d2a0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1d2b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1d2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d310 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1d320 20 20 20 23 72 65 67 69 6f 6e 20 41 75 74 68 6f     #region Autho
1d330 72 69 7a 65 72 20 48 6f 6f 6b 20 28 50 65 72 2d  rizer Hook (Per-
1d340 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20 20 20  Connection)..   
1d350 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1d360 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d370 20 53 65 74 41 75 74 68 6f 72 69 7a 65 72 48 6f   SetAuthorizerHo
1d380 6f 6b 28 6e 75 6c 6c 29 3b 20 2f 2a 20 74 68 72  ok(null); /* thr
1d390 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d  ow */..        }
1d3a0 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
1d3b0 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
1d3c0 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
1d3d0 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1d3e0 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20  ion e)..#else.. 
1d3f0 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
1d400 63 65 70 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66  ception)..#endif
1d410 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
1d420 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
1d430 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
1d440 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
1d450 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1d460 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d470 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
1d480 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68  eLine(HelperMeth
1d490 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
1d4a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1d4b0 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
1d4c0 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
1d4d0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1d4e0 20 20 20 20 20 20 20 20 22 46 61 69 6c 65 64 20          "Failed 
1d4f0 74 6f 20 75 6e 73 65 74 20 61 75 74 68 6f 72 69  to unset authori
1d500 7a 65 72 20 68 6f 6f 6b 3a 20 7b 30 7d 22 2c 0d  zer hook: {0}",.
1d510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d520 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72       e)); /* thr
1d530 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
1d540 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1d550 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
1d560 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d570 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
1d580 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
1d590 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
1d5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70  .            App
1d5b0 65 6e 64 45 72 72 6f 72 28 62 75 69 6c 64 65 72  endError(builder
1d5c0 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 75 6e 73  , "failed to uns
1d5d0 65 74 20 61 75 74 68 6f 72 69 7a 65 72 20 68 6f  et authorizer ho
1d5e0 6f 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ok");..         
1d5f0 20 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72     rc = SQLiteEr
1d600 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a  rorCode.Error;..
1d610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1d620 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  sult = false;.. 
1d630 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1d640 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1d650 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1d660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1d6c0 72 65 67 69 6f 6e 20 50 72 6f 67 72 65 73 73 20  region Progress 
1d6d0 48 6f 6f 6b 20 28 50 65 72 2d 43 6f 6e 6e 65 63  Hook (Per-Connec
1d6e0 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 74  tion)..        t
1d6f0 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
1d700 20 20 20 20 20 20 20 20 20 20 20 53 65 74 50 72             SetPr
1d710 6f 67 72 65 73 73 48 6f 6f 6b 28 30 2c 20 6e 75  ogressHook(0, nu
1d720 6c 6c 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ll); /* throw */
1d730 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 69 66  ..        }..#if
1d740 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
1d750 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
1d760 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 63 61  TION..        ca
1d770 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
1d780 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  )..#else..      
1d790 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1d7a0 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  on)..#endif..   
1d7b0 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54       {..#if !NET
1d7c0 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
1d7d0 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
1d7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
1d7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1d800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d810 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
1d820 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
1d830 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d850 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
1d860 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
1d870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d880 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20 75 6e     "Failed to un
1d890 73 65 74 20 70 72 6f 67 72 65 73 73 20 68 6f 6f  set progress hoo
1d8a0 6b 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  k: {0}",..      
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 29                e)
1d8c0 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1d8e0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1d8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1d900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d910 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
1d920 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1d930 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
1d940 20 20 20 20 20 20 41 70 70 65 6e 64 45 72 72 6f        AppendErro
1d950 72 28 62 75 69 6c 64 65 72 2c 20 22 66 61 69 6c  r(builder, "fail
1d960 65 64 20 74 6f 20 75 6e 73 65 74 20 70 72 6f 67  ed to unset prog
1d970 72 65 73 73 20 68 6f 6f 6b 22 29 3b 0d 0a 20 20  ress hook");..  
1d980 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
1d990 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
1d9a0 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rror;....       
1d9b0 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61       result = fa
1d9c0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  lse;..        }.
1d9d0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1d9e0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
1d9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
1da50 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4c 6f        #region Lo
1da60 67 20 43 61 6c 6c 62 61 63 6b 20 28 47 6c 6f 62  g Callback (Glob
1da70 61 6c 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  al)..        //.
1da80 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
1da90 3a 20 57 65 20 68 61 76 65 20 74 6f 20 62 65 20  : We have to be 
1daa0 63 61 72 65 66 75 6c 20 68 65 72 65 20 62 65 63  careful here bec
1dab0 61 75 73 65 20 74 68 65 20 6c 6f 67 20 63 61 6c  ause the log cal
1dac0 6c 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 2f  lback..        /
1dad0 2f 20 20 20 20 20 20 20 69 73 20 6e 6f 74 20 70  /       is not p
1dae0 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 6e  er-connection on
1daf0 20 74 68 65 20 6e 61 74 69 76 65 20 73 69 64 65   the native side
1db00 2e 20 20 49 74 20 73 68 6f 75 6c 64 0d 0a 20 20  .  It should..  
1db10 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
1db20 6e 6c 79 20 62 65 20 75 6e 73 65 74 20 62 79 20  nly be unset by 
1db30 74 68 69 73 20 6d 65 74 68 6f 64 20 69 66 20 74  this method if t
1db40 68 69 73 20 69 6e 73 74 61 6e 63 65 20 77 61 73  his instance was
1db50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
1db60 20 20 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66     responsible f
1db70 6f 72 20 73 65 74 74 69 6e 67 20 69 74 2e 0d 0a  or setting it...
1db80 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1db90 20 20 20 20 69 66 20 28 69 6e 63 6c 75 64 65 47      if (includeG
1dba0 6c 6f 62 61 6c 20 26 26 20 5f 73 65 74 4c 6f 67  lobal && _setLog
1dbb0 43 61 6c 6c 62 61 63 6b 29 0d 0a 20 20 20 20 20  Callback)..     
1dbc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1dbd0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1dbe0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1dbf0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
1dc00 72 43 6f 64 65 20 72 63 32 20 3d 20 53 65 74 4c  rCode rc2 = SetL
1dc10 6f 67 43 61 6c 6c 62 61 63 6b 28 6e 75 6c 6c 29  ogCallback(null)
1dc20 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d  ; /* throw */...
1dc30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dc40 20 69 66 20 28 72 63 32 20 21 3d 20 53 51 4c 69   if (rc2 != SQLi
1dc50 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
1dc60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dc70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1dc80 20 20 20 20 20 20 20 20 41 70 70 65 6e 64 45 72          AppendEr
1dc90 72 6f 72 28 62 75 69 6c 64 65 72 2c 20 22 63 6f  ror(builder, "co
1dca0 75 6c 64 20 6e 6f 74 20 75 6e 73 65 74 20 6c 6f  uld not unset lo
1dcb0 67 20 63 61 6c 6c 62 61 63 6b 22 29 3b 0d 0a 20  g callback");.. 
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 20 20 20 72 63 20 3d 20 72 63 32 3b 0d 0a 0d 0a     rc = rc2;....
1dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcf0 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61 6c      result = fal
1dd00 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1dd10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1dd20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54 5f      }..#if !NET_
1dd30 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
1dd40 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
1dd50 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1dd60 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
1dd70 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
1dd80 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
1dd90 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66 0d 0a 20  tion)..#endif.. 
1dda0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
1ddb0 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
1ddc0 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
1ddd0 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
1dde0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
1ddf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
1de20 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
1de30 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
1de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de50 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
1de60 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
1de70 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
1de80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 61               "Fa
1de90 69 6c 65 64 20 74 6f 20 75 6e 73 65 74 20 6c 6f  iled to unset lo
1dea0 67 20 63 61 6c 6c 62 61 63 6b 3a 20 7b 30 7d 22  g callback: {0}"
1deb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1dec0 20 20 20 20 20 20 20 20 20 20 20 65 29 29 3b 20             e)); 
1ded0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df00 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
1df10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1df30 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1df50 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
1df60 20 20 20 20 20 20 20 20 20 20 20 41 70 70 65 6e             Appen
1df70 64 45 72 72 6f 72 28 62 75 69 6c 64 65 72 2c 20  dError(builder, 
1df80 22 66 61 69 6c 65 64 20 74 6f 20 75 6e 73 65 74  "failed to unset
1df90 20 6c 6f 67 20 63 61 6c 6c 62 61 63 6b 22 29 3b   log callback");
1dfa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dfb0 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72    rc = SQLiteErr
1dfc0 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 0d  orCode.Error;...
1dfd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dfe0 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b   result = false;
1dff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e000 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1e010 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1e020 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e080 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e090 20 69 66 20 28 21 72 65 73 75 6c 74 20 26 26 20   if (!result && 
1e0a0 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 20  canThrow)..     
1e0b0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1e0c0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
1e0d0 28 72 63 2c 20 62 75 69 6c 64 65 72 2e 54 6f 53  (rc, builder.ToS
1e0e0 74 72 69 6e 67 28 29 29 3b 0d 0a 0d 0a 20 20 20  tring());....   
1e0f0 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
1e100 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  lt;..    }....  
1e110 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e170 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
1e180 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1e190 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74 74 65  This method atte
1e1a0 6d 70 74 73 20 74 6f 20 66 72 65 65 20 74 68 65  mpts to free the
1e1b0 20 63 61 63 68 65 64 20 64 61 74 61 62 61 73 65   cached database
1e1c0 20 6e 61 6d 65 20 75 73 65 64 20 77 69 74 68 20   name used with 
1e1d0 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65  the..    /// <se
1e1e0 65 20 63 72 65 66 3d 22 53 65 74 43 6f 6e 66 69  e cref="SetConfi
1e1f0 67 75 72 61 74 69 6f 6e 4f 70 74 69 6f 6e 22 20  gurationOption" 
1e200 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
1e210 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1e220 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1e230 61 6d 65 3d 22 63 61 6e 54 68 72 6f 77 22 3e 0d  ame="canThrow">.
1e240 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
1e250 6f 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64  o if this method
1e260 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
1e270 65 64 20 77 69 74 68 69 6e 20 61 20 63 6f 6e 74  ed within a cont
1e280 65 78 74 20 77 68 65 72 65 20 69 74 20 63 61 6e  ext where it can
1e290 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 72 6f 77 20  ..    /// throw 
1e2a0 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 6e 20  an exception in 
1e2b0 74 68 65 20 65 76 65 6e 74 20 6f 66 20 66 61 69  the event of fai
1e2c0 6c 75 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c  lure; otherwise,
1e2d0 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20   zero...    /// 
1e2e0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1e2f0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1e300 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
1e310 20 74 68 69 73 20 6d 65 74 68 6f 64 20 77 61 73   this method was
1e320 20 73 75 63 63 65 73 73 66 75 6c 3b 20 6f 74 68   successful; oth
1e330 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20  erwise, zero... 
1e340 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1e350 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  >..    private b
1e360 6f 6f 6c 20 46 72 65 65 44 62 4e 61 6d 65 28 0d  ool FreeDbName(.
1e370 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 61  .        bool ca
1e380 6e 54 68 72 6f 77 0d 0a 20 20 20 20 20 20 20 20  nThrow..        
1e390 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1e3a0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
1e3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1e3c0 20 28 64 62 4e 61 6d 65 20 21 3d 20 49 6e 74 50   (dbName != IntP
1e3d0 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1e3e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e3f0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
1e400 65 6d 6f 72 79 2e 46 72 65 65 28 64 62 4e 61 6d  emory.Free(dbNam
1e410 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
1e420 20 20 20 20 20 64 62 4e 61 6d 65 20 3d 20 49 6e       dbName = In
1e430 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
1e440 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e450 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1e460 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
1e470 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
1e480 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
1e490 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
1e4a0 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1e4b0 69 6f 6e 20 65 29 0d 0a 23 65 6c 73 65 0d 0a 20  ion e)..#else.. 
1e4c0 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
1e4d0 63 65 70 74 69 6f 6e 29 0d 0a 23 65 6e 64 69 66  ception)..#endif
1e4e0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
1e4f0 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
1e500 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
1e510 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20  TION..          
1e520 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1e530 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e540 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
1e550 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68  eLine(HelperMeth
1e560 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
1e570 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1e580 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
1e590 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
1e5a0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1e5b0 20 20 20 20 20 20 20 20 22 46 61 69 6c 65 64 20          "Failed 
1e5c0 74 6f 20 66 72 65 65 20 64 61 74 61 62 61 73 65  to free database
1e5d0 20 6e 61 6d 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20   name: {0}",..  
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20    e)); /* throw 
1e600 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1e610 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
1e620 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
1e630 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e640 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
1e650 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
1e660 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
1e670 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
1e680 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 20 20 20  nThrow)..       
1e690 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 3b 0d           throw;.
1e6a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1e6b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1e6c0 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  se;..    }....  
1e6d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e730 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
1e740 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1e750 43 72 65 61 74 65 73 20 61 20 6e 65 77 20 53 51  Creates a new SQ
1e760 4c 69 74 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  Lite backup obje
1e770 63 74 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ct based on the 
1e780 70 72 6f 76 69 64 65 64 20 64 65 73 74 69 6e 61  provided destina
1e790 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61  tion..    /// da
1e7a0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
1e7b0 6e 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 64  n.  The source d
1e7c0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
1e7d0 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20  on is the one.. 
1e7e0 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65     /// associate
1e7f0 64 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65  d with this obje
1e800 63 74 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20  ct.  The source 
1e810 61 6e 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  and destination 
1e820 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f  database..    //
1e830 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61  / connections ca
1e840 6e 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65  nnot be the same
1e850 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1e860 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
1e870 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74  param name="dest
1e880 43 6e 6e 22 3e 54 68 65 20 64 65 73 74 69 6e 61  Cnn">The destina
1e890 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63 6f  tion database co
1e8a0 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  nnection.</param
1e8b0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1e8c0 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65  m name="destName
1e8d0 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f  ">The destinatio
1e8e0 6e 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e  n database name.
1e8f0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1e900 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
1e910 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68 65 20 73  ourceName">The s
1e920 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 6e  ource database n
1e930 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ame.</param>..  
1e940 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
1e950 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64  he newly created
1e960 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c   backup object.<
1e970 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
1e980 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1e990 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 49 6e   SQLiteBackup In
1e9a0 69 74 69 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d  itializeBackup(.
1e9b0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
1e9c0 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 43 6e  onnection destCn
1e9d0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  n,..        stri
1e9e0 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a 20 20  ng destName,..  
1e9f0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 6f 75        string sou
1ea00 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  rceName..       
1ea10 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
1ea20 20 20 20 69 66 20 28 64 65 73 74 43 6e 6e 20 3d     if (destCnn =
1ea30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1ea40 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
1ea50 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
1ea60 74 69 6f 6e 28 22 64 65 73 74 43 6e 6e 22 29 3b  tion("destCnn");
1ea70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
1ea80 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  destName == null
1ea90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
1eaa0 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
1eab0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
1eac0 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  destName");.... 
1ead0 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63         if (sourc
1eae0 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  eName == null)..
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1eb00 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
1eb10 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 73 6f 75  llException("sou
1eb20 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20  rceName");....  
1eb30 20 20 20 20 20 20 53 51 4c 69 74 65 33 20 64 65        SQLite3 de
1eb40 73 74 53 71 6c 69 74 65 33 20 3d 20 64 65 73 74  stSqlite3 = dest
1eb50 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69  Cnn._sql as SQLi
1eb60 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  te3;....        
1eb70 69 66 20 28 64 65 73 74 53 71 6c 69 74 65 33 20  if (destSqlite3 
1eb80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1eb90 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1eba0 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
1ebb0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1ebc0 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f 6e      "Destination
1ebd0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
1ebe0 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c 0d 0a 20  no wrapper.",.. 
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ec00 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20  destCnn");....  
1ec10 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
1ec20 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 65 73  ectionHandle des
1ec30 74 48 61 6e 64 6c 65 20 3d 20 64 65 73 74 53 71  tHandle = destSq
1ec40 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20  lite3._sql;.... 
1ec50 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74 48         if (destH
1ec60 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1ec80 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78  w new ArgumentEx
1ec90 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
1eca0 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74 69            "Desti
1ecb0 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  nation connectio
1ecc0 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  n has an invalid
1ecd0 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20 20   handle.",..    
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73              "des
1ecf0 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tCnn");....     
1ed00 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
1ed10 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75 72 63 65  ionHandle source
1ed20 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d 0a  Handle = _sql;..
1ed30 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f  ..        if (so
1ed40 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d 20 6e 75  urceHandle == nu
1ed50 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1ed60 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
1ed70 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
1ed80 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
1ed90 20 20 20 20 20 20 20 22 53 6f 75 72 63 65 20 63         "Source c
1eda0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e  onnection has an
1edb0 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
1edc0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62  ");....        b
1edd0 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61 6d 65 20  yte[] zDestName 
1ede0 3d 20 54 6f 55 54 46 38 28 64 65 73 74 4e 61 6d  = ToUTF8(destNam
1edf0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 79 74  e);..        byt
1ee00 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61 6d 65 20  e[] zSourceName 
1ee10 3d 20 54 6f 55 54 46 38 28 73 6f 75 72 63 65 4e  = ToUTF8(sourceN
1ee20 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
1ee30 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61 6e   SQLiteBackupHan
1ee40 64 6c 65 20 62 61 63 6b 75 70 48 61 6e 64 6c 65  dle backupHandle
1ee50 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
1ee60 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
1ee70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ee80 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
1ee90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1eea0 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
1eeb0 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
1eec0 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
1eed0 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  /..        {..  
1eee0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1eef0 20 62 61 63 6b 75 70 20 3d 20 55 6e 73 61 66 65   backup = Unsafe
1ef00 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1ef10 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69  lite3_backup_ini
1ef20 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1ef30 20 20 20 20 64 65 73 74 48 61 6e 64 6c 65 2c 20      destHandle, 
1ef40 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72 63  zDestName, sourc
1ef50 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63 65  eHandle, zSource
1ef60 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1ef70 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70        if (backup
1ef80 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1ef90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1efa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1efb0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1efc0 20 72 65 73 75 6c 74 43 6f 64 65 20 3d 20 52 65   resultCode = Re
1efd0 73 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20  sultCode();.... 
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1eff0 66 20 28 72 65 73 75 6c 74 43 6f 64 65 20 21 3d  f (resultCode !=
1f000 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1f010 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
1f020 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1f030 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
1f040 69 6f 6e 28 72 65 73 75 6c 74 43 6f 64 65 2c 20  ion(resultCode, 
1f050 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
1f060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f070 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1f080 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1f090 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
1f0a0 70 74 69 6f 6e 28 22 66 61 69 6c 65 64 20 74 6f  ption("failed to
1f0b0 20 69 6e 69 74 69 61 6c 69 7a 65 20 62 61 63 6b   initialize back
1f0c0 75 70 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  up");..         
1f0d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f0e0 20 20 20 20 62 61 63 6b 75 70 48 61 6e 64 6c 65      backupHandle
1f0f0 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 42 61 63   = new SQLiteBac
1f100 6b 75 70 48 61 6e 64 6c 65 28 64 65 73 74 48 61  kupHandle(destHa
1f110 6e 64 6c 65 2c 20 62 61 63 6b 75 70 29 3b 0d 0a  ndle, backup);..
1f120 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f130 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
1f140 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28  ction.OnChanged(
1f150 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63  null, new Connec
1f160 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a  tionEventArgs(..
1f170 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1f180 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  teConnectionEven
1f190 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61  tType.NewCritica
1f1a0 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a  lHandle, null,..
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
1f1c0 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 62 61  , null, null, ba
1f1d0 63 6b 75 70 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c  ckupHandle, null
1f1e0 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  , new object[] {
1f1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79  ..            ty
1f200 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 64  peof(SQLite3), d
1f210 65 73 74 43 6e 6e 2c 20 64 65 73 74 4e 61 6d 65  estCnn, destName
1f220 2c 20 73 6f 75 72 63 65 4e 61 6d 65 20 7d 29 29  , sourceName }))
1f230 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
1f240 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 42 61  urn new SQLiteBa
1f250 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20  ckup(..         
1f260 20 20 20 74 68 69 73 2c 20 62 61 63 6b 75 70 48     this, backupH
1f270 61 6e 64 6c 65 2c 20 64 65 73 74 48 61 6e 64 6c  andle, destHandl
1f280 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f  e, zDestName, so
1f290 75 72 63 65 48 61 6e 64 6c 65 2c 0d 0a 20 20 20  urceHandle,..   
1f2a0 20 20 20 20 20 20 20 20 20 7a 53 6f 75 72 63 65           zSource
1f2b0 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Name);..    }...
1f2c0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1f2d0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69  y>..    /// Copi
1f2e0 65 73 20 75 70 20 74 6f 20 4e 20 70 61 67 65 73  es up to N pages
1f2f0 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65   from the source
1f300 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
1f310 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20   destination..  
1f320 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 61    /// database a
1f330 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1f340 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63  he specified bac
1f350 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
1f360 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1f370 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1f380 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
1f390 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
1f3a0 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d  to use.</param>.
1f3b0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1f3c0 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20  name="nPage">.. 
1f3d0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
1f3e0 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 63 6f  r of pages to co
1f3f0 70 79 2c 20 6e 65 67 61 74 69 76 65 20 74 6f 20  py, negative to 
1f400 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69  copy all remaini
1f410 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20 20 20 2f  ng pages...    /
1f420 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1f430 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1f440 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20 20 20 2f  ="retry">..    /
1f450 2f 2f 20 53 65 74 20 74 6f 20 74 72 75 65 20 69  // Set to true i
1f460 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1f470 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 74 72  needs to be retr
1f480 69 65 64 20 64 75 65 20 74 6f 20 64 61 74 61 62  ied due to datab
1f490 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 63  ase..    /// loc
1f4a0 6b 69 6e 67 20 69 73 73 75 65 73 3b 20 6f 74 68  king issues; oth
1f4b0 65 72 77 69 73 65 2c 20 73 65 74 20 74 6f 20 66  erwise, set to f
1f4c0 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  alse...    /// <
1f4d0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1f4e0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
1f4f0 2f 2f 2f 20 54 72 75 65 20 69 66 20 74 68 65 72  /// True if ther
1f500 65 20 61 72 65 20 6d 6f 72 65 20 70 61 67 65 73  e are more pages
1f510 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2c 20 66   to be copied, f
1f520 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d  alse otherwise..
1f530 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
1f540 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
1f550 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
1f560 53 74 65 70 42 61 63 6b 75 70 28 0d 0a 20 20 20  StepBackup(..   
1f570 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
1f580 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20 20  p backup,..     
1f590 20 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a 20     int nPage,.. 
1f5a0 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
1f5b0 72 65 74 72 79 0d 0a 20 20 20 20 20 20 20 20 29  retry..        )
1f5c0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1f5d0 20 72 65 74 72 79 20 3d 20 66 61 6c 73 65 3b 0d   retry = false;.
1f5e0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 62  ...        if (b
1f5f0 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ackup == null)..
1f600 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1f610 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
1f620 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61 63  llException("bac
1f630 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  kup");....      
1f640 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
1f650 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62 61  ndle handle = ba
1f660 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61 63  ckup._sqlite_bac
1f670 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  kup;....        
1f680 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e 75  if (handle == nu
1f690 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1f6a0 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
1f6b0 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
1f6c0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
1f6d0 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f         "Backup o
1f6e0 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76  bject has an inv
1f6f0 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
1f700 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
1f710 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
1f720 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
1f730 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
1f740 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
1f750 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1f760 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
1f770 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
1f780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f790 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74    "Backup object
1f7a0 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
1f7b0 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e 22  handle pointer."
1f7c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
1f7d0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
1f7e0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
1f7f0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
1f800 63 6b 75 70 5f 73 74 65 70 28 68 61 6e 64 6c 65  ckup_step(handle
1f810 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20 20  Ptr, nPage);..  
1f820 20 20 20 20 20 20 62 61 63 6b 75 70 2e 5f 73 74        backup._st
1f830 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f 2a  epResult = n; /*
1f840 20 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f 72 20   NOTE: Save for 
1f850 75 73 65 20 62 79 20 46 69 6e 69 73 68 42 61 63  use by FinishBac
1f860 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  kup. */....     
1f870 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
1f880 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
1f890 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1f8a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1f8b0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1f8c0 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66  .        else if
1f8d0 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
1f8e0 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20  orCode.Busy)..  
1f8f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f900 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72 75       retry = tru
1f910 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1f920 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1f930 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1f940 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53   else if (n == S
1f950 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c  QLiteErrorCode.L
1f960 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20 20 20 20  ocked)..        
1f970 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
1f980 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  etry = true;..  
1f990 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f9a0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1f9b0 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20  }..        else 
1f9c0 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
1f9d0 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d 0a  rrorCode.Done)..
1f9e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f9f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1fa00 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  lse;..        }.
1fa10 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
1fa20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1fa30 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1fa40 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
1fa50 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
1fa60 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
1fa70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1fa80 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1fa90 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
1faa0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
1fab0 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20  remaining to be 
1fac0 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20  copied from the 
1fad0 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f 20  source..    /// 
1fae0 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
1faf0 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61  destination data
1fb00 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20  base associated 
1fb10 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
1fb20 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63 6b  ed..    /// back
1fb30 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
1fb40 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1fb50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1fb60 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
1fb70 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
1fb80 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e  o check.</param>
1fb90 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
1fba0 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns>The number of
1fbb0 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67   pages remaining
1fbc0 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c 2f   to be copied.</
1fbd0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
1fbe0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1fbf0 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42 61 63  int RemainingBac
1fc00 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
1fc10 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
1fc20 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  p..        )..  
1fc30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
1fc40 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
1fc50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
1fc60 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
1fc70 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
1fc80 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
1fc90 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
1fca0 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
1fcb0 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
1fcc0 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
1fcd0 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
1fce0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1fcf0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
1fd00 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
1fd10 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
1fd20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
1fd30 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
1fd40 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
1fd50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
1fd60 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
1fd70 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
1fd80 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
1fd90 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1fda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
1fdb0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
1fdc0 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
1fdd0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1fde0 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
1fdf0 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
1fe00 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
1fe10 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
1fe20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
1fe30 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1fe40 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69 6e  e3_backup_remain
1fe50 69 6e 67 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  ing(handlePtr);.
1fe60 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
1fe70 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1fe80 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
1fe90 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
1fea0 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f   pages in the so
1feb0 75 72 63 65 20 64 61 74 61 62 61 73 65 20 61 73  urce database as
1fec0 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f  sociated..    //
1fed0 2f 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  / with the speci
1fee0 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65  fied backup obje
1fef0 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ct...    /// </s
1ff00 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1ff10 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61   <param name="ba
1ff20 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70  ckup">The backup
1ff30 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63 6b   object to check
1ff40 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
1ff50 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
1ff60 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
1ff70 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f 75  pages in the sou
1ff80 72 63 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 72  rce database.</r
1ff90 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
1ffa0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
1ffb0 6e 74 20 50 61 67 65 43 6f 75 6e 74 42 61 63 6b  nt PageCountBack
1ffc0 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  up(..        SQL
1ffd0 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75 70  iteBackup backup
1ffe0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
1fff0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
20000 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d  backup == null).
20010 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
20020 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
20030 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61  ullException("ba
20040 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ckup");....     
20050 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
20060 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62  andle handle = b
20070 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61  ackup._sqlite_ba
20080 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ckup;....       
20090 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e   if (handle == n
200a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
200b0 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
200c0 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
200d0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
200e0 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
200f0 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
20100 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
20110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
20120 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68  tr handlePtr = h
20130 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
20140 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20    if (handlePtr 
20150 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
20160 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
20170 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
20180 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
20190 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
201a0 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
201b0 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
201c0 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e   handle pointer.
201d0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ");....        r
201e0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
201f0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
20200 33 5f 62 61 63 6b 75 70 5f 70 61 67 65 63 6f 75  3_backup_pagecou
20210 6e 74 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  nt(handlePtr);..
20220 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
20230 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
20240 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20 74 68 65  /// Destroys the
20250 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c 20   backup object, 
20260 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e 79  rolling back any
20270 20 62 61 63 6b 75 70 20 74 68 61 74 20 6d 61 79   backup that may
20280 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20   be in..    /// 
20290 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f 2f  progess...    //
202a0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
202b0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
202c0 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62  e="backup">The b
202d0 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20  ackup object to 
202e0 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d 3e  destroy.</param>
202f0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
20300 76 65 72 72 69 64 65 20 76 6f 69 64 20 46 69 6e  verride void Fin
20310 69 73 68 42 61 63 6b 75 70 28 0d 0a 20 20 20 20  ishBackup(..    
20320 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
20330 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20 20   backup..       
20340 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
20350 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d 3d     if (backup ==
20360 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
20370 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
20380 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
20390 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d 0a  ion("backup");..
203a0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
203b0 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61 6e  BackupHandle han
203c0 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73 71  dle = backup._sq
203d0 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a  lite_backup;....
203e0 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
203f0 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
20400 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
20410 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
20420 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
20430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
20440 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68 61  Backup object ha
20450 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
20460 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  dle.");....     
20470 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65     IntPtr handle
20480 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
20490 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
204a0 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74 72  dlePtr == IntPtr
204b0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
204c0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
204d0 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
204e0 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
204f0 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
20500 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
20510 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
20520 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 23 69  ointer.");....#i
20530 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
20540 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RD..        SQLi
20550 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
20560 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
20570 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63 6b  ods.sqlite3_back
20580 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72 6f  up_finish_intero
20590 70 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a 23  p(handlePtr);..#
205a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53 51  else..        SQ
205b0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
205c0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
205d0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
205e0 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61 6e 64  ckup_finish(hand
205f0 6c 65 50 74 72 29 3b 0d 0a 23 65 6e 64 69 66 0d  lePtr);..#endif.
20600 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 2e  .        handle.
20610 53 65 74 48 61 6e 64 6c 65 41 73 49 6e 76 61 6c  SetHandleAsInval
20620 69 64 28 29 3b 0d 0a 0d 0a 23 69 66 20 43 4f 55  id();....#if COU
20630 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20 20 20 20 20  NT_HANDLE..     
20640 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c     if ((n == SQL
20650 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
20660 20 7c 7c 20 28 6e 20 3d 3d 20 62 61 63 6b 75 70   || (n == backup
20670 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29 20 68  ._stepResult)) h
20680 61 6e 64 6c 65 2e 57 61 73 52 65 6c 65 61 73 65  andle.WasRelease
20690 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  dOk();..#endif..
206a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e  ..        if ((n
206b0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
206c0 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e 20 21 3d  ode.Ok) && (n !=
206d0 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65 73   backup._stepRes
206e0 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ult))..         
206f0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
20700 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
20710 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
20720 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
20730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20790 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
207a0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74  ry>..    /// Det
207b0 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20 53  ermines if the S
207c0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
207d0 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  ry has been init
207e0 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 0d  ialized for the.
207f0 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74  .    /// current
20800 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
20810 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
20820 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
20830 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f 6c  ..    /// A bool
20840 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ean indicating w
20850 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
20860 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
20870 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d 0a  brary has been..
20880 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69      /// initiali
20890 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  zed for the curr
208a0 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ent process...  
208b0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
208c0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
208d0 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 49  verride bool IsI
208e0 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20  nitialized()..  
208f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
20900 75 72 6e 20 53 74 61 74 69 63 49 73 49 6e 69 74  urn StaticIsInit
20910 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20 20  ialized();..    
20920 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
20930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20980 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20990 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
209a0 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
209b0 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  s if the SQLite 
209c0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
209d0 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
209e0 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  d for the..    /
209f0 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  // current proce
20a00 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
20a10 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
20a20 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
20a30 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e  /// A boolean in
20a40 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
20a50 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69   or not the SQLi
20a60 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
20a70 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
20a80 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  / initialized fo
20a90 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
20aa0 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
20ab0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
20ac0 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
20ad0 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69  bool StaticIsIni
20ae0 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20  tialized()..    
20af0 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  {..        //.. 
20b00 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
20b10 3a 20 50 72 65 76 65 6e 74 20 72 61 63 65 73 20  : Prevent races 
20b20 77 69 74 68 20 6f 74 68 65 72 20 74 68 72 65 61  with other threa
20b30 64 73 20 66 6f 72 20 74 68 69 73 20 65 6e 74 69  ds for this enti
20b40 72 65 20 62 6c 6f 63 6b 2c 20 64 75 65 0d 0a 20  re block, due.. 
20b50 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
20b60 20 20 74 6f 20 74 68 65 20 74 72 79 2f 66 69 6e    to the try/fin
20b70 61 6c 6c 79 20 73 65 6d 61 6e 74 69 63 73 2e 20  ally semantics. 
20b80 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37 32 39   See ticket [729
20b90 30 35 63 39 61 37 37 5d 2e 0d 0a 20 20 20 20 20  05c9a77]...     
20ba0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 6c     //..        l
20bb0 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a  ock (syncRoot)..
20bc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20bd0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
20be0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
20bf0 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20 6f  Save the state o
20c00 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c  f the logging cl
20c10 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73  ass and then res
20c20 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20  tore it..       
20c30 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 66       //       af
20c40 74 65 72 20 77 65 20 61 72 65 20 64 6f 6e 65 20  ter we are done 
20c50 74 6f 20 61 76 6f 69 64 20 6c 6f 67 67 69 6e 67  to avoid logging
20c60 20 74 6f 6f 20 6d 61 6e 79 20 66 61 6c 73 65 20   too many false 
20c70 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 20  errors...       
20c80 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
20c90 20 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 45       bool savedE
20ca0 6e 61 62 6c 65 64 20 3d 20 53 51 4c 69 74 65 4c  nabled = SQLiteL
20cb0 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20  og.Enabled;..   
20cc0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
20cd0 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c  og.Enabled = fal
20ce0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
20cf0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
20d00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20d10 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
20d20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
20d30 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20  TE: This method 
20d40 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61 63  [ab]uses the fac
20d50 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69  t that SQLite wi
20d60 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20  ll always..     
20d70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
20d80 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
20d90 45 5f 45 52 52 4f 52 20 66 6f 72 20 61 6e 79 20  E_ERROR for any 
20da0 75 6e 6b 6e 6f 77 6e 20 63 6f 6e 66 69 67 75 72  unknown configur
20db0 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20  ation option..  
20dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
20dd0 20 20 20 20 20 20 20 2a 75 6e 6c 65 73 73 2a 20         *unless* 
20de0 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
20df0 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  ry has already b
20e00 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  een initialized.
20e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20e20 20 20 2f 2f 20 20 20 20 20 20 20 49 6e 20 74 68    //       In th
20e30 61 74 20 63 61 73 65 20 69 74 20 77 69 6c 6c 20  at case it will 
20e40 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 53 51  always return SQ
20e50 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0d 0a 20 20  LITE_MISUSE...  
20e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
20e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20e80 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
20e90 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
20ea0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
20eb0 65 33 5f 63 6f 6e 66 69 67 5f 6e 6f 6e 65 28 0d  e3_config_none(.
20ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20ed0 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
20ee0 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  gOpsEnum.SQLITE_
20ef0 43 4f 4e 46 49 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d  CONFIG_NONE);...
20f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20f10 20 72 65 74 75 72 6e 20 28 72 63 20 3d 3d 20 53   return (rc == S
20f20 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d  QLiteErrorCode.M
20f30 69 73 75 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  isuse);..       
20f40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
20f50 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
20f60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20f70 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
20f80 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20  teLog.Enabled = 
20f90 73 61 76 65 64 45 6e 61 62 6c 65 64 3b 0d 0a 20  savedEnabled;.. 
20fa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
20fb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
20fc0 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
20fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21020 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 55 53 45  /////....#if USE
21030 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 26 26 20  _INTEROP_DLL && 
21040 49 4e 54 45 52 4f 50 5f 4c 4f 47 0d 0a 20 20 20  INTEROP_LOG..   
21050 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
21060 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
21070 20 43 6f 6e 66 69 67 75 72 65 4c 6f 67 46 6f 72   ConfigureLogFor
21080 49 6e 74 65 72 6f 70 28 0d 0a 20 20 20 20 20 20  Interop(..      
21090 20 20 73 74 72 69 6e 67 20 63 6c 61 73 73 4e 61    string classNa
210a0 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  me..        ).. 
210b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
210c0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
210d0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
210e0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
210f0 6f 6e 66 69 67 5f 6c 6f 67 5f 69 6e 74 65 72 6f  onfig_log_intero
21100 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p();....        
21110 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
21120 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
21130 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21140 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
21150 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
21160 33 5f 6c 6f 67 28 72 63 2c 20 53 51 4c 69 74 65  3_log(rc, SQLite
21170 43 6f 6e 76 65 72 74 2e 54 6f 55 54 46 38 28 0d  Convert.ToUTF8(.
21180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21190 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53   HelperMethods.S
211a0 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74  tringFormat(Cult
211b0 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
211c0 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
211d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
211e0 6c 6f 67 67 69 6e 67 20 69 6e 69 74 69 61 6c 69  logging initiali
211f0 7a 65 64 20 76 69 61 20 5c 22 7b 30 7d 5c 22 2e  zed via \"{0}\".
21200 22 2c 20 63 6c 61 73 73 4e 61 6d 65 29 29 29 3b  ", className)));
21210 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
21220 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 72 63       else if (rc
21230 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
21240 6f 64 65 2e 44 6f 6e 65 29 0d 0a 20 20 20 20 20  ode.Done)..     
21250 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21260 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72    rc = SQLiteErr
21270 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20  orCode.Ok;..    
21280 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21290 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20   return rc;..   
212a0 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
212b0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
212c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21310 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
21320 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
21330 48 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20  Helper function 
21340 74 6f 20 72 65 74 72 69 65 76 65 20 61 20 63 6f  to retrieve a co
21350 6c 75 6d 6e 20 6f 66 20 64 61 74 61 20 66 72 6f  lumn of data fro
21360 6d 20 61 6e 20 61 63 74 69 76 65 20 73 74 61 74  m an active stat
21370 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ement...    /// 
21380 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
21390 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
213a0 22 73 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65  "stmt">The state
213b0 6d 65 6e 74 20 62 65 69 6e 67 20 73 74 65 70 28  ment being step(
213c0 29 27 64 20 74 68 72 6f 75 67 68 3c 2f 70 61 72  )'d through</par
213d0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
213e0 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
213f0 3e 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63  >The flags assoc
21400 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63  iated with the c
21410 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61  onnection.</para
21420 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
21430 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e  am name="index">
21440 54 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  The column index
21450 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
21460 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
21470 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e  aram name="typ">
21480 54 68 65 20 74 79 70 65 20 6f 66 20 64 61 74 61  The type of data
21490 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
214a0 65 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 55 6e  e column.  If Un
214b0 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 69  initialized, thi
214c0 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20  s function will 
214d0 72 65 74 72 69 65 76 65 20 74 68 65 20 64 61 74  retrieve the dat
214e0 61 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f  atype informatio
214f0 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
21500 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
21510 75 72 6e 73 20 74 68 65 20 64 61 74 61 20 69 6e  urns the data in
21520 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65 74   the column</ret
21530 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
21540 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a  nal override obj
21550 65 63 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c  ect GetValue(SQL
21560 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
21570 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
21580 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
21590 69 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74  int index, SQLit
215a0 65 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20  eType typ)..    
215b0 7b 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66  {..      TypeAff
215c0 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e  inity aff = typ.
215d0 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  Affinity;..     
215e0 20 69 66 20 28 61 66 66 20 3d 3d 20 54 79 70 65   if (aff == Type
215f0 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 20 72  Affinity.Null) r
21600 65 74 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c  eturn DBNull.Val
21610 75 65 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 20  ue;..      Type 
21620 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
21630 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20     if (typ.Type 
21640 21 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74  != DbType.Object
21650 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
21660 20 20 20 20 74 20 3d 20 53 51 4c 69 74 65 43 6f      t = SQLiteCo
21670 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65  nvert.SQLiteType
21680 54 6f 54 79 70 65 28 74 79 70 29 3b 0d 0a 20 20  ToType(typ);..  
21690 20 20 20 20 20 20 61 66 66 20 3d 20 54 79 70 65        aff = Type
216a0 54 6f 41 66 66 69 6e 69 74 79 28 74 2c 20 66 6c  ToAffinity(t, fl
216b0 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ags);..      }..
216c0 0d 0a 20 20 20 20 20 20 69 66 20 28 48 65 6c 70  ..      if (Help
216d0 65 72 4d 65 74 68 6f 64 73 2e 48 61 73 46 6c 61  erMethods.HasFla
216e0 67 73 28 66 6c 61 67 73 2c 20 53 51 4c 69 74 65  gs(flags, SQLite
216f0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
21700 47 65 74 41 6c 6c 41 73 54 65 78 74 29 29 0d 0a  GetAllAsText))..
21710 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21720 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
21730 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex);....      
21740 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20 20  switch (aff)..  
21750 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
21760 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
21770 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20  .Blob:..        
21780 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d    if (typ.Type =
21790 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26 26  = DbType.Guid &&
217a0 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 3d   typ.Affinity ==
217b0 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65   TypeAffinity.Te
217c0 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt)..           
217d0 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64   return new Guid
217e0 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69  (GetText(stmt, i
217f0 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndex));....     
21800 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e       int n = (in
21810 74 29 47 65 74 42 79 74 65 73 28 73 74 6d 74 2c  t)GetBytes(stmt,
21820 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c 2c   index, 0, null,
21830 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20   0, 0);..       
21840 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e 65     byte[] b = ne
21850 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20 20  w byte[n];..    
21860 20 20 20 20 20 20 47 65 74 42 79 74 65 73 28 73        GetBytes(s
21870 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 62  tmt, index, 0, b
21880 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20 20  , 0, n);....    
21890 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54 79        if (typ.Ty
218a0 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75 69  pe == DbType.Gui
218b0 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a 20  d && n == 16).. 
218c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
218d0 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d 0a  n new Guid(b);..
218e0 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
218f0 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20 63  rn b;..        c
21900 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
21910 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20 20  .DateTime:..    
21920 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
21930 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20 69  DateTime(stmt, i
21940 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
21950 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
21960 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20  y.Double:..     
21970 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e 75       if (t == nu
21980 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44 6f  ll) return GetDo
21990 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  uble(stmt, index
219a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  );..          re
219b0 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68 61  turn Convert.Cha
219c0 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75 62 6c  ngeType(GetDoubl
219d0 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e(stmt, index), 
219e0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
219f0 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e    HelperMethods.
21a00 48 61 73 46 6c 61 67 73 28 66 6c 61 67 73 2c 20  HasFlags(flags, 
21a10 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
21a20 46 6c 61 67 73 2e 47 65 74 49 6e 76 61 72 69 61  Flags.GetInvaria
21a30 6e 74 44 6f 75 62 6c 65 29 20 3f 0d 0a 20 20 20  ntDouble) ?..   
21a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
21a50 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
21a60 69 61 6e 74 43 75 6c 74 75 72 65 20 3a 20 43 75  iantCulture : Cu
21a70 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
21a80 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20  tCulture);..    
21a90 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
21aa0 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20  inity.Int64:..  
21ab0 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
21ac0 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65   null) return Ge
21ad0 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
21ae0 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
21af0 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
21b00 42 6f 6f 6c 65 61 6e 29 29 20 72 65 74 75 72 6e  Boolean)) return
21b10 20 47 65 74 42 6f 6f 6c 65 61 6e 28 73 74 6d 74   GetBoolean(stmt
21b20 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
21b30 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
21b40 70 65 6f 66 28 53 42 79 74 65 29 29 20 72 65 74  peof(SByte)) ret
21b50 75 72 6e 20 47 65 74 53 42 79 74 65 28 73 74 6d  urn GetSByte(stm
21b60 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
21b70 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
21b80 79 70 65 6f 66 28 42 79 74 65 29 29 20 72 65 74  ypeof(Byte)) ret
21b90 75 72 6e 20 47 65 74 42 79 74 65 28 73 74 6d 74  urn GetByte(stmt
21ba0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
21bb0 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
21bc0 70 65 6f 66 28 49 6e 74 31 36 29 29 20 72 65 74  peof(Int16)) ret
21bd0 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73 74 6d  urn GetInt16(stm
21be0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
21bf0 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
21c00 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29 20 72  ypeof(UInt16)) r
21c10 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31 36 28  eturn GetUInt16(
21c20 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
21c30 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
21c40 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29 29  = typeof(Int32))
21c50 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 33 32   return GetInt32
21c60 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
21c70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
21c80 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 33 32  == typeof(UInt32
21c90 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e  )) return GetUIn
21ca0 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
21cb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
21cc0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74  (t == typeof(Int
21cd0 36 34 29 29 20 72 65 74 75 72 6e 20 47 65 74 49  64)) return GetI
21ce0 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
21cf0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
21d00 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
21d10 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65  nt64)) return Ge
21d20 74 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  tUInt64(stmt, in
21d30 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
21d40 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
21d50 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e  ChangeType(GetIn
21d60 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
21d70 2c 20 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  , t,..          
21d80 20 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64      HelperMethod
21d90 73 2e 48 61 73 46 6c 61 67 73 28 66 6c 61 67 73  s.HasFlags(flags
21da0 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
21db0 6f 6e 46 6c 61 67 73 2e 47 65 74 49 6e 76 61 72  onFlags.GetInvar
21dc0 69 61 6e 74 49 6e 74 36 34 29 20 3f 0d 0a 20 20  iantInt64) ?..  
21dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21de0 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
21df0 72 69 61 6e 74 43 75 6c 74 75 72 65 20 3a 20 43  riantCulture : C
21e00 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
21e10 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20  ntCulture);..   
21e20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20       default:.. 
21e30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21e40 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
21e50 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  dex);..      }..
21e60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
21e70 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
21e80 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54  nt GetCursorForT
21e90 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65  able(SQLiteState
21ea0 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64  ment stmt, int d
21eb0 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29  b, int rootPage)
21ec0 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
21ed0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
21ee0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
21ef0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
21f00 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75  sqlite3_table_cu
21f10 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d  rsor_interop(stm
21f20 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
21f30 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a  db, rootPage);..
21f40 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
21f50 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d  urn -1;..#endif.
21f60 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
21f70 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
21f80 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72  long GetRowIdFor
21f90 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61  Cursor(SQLiteSta
21fa0 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
21fb0 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d   cursor)..    {.
21fc0 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
21fd0 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e  NDARD..      lon
21fe0 67 20 72 6f 77 69 64 20 3d 20 30 3b 0d 0a 20 20  g rowid = 0;..  
21ff0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
22000 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  ode rc = UnsafeN
22010 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
22020 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77 69  ite3_cursor_rowi
22030 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  d_interop(stmt._
22040 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75 72  sqlite_stmt, cur
22050 73 6f 72 2c 20 72 65 66 20 72 6f 77 69 64 29 3b  sor, ref rowid);
22060 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 3d  ..      if (rc =
22070 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
22080 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f 77  e.Ok) return row
22090 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  id;....      ret
220a0 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20  urn 0;..#else.. 
220b0 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
220c0 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
220d0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
220e0 65 72 72 69 64 65 20 76 6f 69 64 20 47 65 74 49  erride void GetI
220f0 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64  ndexColumnExtend
22100 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64 61  edInfo(string da
22110 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20 69  tabase, string i
22120 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c  ndex, string col
22130 75 6d 6e 2c 20 72 65 66 20 69 6e 74 20 73 6f 72  umn, ref int sor
22140 74 4d 6f 64 65 2c 20 72 65 66 20 69 6e 74 20 6f  tMode, ref int o
22150 6e 45 72 72 6f 72 2c 20 72 65 66 20 73 74 72 69  nError, ref stri
22160 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  ng collationSequ
22170 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ence)..    {..#i
22180 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
22190 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  RD..      IntPtr
221a0 20 63 6f 6c 6c 20 3d 20 49 6e 74 50 74 72 2e 5a   coll = IntPtr.Z
221b0 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
221c0 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  colllen = 0;..  
221d0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
221e0 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20  ode rc;....     
221f0 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
22200 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
22210 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69  3_index_column_i
22220 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  nfo_interop(_sql
22230 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62 61 73  , ToUTF8(databas
22240 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78  e), ToUTF8(index
22250 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e  ), ToUTF8(column
22260 29 2c 20 72 65 66 20 73 6f 72 74 4d 6f 64 65 2c  ), ref sortMode,
22270 20 72 65 66 20 6f 6e 45 72 72 6f 72 2c 20 72 65   ref onError, re
22280 66 20 63 6f 6c 6c 2c 20 72 65 66 20 63 6f 6c 6c  f coll, ref coll
22290 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  len);..      if 
222a0 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72  (rc != SQLiteErr
222b0 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
222c0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
222d0 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d  tion(rc, null);.
222e0 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69  ...      collati
222f0 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46  onSequence = UTF
22300 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20  8ToString(coll, 
22310 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  colllen);..#else
22320 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64 65  ..      sortMode
22330 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45   = 0;..      onE
22340 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20  rror = 2;..     
22350 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   collationSequen
22360 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a  ce = "BINARY";..
22370 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
22380 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
22390 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
223a0 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72  orCode FileContr
223b0 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d  ol(string zDbNam
223c0 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74  e, int op, IntPt
223d0 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a  r pArg)..    {..
223e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
223f0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
22400 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f  .sqlite3_file_co
22410 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62  ntrol(_sql, (zDb
22420 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  Name != null) ? 
22430 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29 20  ToUTF8(zDbName) 
22440 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67  : null, op, pArg
22450 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  );..    }..  }..
22460 7d 0d 0a                                         }..